---
title: 'Ağ Yalıtımı ve Özel Uç Noktalar'
source: 'https://academia.sh/tr/kurslar/bulut-yonetisimi/ag-yalitimi-ve-ozel-uc-noktalar'
course: 'Bulut Yönetişimi, Güvenlik ve Maliyet'
language: tr
updated: '2026-08-17T18:06:55+00:00'
license: 'CC BY-SA 4.0'
---

# Ağ Yalıtımı ve Özel Uç Noktalar

Yönetilen hizmete genel uçtan mı özel uçtan mı gidildiğinin ölçümü: 25 erişimde genel uç kapatılınca 12 meşru erişimin kırılması, 12 erişimin sıfır yola düşmesi, aynı adın 11 yerine 14 yerde özel adrese çözülmesi ve eksiklerin kapatılmasının 12 yeni özel uç ile ayda 180 kurgu birim tutması.

Önceki ders bir kaynağın genel erişime açık olup olmadığını tek bir bayrakla okudu: Y1 sekiz yerde
ateşledi, altısı işaretlendi. O bayrak bir kaynağın kendi ayarıdır. Bu dersin sorusu bir aşama
öncesindedir — bir iş yükü **yönetilen bir hizmete** gittiğinde paketi hangi yoldan gidiyor? Ağ
yalıtımının ve özel bağlantının kendisi M23/K02'de ölçüldü; burada tekrarlanmaz. Buranın nesnesi
tek tek kiralanmış hizmetlerdir: bir nesne deposuna, bir kuyruğa ya da bir sır saklama servisine
erişim, hizmetin **genel ucundan** mı yoksa özel ağın içine yerleştirilmiş bir **özel uç
noktadan** mı geçiyor?

Ayrımın ölçülebilir olmasının nedeni şudur: yönetilen hizmet varsayılan olarak genel bir adla ve
genel bir adresle gelir. Özel uç nokta iki şeyi birden değiştirir — ağa yeni bir yol ekler ve
adın **çözümlendiği adresi** değiştirir. İkisi ayrı ayrı bozulabilir ve bu ders ikisini ayrı ayrı
sayar.

## Hizmet, Ağ ve Erişim Çizelgesi

Örnek kursun kurgu **bölgesel ölçüm ağı**dır. **BG31 — yönetilen hizmet kataloğu:** yedi hizmet;
altısı özel uç noktayı destekler, biri yalnız genel uç sunar. Her destekli hizmetin aylık bir özel
uç kirası vardır (kurgu birim). **BG32 — üç özel ağ ve tek eşleme kaydı:** üretim ile sınama ağı
eşlenmiştir, ortak ağ eşlenmemiştir. **BG33 — kurulu özel uç noktalar:** altı hizmetin altısı da
yalnız üretim ağında kuruludur. **BG34 — ad çözümleme bölgesi:** özel kayıtları taşıyan bölge
üretim ve ortak ağa bağlıdır, sınama ağına bağlı değildir. **BG35 — erişim çizelgesi:** yirmi beş
erişim; yirmi ikisi meşru, üçü meşru değil, üçü bir atlama noktasına çevrilebilir. **BG36 — üç
senaryo:** A genel uç açık, B genel uç kapalı, C genel uç kapalı ve eksikler kapatılmış.

Aşağıdaki dosya bu çizelgeleri kurar ve üç senaryoyu koşturur. Süreç içi bir **modeldir**; gerçek
ağ, ad kaydı ya da hizmet yoktur.

