Ders 02 / 12
Kimlik ve Erişim Yönetimi
Yayılma yarıçapının bir sayıya çevrilmesi: 10 kimlik ve 18 kalemlik erişim grafiğinde sızan tek bir hizmet hesabından yürüyüş koşturulur, doğrudan 2 kaleme karşı zincirle 9 kaleme ulaşılır, çarpan 4,5 kat ve derinlik 3'tür. Üstlenme kenarı hiç olmasa en geniş yarıçap 9 yerine 4 olurdu. Dört denetim aynı grafikte koşturulur: bir güven kenarını kaldırmak yarıçapı 4'e indirip günde 4 meşru işi durdurur, çok adımlı doğrulama yarıçabı hiç düşürmez.
İçindekiler
Önceki ders yanlış olabilecek yirmi bir kalemi sınıflandırdı ve her birine bir tohum ağırlığı verdi. O ağırlık orada bir sayı olarak duruyordu; hesaplanmadı. Bu ders onu hesaplıyor ve kursun ölçü birimini kuruyor: erişim grafiği yazılıyor, sızan tek bir kimlikten yürüyüş koşturuluyor, yarıçap bir sayıya dönüşüyor.
Bulut Yönetişimi, Güvenlik ve Maliyet kursu aynı yüzeyi yönetişim gözüyle ölçtü — kim ne yapabiliyor, hangi politika neyi kapsıyor, hangi izin kullanılmıyor. Burada politika metni hiç yazılmaz; ölçülen şey erişimin kendisidir ve tek soru sorulur: bir kimlik sızarsa oradan kaç kaleme ulaşılır. Yürüyüşün kendisi bir grafik gezinmesidir; hiçbir sızma adımı, çağrı dizisi ya da kimlik bilgisi toplama yöntemi yazılmaz. Bir kurumun gerçek erişim grafiğinde böyle bir yürüyüş, yazılı yetki ve tanımlı kapsam olmadan yapılamaz; yetkisiz yapılırsa hem yasadışı hem de meslek dışıdır.
- BG7. Grafiğin düğümleri iki türdür: kimlik (hizmet hesabı ya da rol) ve kalem (erişilen kaynak). Kimlikten kaleme kenar doğrudan erişimi, kimlikten kimliğe kenar rol zincirini gösterir.
- BG8. Sızan kimlik grafiğin bir düğümüdür ve yürüyüş oradan başlar. Kimliğin nasıl sızdığı bu derste modellenmez; ölçülen şey sızdıktan sonraki erişimdir.
- BG9. Yayılma yarıçapı, yürüyüşün ulaştığı kalem sayısıdır. Kimlik sayısı değil kalem sayısı sayılır, çünkü zarar kalemde oluşur.
- BG10. Doğrudan yarıçap sızan kimliğin kendi kalemleridir; zincirle erişilen kalem ancak bir ya da daha çok üstlenme adımından sonra görülür.
- BG11. Üstlenme kenarları geçişlidir ve grafik döngüsüzdür. Her kenar üzerinde günde kaç meşru işin geçtiği kurgu bir sayıdır.
- BG12. Grafik on kimlik ve on sekiz kalemdir; kurgu bölgesel ölçüm ağının kiralanmış altyapıdaki karşılığıdır.
Grafik ve Yürüyüş
// bulut/graf.mjs — kiralanmis altyapida erisim grafigi MODELIDIR. Kurgu bolgesel olcum agi; // gercek saglayici, hizmet ve kimlik adi yoktur. Sizma adimi ya da cagri dizisi icermez. // Kimlik -> dogrudan eristigi kalemler. export const ERISIM = { 'hesap-toplayici': ['olcum-deposu', 'olcum-kuyrugu'], 'hesap-dogrulayici': ['olcum-deposu', 'olcum-kuyrugu', 'ham-arsiv'], 'hesap-portal': ['abone-veritabani', 'portal-varlik-deposu', 'is-emri-kuyrugu'], 'hesap-rapor': ['rapor-deposu', 'fatura-cikti-deposu', 'gunluk-deposu'], 'rol-fatura': ['fatura-veritabani', 'fatura-cikti-deposu', 'posta-cikisi', 'abone-veritabani'], 'rol-arsiv': ['ham-arsiv', 'yedek-deposu'], 'rol-yedek': ['yedek-deposu', 'fatura-veritabani', 'abone-veritabani', 'olcum-deposu'], 'rol-dagitim': ['dagitim-yapilandirmasi', 'sablon-deposu', 'ornek-yonetimi'], 'rol-gunluk': ['gunluk-deposu', 'denetim-gunlugu'], 'rol-yonetim': ['ornek-yonetimi', 'anahtar-yonetimi', 'sir-deposu'], }; // Ustlenme kenari: [kaynak kimlik, hedef kimlik, gunde kac mesru is bu kenardan geciyor] export const USTLENME = [ ['hesap-toplayici', 'rol-arsiv', 96], ['hesap-dogrulayici', 'rol-arsiv', 24], ['rol-arsiv', 'rol-yedek', 4], ['rol-yedek', 'rol-yonetim', 1], ['hesap-portal', 'rol-fatura', 310], ['rol-fatura', 'rol-gunluk', 12], ['hesap-rapor', 'rol-gunluk', 8], ['rol-dagitim', 'rol-yonetim', 6], ]; export const KIMLIK = Object.keys(ERISIM); export const KALEM = [...new Set(Object.values(ERISIM).flat())].sort(); // Yaricap yuruyusu: baslangic kimliginden genisleyerek ulasilan kalem kumesi. // Adim 0 = sizan kimligin kendi kalemleri (dogrudan yaricap). export function yuru(baslangic, kenar = USTLENME) { const gorulen = new Set([baslangic]); const adim = new Map([[baslangic, 0]]); const kalem = new Map(); // kalem -> ilk goruldugu adim let sira = [baslangic]; while (sira.length) { const sonraki = []; for (const k of sira) { for (const r of ERISIM[k]) if (!kalem.has(r)) kalem.set(r, adim.get(k)); for (const [a, b] of kenar) if (a === k && !gorulen.has(b)) { gorulen.add(b); adim.set(b, adim.get(k) + 1); sonraki.push(b); } } sira = sonraki; } const dogrudan = [...kalem.values()].filter((d) => d === 0).length; return { kimlik: gorulen, kalem, yaricap: kalem.size, dogrudan, zincirle: kalem.size - dogrudan, derinlik: Math.max(...adim.values()) }; }
Sızan kimlik sayaç toplama iş yükünün hizmet hesabıdır. Bu hesap grafiğin en dışında durur: iki kaleme yazar ve tek bir rolü üstlenir.
// bulut/kosum1.mjs — sizan tek kimlikten yuruyus: dogrudan, zincirle, hic erisilemeyen kalem import { KALEM, KIMLIK, yuru } from './graf.mjs'; const r = yuru('hesap-toplayici'); console.log(`grafik: ${KIMLIK.length} kimlik, ${KALEM.length} kalem`); console.log('sizan kimlik: hesap-toplayici'); console.log(` ulasilan kimlik ${r.kimlik.size}: ${[...r.kimlik].join(' -> ')}`); console.log(` yaricap ${r.yaricap}/${KALEM.length} dogrudan ${r.dogrudan} ` + `zincirle ${r.zincirle} derinlik ${r.derinlik}`); console.log(` zincir carpani ${(r.yaricap / r.dogrudan).toFixed(1)}x` + `, hic erisilemeyen ${KALEM.length - r.yaricap}\n`); console.log('adim ulasilan kalem'); for (let d = 0; d <= r.derinlik; d++) console.log(`${String(d).padStart(4)} ` + KALEM.filter((k) => r.kalem.get(k) === d).join(', ')); const disi = KALEM.filter((k) => !r.kalem.has(k)); console.log(' - ' + disi.slice(0, 5).join(', ')); console.log(' ' + disi.slice(5).join(', '));
grafik: 10 kimlik, 18 kalem
sizan kimlik: hesap-toplayici
ulasilan kimlik 4: hesap-toplayici -> rol-arsiv -> rol-yedek -> rol-yonetim
yaricap 9/18 dogrudan 2 zincirle 7 derinlik 3
zincir carpani 4.5x, hic erisilemeyen 9
adim ulasilan kalem
0 olcum-deposu, olcum-kuyrugu
1 ham-arsiv, yedek-deposu
2 abone-veritabani, fatura-veritabani
3 anahtar-yonetimi, ornek-yonetimi, sir-deposu
- dagitim-yapilandirmasi, denetim-gunlugu, fatura-cikti-deposu, gunluk-deposu, is-emri-kuyrugu
portal-varlik-deposu, posta-cikisi, rapor-deposu, sablon-deposu
Yarıçap dokuzdur. Sızan hesabın kendi yetkisi iki kalemdir; kalan yedi kalem üç üstlenme adımının ardından gelir. Çarpan dört buçuk kattır ve on sekiz kalemin yarısı yürüyüşün dışında kalır.
Adım dağılımı asıl bilgiyi taşır. Sıfırıncı adımda ölçüm kalemleri vardır — sayaç toplama iş yükünün gerçekten ihtiyaç duyduğu iki kalem. Birinci adımda arşiv, ikinci adımda abone ve fatura verisi, üçüncü adımda anahtar yönetimi ile sır deposu görünür. Sızan hesabın işiyle üçüncü adımın kalemleri arasında hiçbir ilişki yoktur: sayaç okuma toplayan bir iş yükü ne fatura veritabanına ne anahtar yönetimine dokunur. Yine de üç adım sonra ikisi de yürüyüşün içindedir.
Bu, yarıçabın kalem başına verilen izinden değil, kimlikler arası güvenden doğduğunu gösterir. Dokuz kalemin hiçbiri sızan hesaba açıkça verilmiş değildir.
Yarıçap Kimlikten Kimliğe Değişiyor
Tek bir kimliği ölçmek yeterli değildir; sızan kimliğin hangisi olacağı bilinmez.
// bulut/kosum2.mjs — her kimlik icin yaricap: zincir yaricabi kac kat buyutuyor import { KALEM, KIMLIK, yuru } from './graf.mjs'; const yaz = (g, ...s) => console.log(s.map((v, i) => g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i])).join('')); const A = [-19, 10, 10, 10, 9, 9]; yaz(A, 'sizan kimlik', 'dogrudan', 'zincirle', 'yaricap', 'carpan', 'derinlik'); const R = KIMLIK.map((k) => [k, yuru(k)]); for (const [k, r] of R) yaz(A, k, r.dogrudan, r.zincirle, `${r.yaricap}/${KALEM.length}`, `${(r.yaricap / r.dogrudan).toFixed(1)}x`, r.derinlik); const y = R.map(([, r]) => r.yaricap); console.log(`\nen genis yaricap ${Math.max(...y)}, ortalama ` + `${(y.reduce((a, x) => a + x, 0) / y.length).toFixed(1)}, ` + `yaricabi 8'i asan kimlik ${y.filter((x) => x > 8).length}/${KIMLIK.length}`); const zincirsiz = KIMLIK.map((k) => yuru(k, []).yaricap); console.log(`ustlenme kenari hic olmasaydi: en genis ${Math.max(...zincirsiz)}, ortalama ` + `${(zincirsiz.reduce((a, x) => a + x, 0) / zincirsiz.length).toFixed(1)}`);
sizan kimlik dogrudan zincirle yaricap carpan derinlik hesap-toplayici 2 7 9/18 4.5x 3 hesap-dogrulayici 3 6 9/18 3.0x 3 hesap-portal 3 5 8/18 2.7x 2 hesap-rapor 3 1 4/18 1.3x 1 rol-fatura 4 2 6/18 1.5x 1 rol-arsiv 2 6 8/18 4.0x 2 rol-yedek 4 3 7/18 1.8x 1 rol-dagitim 3 2 5/18 1.7x 1 rol-gunluk 2 0 2/18 1.0x 0 rol-yonetim 3 0 3/18 1.0x 0 en genis yaricap 9, ortalama 6.1, yaricabi 8'i asan kimlik 2/10 ustlenme kenari hic olmasaydi: en genis 4, ortalama 2.9
Tablo sezginin tersini söylüyor. En geniş yarıçap yönetim rolünde değil, grafiğin en dışındaki iki
hizmet hesabındadır: toplayıcı ve doğrulayıcı dokuzar kaleme ulaşır. rol-yonetim üç kalemde
kalır, çünkü hiçbir rolü üstlenemez — yürüyüş orada biter. Bir kimliğin kendi yetkisi, sızdığında
açtığı kalem sayısını belirlemiyor.
Son iki satır zincirin payını veriyor. Üstlenme kenarı hiç olmasaydı en geniş yarıçap dört, ortalama iki virgül dokuz olurdu. Kenarlar eklendiğinde bunlar dokuz ve altı virgül bire çıkıyor — en geniş yarıçap iki virgül yirmi beş, ortalama iki virgül bir kat büyüyor. Sekiz üstlenme kenarı, on sekiz kalemlik bir grafikte ortalama yarıçabı iki katına çıkarıyor.
Ters Yön: Kalem Kaç Yürüyüşte Görünüyor
Aynı grafik ters yönden de okunabilir. Bir kalemin maruziyeti, kaç ayrı kimliğin sızmasının o kaleme ulaştığıdır.
// bulut/kosum4.mjs — ters yon: her kalem kac kimligin yuruyusunde goruluyor import { KALEM, KIMLIK, yuru } from './graf.mjs'; const R = KIMLIK.map((k) => yuru(k)); const say = (k, f) => R.filter((r) => r.kalem.has(k) && f(r.kalem.get(k))).length; const yaz = (g, ...s) => console.log(s.map((v, i) => g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i])).join('')); const A = [-24, 10, 10, 10]; yaz(A, 'kalem', 'ulasan', 'yalniz', 'yalniz'); yaz(A, '', 'kimlik', 'dogrudan', 'zincirle'); const sirali = [...KALEM].sort((a, b) => say(b, () => true) - say(a, () => true)); for (const k of sirali.slice(0, 6)) yaz(A, k, say(k, () => true), say(k, (d) => d === 0), say(k, (d) => d > 0)); console.log(' ...'); for (const k of sirali.slice(-3)) yaz(A, k, say(k, () => true), say(k, (d) => d === 0), say(k, (d) => d > 0)); const cift = (f) => KALEM.reduce((a, k) => a + say(k, f), 0); console.log(`\ntoplam (kimlik, kalem) erisim cifti ${cift(() => true)}: ` + `dogrudan ${cift((d) => d === 0)}, zincirle ${cift((d) => d > 0)}`); console.log(`ortalama bir kalem ${(cift(() => true) / KALEM.length).toFixed(1)} ` + `kimligin yuruyusunde goruluyor`);
kalem ulasan yalniz yalniz
kimlik dogrudan zincirle
abone-veritabani 6 3 3
anahtar-yonetimi 6 1 5
fatura-veritabani 6 2 4
ornek-yonetimi 6 2 4
sir-deposu 6 1 5
denetim-gunlugu 4 1 3
...
portal-varlik-deposu 1 1 0
rapor-deposu 1 1 0
sablon-deposu 1 1 0
toplam (kimlik, kalem) erisim cifti 61: dogrudan 29, zincirle 32
ortalama bir kalem 3.4 kimligin yuruyusunde goruluyor
Beş kalem on kimliğin altısının yürüyüşünde görünüyor. sir-deposu ve anahtar-yonetimi bu
listenin en tepesindedir ve ikisi de yalnız tek kimliğe doğrudan verilmiştir; kalan beş yol
zincirden gelir. Aynı satır abone-veritabani için üçe üç dağılır — o kalem gerçekten üç ayrı iş
yükünün işidir.
Son satır grafiğin bütününü bir sayıya indiriyor: altmış bir erişim çiftinin yirmi dokuzu doğrudan, otuz ikisi zincirlidir. Yani bu grafikte bir kalemin bir kimlik tarafından görülme yollarının yarısından çoğu hiçbir yerde açıkça verilmemiştir. Bir izin listesine bakarak sayılabilecek olan yirmi dokuzdur; kalan otuz iki ancak yürüyüş koşturularak görülür.
Denetimler Aynı Grafikte
Dört denetim aynı yürüyüşün üzerinde koşturuluyor. Her birinin bedeli kenardan geçen meşru iştir.
// bulut/kosum3.mjs — dort denetim ayni grafikte: yaricap kaca iniyor, bedeli gunde kac mesru is import { KALEM, KIMLIK, USTLENME, yuru } from './graf.mjs'; const hedef = new Set(USTLENME.map(([, b]) => b)); const DENETIM = [ // [ad, kalan kenarlari secen suzgec] ['denetim yok', () => true], ['arsiv-yedek guveni kalkar', ([a, b]) => !(a === 'rol-arsiv' && b === 'rol-yedek')], ['yedek-yonetim guveni kalkar', ([a, b]) => !(a === 'rol-yedek' && b === 'rol-yonetim')], ['ustlenme tek adima iner', ([a]) => !hedef.has(a)], ['insan kullanicida cok adimli dogrulama', () => true], ]; const TOPLAM_IS = USTLENME.reduce((a, [, , m]) => a + m, 0); const yaz = (g, ...s) => console.log(s.map((v, i) => g[i] < 0 ? String(v).padEnd(-g[i]) : String(v).padStart(g[i])).join('')); const A = [-40, 9, 10, 10, 10]; yaz(A, 'denetim', 'yaricap', 'en genis', 'ortalama', 'duran is'); for (const [ad, suz] of DENETIM) { const kenar = USTLENME.filter(suz); const y = KIMLIK.map((k) => yuru(k, kenar).yaricap); yaz(A, ad, yuru('hesap-toplayici', kenar).yaricap, Math.max(...y), (y.reduce((a, x) => a + x, 0) / y.length).toFixed(1), TOPLAM_IS - kenar.reduce((a, [, , m]) => a + m, 0)); } console.log(`\n(gunde toplam ${TOPLAM_IS} mesru is ustlenme kenarlarindan geciyor)\n`); console.log('tek ustlenme kenari kaldirilirsa (sizan kimlik hesap-toplayici):'); const B = [-19, -14, 9, 11]; yaz(B, 'kenar', '', 'yaricap', 'duran is'); yaz(B, '', '', 'dususu', 'gunde'); for (const [a, b, m] of USTLENME) yaz(B, a, `-> ${b}`, 9 - yuru('hesap-toplayici', USTLENME.filter((e) => e[0] !== a || e[1] !== b)).yaricap, m);
denetim yaricap en genis ortalama duran is
denetim yok 9 9 6.1 0
arsiv-yedek guveni kalkar 4 8 4.5 4
yedek-yonetim guveni kalkar 6 8 4.9 1
ustlenme tek adima iner 4 6 3.8 17
insan kullanicida cok adimli dogrulama 9 9 6.1 0
(gunde toplam 461 mesru is ustlenme kenarlarindan geciyor)
tek ustlenme kenari kaldirilirsa (sizan kimlik hesap-toplayici):
kenar yaricap duran is
dususu gunde
hesap-toplayici -> rol-arsiv 7 96
hesap-dogrulayici -> rol-arsiv 0 24
rol-arsiv -> rol-yedek 5 4
rol-yedek -> rol-yonetim 3 1
hesap-portal -> rol-fatura 0 310
rol-fatura -> rol-gunluk 0 12
hesap-rapor -> rol-gunluk 0 8
rol-dagitim -> rol-yonetim 0 6
Üst tablo dört denetimi yan yana koyuyor. Arşiv rolünün yedek rolünü üstlenmesini kaldırmak yarıçabı dokuzdan dörde indiriyor ve günde dört meşru işi durduruyor. Yedek rolünün yönetim rolünü üstlenmesini kaldırmak dokuzdan altıya indiriyor ve günde tek bir işi durduruyor. Üstlenmeyi tek adıma indirmek — üstlenilmiş bir rolün başka rol üstlenememesi — yarıçabı dörde, en geniş yarıçabı altıya, ortalamayı üç virgül sekize çekiyor; bedeli günde on yedi iştir.
Son satır bu dersin ikinci bulgusunu taşıyor. İnsan kullanıcılarda çok adımlı doğrulama zorunlu kılındığında yarıçap dokuzda kalıyor, ortalama altı virgül birde kalıyor, durdurulan meşru iş sıfırdır. Denetim yanlış değildir ve kendi yolunu kapatır — ama sızan kimlik bir hizmet hesabıdır ve o hesap hiçbir doğrulama adımından geçmez. Yarıçabı düşürmeyen bir denetim, koşturulana kadar etkili görünür.
Alt tablo denetimi kenar kenar sıralıyor ve seçimin nasıl yapılacağını gösteriyor. Sekiz kenarın
beşi bu sızan kimlik için yarıçabı hiç düşürmüyor; aralarında günde üç yüz on işle en yoğun kenar
da var. En büyük düşüşü sızan hesabın kendi üstlenme kenarını kaldırmak veriyor — yedi kalem — ama
bedeli günde doksan altı iştir. rol-arsiv -> rol-yedek beş kalem düşürüyor ve günde dört iş
durduruyor. Kalem başına bedel birincide yirmi dört kat yüksektir.
Özet
- Yayılma yarıçapı, sızan bir kimlikten başlayan yürüyüşün ulaştığı kalem sayısıdır. Sayaç toplama hesabından yarıçap 9/18; doğrudan 2, zincirle 7, derinlik 3, çarpan 4,5 kat.
- Yarıçap kalem başına verilen izinden değil, kimlikler arası güvenden doğuyor: toplam 61
(kimlik, kalem)erişim çiftinin 29’u doğrudan, 32’si zincirlidir.sir-deposuveanahtar-yonetimine 6 kimlik ulaşır, ikisi de yalnız tek kimliğe doğrudan verilmiştir. - En geniş yarıçap yönetim rolünde değil, grafiğin en dışındaki iki hizmet hesabındadır (9/18);
rol-yonetim3/18’de kalır, çünkü hiçbir rolü üstlenemez. - Sekiz üstlenme kenarı en geniş yarıçabı 4’ten 9’a, ortalamayı 2,9’dan 6,1’e çıkarıyor: zincir ortalama yarıçabı iki katına yakın büyütüyor.
- Bir güven kenarını kaldırmak yarıçabı 9’dan 4’e indirip günde 4 meşru işi durdurur; üstlenmeyi tek adıma indirmek 4’e indirip günde 17 işi durdurur.
- Çok adımlı doğrulama yarıçabı 9’da bırakır ve hiçbir meşru işi durdurmaz; sekiz kenarın beşini kaldırmak da yarıçabı hiç düşürmez — bunların biri günde 310 iş taşıyan en yoğun kenardır.
Sonraki Adım
Yürüyüş boyunca bir şey sorulmadan geçildi: bir kimliğin bir kaleme erişim yetkisi olması, o kaleme ulaşabildiği anlamına mı gelir. Grafikte kenar vardı ve yürüyüş kenardan geçti; kalemin oturduğu ağın o kimliğin bulunduğu yerden erişilebilir olup olmadığı hiç bakılmadı. Sonraki ders aynı grafiğe ikinci bir katman ekliyor: her kalemin ağ yolu. Sızan kimlik dışarıdan kullanıldığında ve ağın içinden kullanıldığında yarıçap aynı çıkmıyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.