```js
// yalitim/uc.mjs — yonetilen hizmete genel uctan mi ozel uctan mi gidildiginin olcumu.
// Surec ici model: bolgesel olcum agi (kurgu); gercek ag, ad kaydi ya da hizmet yoktur.

const satir = (s) => s.trim().split("\n").map((l) => l.trim().split("|"));
const yaz = (g, ...s) => console.log(s.map((v, i) =>
  (g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i]))).join(""));

// Yonetilen hizmet: ad|ozel uc destegi|ozel uc aylik kirasi (kurgu birim)
const HIZMET = Object.fromEntries(satir(`
  nesne-deposu|1|18
  iliskisel-depo|1|18
  kuyruk|1|14
  sir-saklama|1|12
  anahtar-yonetimi|1|12
  gunluk-toplama|1|16
  bildirim-hizmeti|0|0`).map(([ad, d, k]) => [ad, { destek: d === "1", kira: +k }]));

// Ozel aglar ve esleme (model girdisi). ortak-ag eslenmemistir.
const AG = ["uretim-ag", "sinama-ag", "ortak-ag"];
const ESLEME = [["uretim-ag", "sinama-ag"]];
const eslesik = (a, b) => a === b || ESLEME.some(([x, y]) =>
  (x === a && y === b) || (x === b && y === a));

// Kurulu ozel uc noktalar: hizmet|ag. Alti hizmetin altisi da yalniz uretim aginda.
const KURULU_A = satir(`
  nesne-deposu|uretim-ag
  iliskisel-depo|uretim-ag
  kuyruk|uretim-ag
  sir-saklama|uretim-ag
  anahtar-yonetimi|uretim-ag
  gunluk-toplama|uretim-ag`).map((x) => x.join("|"));

// Ad cozumleme bolgesinin bagli oldugu aglar: sinama-ag baglanmamistir.
const ZONA_A = ["uretim-ag", "ortak-ag"];

// Erisim: istemci|hizmet|konum (ag ya da dis)|mesru mu|atlama noktasina cevrilebilir mi
const ERISIM = satir(`
  olcum-toplayici|nesne-deposu|uretim-ag|1|0
  olcum-toplayici|kuyruk|uretim-ag|1|0
  akis-isleyici|kuyruk|uretim-ag|1|0
  akis-isleyici|iliskisel-depo|uretim-ag|1|0
  akis-isleyici|anahtar-yonetimi|uretim-ag|1|0
  katalog-servisi|iliskisel-depo|uretim-ag|1|0
  katalog-servisi|sir-saklama|uretim-ag|1|0
  kapi-servisi|gunluk-toplama|uretim-ag|1|0
  kapi-servisi|bildirim-hizmeti|uretim-ag|1|0
  sinama-kosucu|nesne-deposu|sinama-ag|1|0
  sinama-kosucu|iliskisel-depo|sinama-ag|1|0
  sinama-kosucu|kuyruk|sinama-ag|1|0
  ortak-rapor|nesne-deposu|ortak-ag|1|0
  ortak-rapor|iliskisel-depo|ortak-ag|1|0
  ortak-rapor|gunluk-toplama|ortak-ag|1|0
  yonetim-araci|iliskisel-depo|dis|1|1
  yonetim-araci|sir-saklama|dis|1|1
  yonetim-araci|anahtar-yonetimi|dis|1|1
  gece-isi|nesne-deposu|dis|1|0
  gece-isi|kuyruk|dis|1|0
  kenar-yukleyici|nesne-deposu|dis|1|0
  kenar-yukleyici|bildirim-hizmeti|dis|1|0
  gelistirici-dizustu|nesne-deposu|dis|0|0
  gelistirici-dizustu|iliskisel-depo|dis|0|0
  bilinmeyen-istemci|nesne-deposu|dis|0|0`)
  .map(([istemci, hizmet, konum, mesru, atlama]) =>
    ({ istemci, hizmet, konum, mesru: mesru === "1", atlama: atlama === "1" }));

// Bir erisimin yollari ve ad cozumlemesi. genelAcik: hizmetin genel ucu hala aciksa.
const olc = (e, { kurulu, zona, genelAcik, atlamaVar }) => {
  const ozelVar = (ag) => kurulu.includes(`${e.hizmet}|${ag}`);
  const ozelYol = e.konum !== "dis" && AG.some((a) => ozelVar(a) && eslesik(a, e.konum));
  const genelYol = genelAcik(e.hizmet);
  // Ad cozumlemesi: ic bolgeye bagli bir agdan bakiliyorsa ve o hizmetin kaydi varsa ozel adres
  const kayitVar = AG.some((a) => ozelVar(a));
  const cozum = e.konum !== "dis" && zona.includes(e.konum) && kayitVar ? "ozel" : "genel";
  // Atlama noktasi: dis istemci ic ag uzerinden gecer, ad ic bolgeden cozulur
  const atlamaYolu = atlamaVar && e.atlama && kayitVar;
  const yollar = [];
  if (ozelYol) yollar.push("ozel");
  if (genelYol) yollar.push("genel");
  if (atlamaYolu) yollar.push("atlama");
  const calisiyor = (cozum === "ozel" && ozelYol) || (cozum === "genel" && genelYol) || atlamaYolu;
  const durum = calisiyor
    ? (atlamaYolu && !(cozum === "ozel" && ozelYol) && !(cozum === "genel" && genelYol)
        ? "atlama" : cozum === "ozel" ? "ozel uc" : "genel uc")
    : (cozum === "ozel" ? "ad ozel, yol yok" : "ad genel, uc kapali");
  return { yol: yollar.length, cozum, calisiyor, durum };
};

// Uc senaryo
const hepsiDestekli = (h) => HIZMET[h].destek;
const KURULU_C = AG.flatMap((a) => Object.keys(HIZMET).filter(hepsiDestekli).map((h) => `${h}|${a}`));
const SENARYO = {
  "A genel uc acik": { kurulu: KURULU_A, zona: ZONA_A, atlamaVar: false,
    genelAcik: () => true },
  "B genel uc kapali": { kurulu: KURULU_A, zona: ZONA_A, atlamaVar: false,
    genelAcik: (h) => !HIZMET[h].destek },
  "C eksikler kapatildi": { kurulu: KURULU_C, zona: AG, atlamaVar: true,
    genelAcik: (h) => !HIZMET[h].destek },
};

const S = [-22, 10, 12, 10, 16, 10, 14];
yaz(S, "senaryo", "ozel uc", "genel uc", "atlama", "kirilan mesru", "kesilen", "internetten");
const R = {};
for (const [ad, s] of Object.entries(SENARYO)) {
  const c = ERISIM.map((e) => ({ e, ...olc(e, s) }));
  const say = (d) => c.filter((x) => x.durum === d).length;
  R[ad] = {
    ozel: say("ozel uc"), genel: say("genel uc"), atlama: say("atlama"),
    kirilan: c.filter((x) => !x.calisiyor && x.e.mesru).length,
    kesilen: c.filter((x) => !x.calisiyor && !x.e.mesru).length,
    internet: c.filter((x) => x.calisiyor && x.durum === "genel uc").length,
    c,
  };
  yaz(S, ad, R[ad].ozel, R[ad].genel, R[ad].atlama, R[ad].kirilan, R[ad].kesilen, R[ad].internet);
}

// Ad cozumlemesi: ayni ad hangi senaryoda hangi adrese cozuluyor
const C = [-22, 14, 15];
console.log();
yaz(C, "senaryo", "ozel adrese", "genel adrese");
for (const ad of Object.keys(SENARYO))
  yaz(C, ad, R[ad].c.filter((x) => x.cozum === "ozel").length,
    R[ad].c.filter((x) => x.cozum === "genel").length);

// Genel uc kapatilinca kac yol kaliyor: erisim basina yol sayisi dagilimi
const Y = [-22, 9, 9, 9, 14];
console.log();
yaz(Y, "senaryo", "0 yol", "1 yol", "2 yol", "toplam erisim");
for (const ad of Object.keys(SENARYO)) {
  const d = [0, 1, 2].map((n) => R[ad].c.filter((x) => x.yol === n).length);
  yaz(Y, ad, ...d, ERISIM.length);
}

// B senaryosunda kirilan mesru erisimlerin nedeni
const B = [-24, 10];
console.log();
yaz(B, "B: kirilma nedeni", "erisim");
for (const n of ["ad ozel, yol yok", "ad genel, uc kapali"])
  yaz(B, n, R["B genel uc kapali"].c.filter((x) => !x.calisiyor && x.e.mesru
    && x.durum === n).length);
const konumlar = [...new Set(ERISIM.map((e) => e.konum))];
const KN = [-24, 10];
console.log();
yaz(KN, "B: kirilan mesru, konum", "erisim");
for (const k of konumlar) {
  const n = R["B genel uc kapali"].c.filter((x) => !x.calisiyor && x.e.mesru && x.e.konum === k);
  if (n.length) yaz(KN, k, n.length);
}

// Ozel uc noktanin maliyeti: her hizmet ve her ag icin ayri (kurgu birim)
const kira = (kurulu) => kurulu.reduce((t, x) => t + HIZMET[x.split("|")[0]].kira, 0);
const destekli = Object.keys(HIZMET).filter(hepsiDestekli).length;
console.log(`\nozel uc: A/B ${KURULU_A.length} adet, aylik ${kira(KURULU_A)} birim; ` +
  `C ${KURULU_C.length} adet (${destekli} hizmet x ${AG.length} ag), aylik ${kira(KURULU_C)} birim`);
console.log(`C, B'ye gore ${KURULU_C.length - KURULU_A.length} yeni ozel uc ve ` +
  `${kira(KURULU_C) - kira(KURULU_A)} birim/ay ekliyor; ` +
  `kirilan mesru erisim ${R["B genel uc kapali"].kirilan} -> ${R["C eksikler kapatildi"].kirilan}`);
const kapatilamaz = Object.keys(HIZMET).filter((h) => !HIZMET[h].destek);
console.log(`ozel uc desteklemeyen ${kapatilamaz.length} hizmet: ` +
  `${ERISIM.filter((e) => !HIZMET[e.hizmet].destek).length} erisim her senaryoda ` +
  `genel uctan geciyor; birim basina ${(kira(KURULU_C) / KURULU_C.length).toFixed(1)} birim ` +
  `ortalama kira`);

// Kurulan her ozel uc bir hizmet ve bir ag icindir; kaci gercekten kullaniliyor
const GEREKLI = [...new Set(ERISIM.filter((e) => e.mesru && e.konum !== "dis"
  && HIZMET[e.hizmet].destek).map((e) => `${e.hizmet}|${e.konum}`))];
const bosta = KURULU_C.filter((x) => !GEREKLI.includes(x));
console.log(`C'deki ${KURULU_C.length} ozel ucun ${GEREKLI.length} tanesi bir mesru erisim ` +
  `tarafindan kullaniliyor; ${bosta.length} tanesi bosta ve ayda ${kira(bosta)} birim yiyor`);
console.log(`yalnizca gerekli ${GEREKLI.length} ozel uc kurulsa ayda ${kira(GEREKLI)} birim: ` +
  `ust sinir ${destekli} hizmet x ${AG.length} ag = ${destekli * AG.length}, kalan ` +
  `${destekli * AG.length - GEREKLI.length} kurulum`);
```

```
senaryo                  ozel uc    genel uc    atlama   kirilan mesru   kesilen   internetten
A genel uc acik                8          14         0               3         0            14
B genel uc kapali              8           2         0              12         3             2
C eksikler kapatildi          14           2         3               3         3             2

senaryo                  ozel adrese   genel adrese
A genel uc acik                   11             14
B genel uc kapali                 11             14
C eksikler kapatildi              14             11

senaryo                   0 yol    1 yol    2 yol toplam erisim
A genel uc acik               0       14       11            25
B genel uc kapali            12       13        0            25
C eksikler kapatildi          6       19        0            25

B: kirilma nedeni           erisim
ad ozel, yol yok                 3
ad genel, uc kapali              9

B: kirilan mesru, konum     erisim
sinama-ag                        3
ortak-ag                         3
dis                              6

ozel uc: A/B 6 adet, aylik 90 birim; C 18 adet (6 hizmet x 3 ag), aylik 270 birim
C, B'ye gore 12 yeni ozel uc ve 180 birim/ay ekliyor; kirilan mesru erisim 12 -> 3
ozel uc desteklemeyen 1 hizmet: 2 erisim her senaryoda genel uctan geciyor; birim basina 15.0 birim ortalama kira
C'deki 18 ozel ucun 12 tanesi bir mesru erisim tarafindan kullaniliyor; 6 tanesi bosta ve ayda 78 birim yiyor
yalnizca gerekli 12 ozel uc kurulsa ayda 192 birim: ust sinir 6 hizmet x 3 ag = 18, kalan 6 kurulum
```

Sayılar **ölçüm** sınıfındadır; girdileri yukarıdaki varsayımlardır. İlk okunacak satır A
senaryosudur ve rahatsız edicidir: özel uç noktalar kurulmuş, genel uç hâlâ açık ve yirmi beş
erişimin **on dördü genel internetten geçiyor**. Özel uç kurulmuş olması trafiğin oradan geçtiği
anlamına gelmiyor. Aynı satırda A senaryosunda bile üç meşru erişim kırık duruyor.

## Yol Sayısı ile Erişimin Ayrılması

Yol dağılımı tablosu bu ayrımı taşıyor. A senaryosunda hiçbir erişim sıfır yolda değil: on dördü
tek yolda, on biri iki yolda. Yani üretim ve sınama ağındaki on bir erişim için hem özel uç hem
genel uç açıktır. Buna rağmen sınama ağındaki üç erişim genel uçtan gidiyor, çünkü **ad çözümleme
bölgesi sınama ağına bağlı değil**. Yol vardır, ad onu göstermez. Ölçünün ayırdığı şey budur:
özel uç noktayı kurmak bir yol açar, ad kaydını bağlamak o yolu kullanılır kılar ve ikisi ayrı
işlerdir.

Ortak ağdaki üç erişim ters tarafta durur. Ad bölgesi ortak ağa bağlıdır, dolayısıyla ad özel
adrese çözülür; ama ortak ağ üretim ağıyla eşlenmemiştir ve özel adrese giden bir yol yoktur. A
senaryosunda bile bu üç erişim kırıktır ve kırılma nedeni genel ucun kapatılması değildir. Ad
çözümlemesi yönlendirmeden önce sonuç verir; adres yanlış tarafa çözüldüğünde açık duran genel uç
bile kurtarmaz.

## Genel Uç Kapatıldığında Kalan

B senaryosunda destekli altı hizmetin genel ucu kapatılıyor. Yirmi beş erişimin **on ikisi sıfır
yola düşüyor**, on üçü tek yolda kalıyor ve iki yollu erişim kalmıyor. Kırılan meşru erişim üçten
on ikiye çıkıyor; buna karşılık meşru olmayan üç erişim — geliştirici dizüstünün üretim deposuna
iki doğrudan okuması ve kaynağı bilinmeyen bir istemci — kesiliyor. Kazanç sütunu budur ve üç
kalemdir.

Kırılan on ikinin nedenleri iki gruba ayrılıyor. Üçü "ad özel, yol yok" durumundadır ve zaten
A'da da kırıktı; dokuzu "ad genel, uç kapalı" durumundadır ve doğrudan kapatmanın sonucudur.
Konuma göre bakıldığında sınama ağından üç, ortak ağdan üç ve **dışarıdan altı** erişim kırılıyor.
Dışarıdan gelen altısı bu dersin asıl uyarısıdır: gece toplu işi, kenar yükleyicisi ve yönetim
aracı özel ağın içinde değildir, hiçbir zaman da olmamıştı. Genel ucun kapatılması bunları
görmeden keser, çünkü kapatma kararı hizmet tarafında verilir ve hizmet tarafı istemcinin nerede
olduğunu bilmez.

## Eksikleri Kapatmanın Faturası

C senaryosunda üç şey birden yapılıyor: her destekli hizmet için her ağda özel uç kuruluyor, ad
bölgesi üç ağa da bağlanıyor ve yönetim aracı için bir atlama noktası ekleniyor. Sonuç, kırılan
meşru erişimi on ikiden üçe indiriyor; özel uçtan geçen erişim sekizden on dörde çıkıyor, üç
erişim atlama noktası üzerinden geçiyor ve genel adrese çözülen ad sayısı on dörtten on bire
iniyor.

Kalan üç kırık erişim kapatılamayanlardır: gece toplu işinin iki erişimi ve kenar yükleyicisinin
depo erişimi. Bunlar dışarıdan çalışır, atlama noktasına çevrilemez ve özel uç noktanın tanımı
gereği erişemez. Bir özel uç nokta, ağın içinden erişimi çözer; ağın dışında kalan bir istemci
için çözecek bir şeyi yoktur. Bu üç iş ya ağın içine taşınacak ya da genel uç açık kalacaktır.

Faturanın kendisi ayrı bir kalemdir ve tek seferlik değildir. **Özel uç nokta hizmet başına ve ağ
başına ayrı gerekir:** altı destekli hizmet çarpı üç ağ, on sekiz kurulum ve ayda 270 kurgu birim.
B'ye göre on iki yeni özel uç ve 180 birim/ay eklenmiş oluyor — dokuz meşru erişimi kurtarmanın
bedeli budur. On sekiz kurulumun yalnız on ikisi bir meşru erişim tarafından kullanılıyor; kalan
altısı boştadır ve ayda 78 birim yiyor. Yalnız gerekli on ikisi kurulsaydı fatura 192 birim
olurdu. Üst sınır on sekizdir ve on ikisi doludur; her yeni hizmet ya da yeni ağ bu çarpımı
büyütür, çünkü tek bir özel uç birden çok hizmete hizmet etmez.

Bir kalem hiçbir senaryoda kapanmıyor. Bildirim hizmeti özel uç noktayı desteklemez; ona giden
iki erişim üç senaryoda da genel uçtan geçer. Kiralanan katmanın sınırı burada görünür hâle
geliyor: yalıtımı ne kadar ileri götürebileceğine sağlayıcının hizmet başına verdiği yetenek
karar veriyor ve bu kalem müzakere edilemez.

## Özet

- Özel uç noktaların kurulu olması trafiğin oradan geçtiği anlamına gelmiyor: A senaryosunda
  yirmi beş erişimin on dördü genel internetten geçiyor ve üçü zaten kırık.
- Yol ile ad çözümlemesi ayrı ölçülür. Sınama ağında iki yol açıktır ama ad bölgesi bağlı olmadığı
  için üç erişim genel uçtan gider; ortak ağda ad özele çözülür ama eşleme olmadığı için yol yoktur.
- Genel uç kapatılınca yirmi beş erişimin on ikisi sıfır yola düşüyor; kırılan meşru erişim üçten
  on ikiye çıkıyor (sınama 3, ortak 3, dışarıdan 6) ve meşru olmayan üç erişim kesiliyor.
- Eksikleri kapatmak kırılanı on ikiden üçe indiriyor; bedeli on iki yeni özel uç ve ayda 180
  kurgu birimdir. Kalan üç erişim ağın dışındadır ve özel uç noktayla çözülemez.
- Özel uç nokta hizmet başına ve ağ başına ayrı gerekir: altı hizmet çarpı üç ağ, on sekizlik üst
  sınırın on ikisi kullanılıyor, altısı boşta ayda 78 birim yiyor.
- Bir hizmet özel uç noktayı desteklemiyor; ona giden iki erişim her senaryoda genel uçtan geçer
  ve bu sınıra kiracının verebileceği bir karar yoktur.

## Sonraki Adım

Genel uç kapatıldı, yollar sayıldı ve dışarıda kalan üç erişim adıyla yazıldı. Ama kapanan yol
yalnız beklenen istemcileri değil, beklenmeyenleri de dışarıda bırakmayı amaçlıyordu; kesilen üç
meşru olmayan erişim bunu gösterdi. Sorun şu ki o üçü, çizelgede yazılı oldukları için sayılabildi.
Çizelgede olmayan, özel ağın içinden gelen ve geçerli kimlik bilgisi taşıyan bir etkinlik hiçbir
tabloda görünmedi. Sonraki ders anormal etkinliği ölçer: bilinen bir olay kümesinde tespit
kurallarının kaçını yakaladığını, kaçını kaçırdığını ve kaç yanlış alarm ürettiğini sayar.
