Ders 05 / 12
Anahtar ve Sır Yönetimi
Anahtar sahipliğinin yayılma yarıçapına etkisi üç kipte koşturulur: sağlayıcı anahtarında sızan kimlik 16 kalem okur, müşteri yönetilen anahtarda yine 16, müşteri tutulan anahtarda 11. Tek bir anahtar iznini zincirin dışına almak yönetilen kipte 16'yı 6'ya, tutulan kipte 11'i 3'e indirir ve günde 1 meşru işlemi durdurur. Sır deposu okunduğunda yürüyüşe 4 kimlik ekleniyor.
İçindekiler
Önceki derste açık bir dosyanın içeriği okunabilir sayıldı. Kayıtlar diskte şifreliydi, ama okuma izni olan özne için bu bir engel olmadı — çözme, okuma isteğinin bir parçası olarak sağlayıcı tarafında yapıldı. Sorulmayan soru şudur: çözme anahtarı kimde duruyorsa yarıçap değişir mi.
Bu ders yalnız onu ölçer. Bulut Yönetişimi, Güvenlik ve Maliyet kursu beklemede ve aktarımda şifrelemeyi, zarf şifrelemesini ve döndürme penceresini ölçtü; burada şifreleme mekaniğinin hiçbiri tekrarlanmaz. Ölçülen tek şey anahtar sahipliğinin okunabilen kalem sayısına etkisidir. İkinci yarıda sır deposu ele alınıyor ve bu dersin ikinci bulgusu çıkıyor: sır deposu yürüyüşte bir kalem değil, bir kenar kaynağıdır.
- BG23. Üç sahiplik kipi vardır.
saglayici: anahtar sağlayıcının elindedir ve çözme, okuma isteğinin parçası olarak yapılır.yonetilen: anahtar müşterinindir ve anahtar yönetimi servisinde durur; çözme için ayrı bir anahtar kullanma izni gerekir.tutulan: anahtar kiralanan altyapının dışındadır ve sızan bir bulut kimliği ona ulaşamaz. - BG24. Anahtar kullanma izni erişim izninden ayrı bir kümedir. Bir kimlik bir kaleme erişebilirken onun anahtarını kullanamayabilir.
- BG25. Her kalem en güçlü hangi kipi desteklediğini yazar. Sunucu tarafında çözen bir yönetilen
hizmet
tutulankipini destekleyemez; bu bir model kararıdır ve hizmet türünden gelir. - BG26. Sır deposu okunabildiğinde içindeki her sır bir kimlik olur ve yürüyüş oradan devam eder. Sırların içeriği modellenmez, yalnız hangi kimliğe karşılık geldikleri sayılır.
- BG27. Yürüyüş bir sabit noktaya kadar koşar: kimlik kümesi büyüdükçe anahtar izni ve okunan kalem büyür, okunan kalem büyüdükçe kimlik kümesi büyür.
Üç Kip, Üç Sayı
// bulut/anahtar.mjs — anahtar sahipliginin yaricapa etkisi MODELIDIR. Sifreleme mekanigi, zarf // sifrelemesi ve donderme penceresi bu derste yoktur; yalniz okunabilen kalem sayilir. 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', }; const USTLENME = [['hesap-toplayici', 'rol-arsiv'], ['hesap-dogrulayici', 'rol-arsiv'], ['rol-arsiv', 'rol-yedek'], ['rol-yedek', 'rol-yonetim'], ['hesap-portal', 'rol-fatura'], ['rol-fatura', 'rol-gunluk'], ['hesap-rapor', 'rol-gunluk'], ['rol-dagitim', 'rol-yonetim']]; // Kimligin anahtar kullanma izni: erisim izninden ayri bir kumedir. export const ANAHTAR_IZNI = { 'hesap-toplayici': 'k-olcum', 'hesap-dogrulayici': 'k-olcum', 'hesap-portal': 'k-abone', 'hesap-rapor': 'k-fatura k-gunluk', 'rol-fatura': 'k-fatura k-abone', 'rol-arsiv': 'k-olcum', 'rol-yedek': 'k-yedek', 'rol-dagitim': 'k-sir', 'rol-gunluk': 'k-gunluk', 'rol-yonetim': 'k-sir', }; // Kalem: sifreli mi, hangi anahtarla, en guclu destekledigi sahiplik kipi. // Kipler: saglayici < yonetilen < tutulan. Yonetilen anahtar anahtar yonetimi servisinde durur, // tutulan anahtar kiralanan altyapinin disindadir ve sizan kimlik ona ulasamaz. export const KIP = ['saglayici', 'yonetilen', 'tutulan']; export const KALEM = ` olcum-deposu k-olcum tutulan ham-arsiv k-olcum tutulan yedek-deposu k-yedek tutulan fatura-cikti-deposu k-fatura tutulan rapor-deposu k-fatura tutulan dagitim-yapilandirmasi k-sir tutulan abone-veritabani k-abone yonetilen fatura-veritabani k-fatura yonetilen gunluk-deposu k-gunluk yonetilen sir-deposu k-sir yonetilen denetim-gunlugu k-gunluk saglayici olcum-kuyrugu - - portal-varlik-deposu - - is-emri-kuyrugu - - posta-cikisi - - anahtar-yonetimi - - ornek-yonetimi - - sablon-deposu - -` .trim().split('\n').map((s) => { const [ad, anahtar, destek] = s.trim().split(/\s+/); return { ad, anahtar: anahtar === '-' ? null : anahtar, destek }; }); export const bul = (ad) => KALEM.find((k) => k.ad === ad); // Sir deposu okunursa icindeki sirlar birer kimliktir; yuruyus oradan devam eder. export const SIRLAR = ['hesap-portal', 'rol-fatura', 'hesap-rapor']; // Gunde kac mesru islem hangi anahtari kullaniyor: [kimlik, anahtar, gunde kullanim] export const MESRU_ANAHTAR = [['hesap-toplayici', 'k-olcum', 1440], ['hesap-dogrulayici', 'k-olcum', 720], ['hesap-portal', 'k-abone', 3100], ['hesap-rapor', 'k-fatura', 40], ['hesap-rapor', 'k-gunluk', 12], ['rol-fatura', 'k-fatura', 260], ['rol-fatura', 'k-abone', 260], ['rol-arsiv', 'k-olcum', 96], ['rol-yedek', 'k-yedek', 4], ['rol-dagitim', 'k-sir', 6], ['rol-gunluk', 'k-gunluk', 88], ['rol-yonetim', 'k-sir', 1]]; // Sizan kimlikten okunabilen kalem: sabit nokta. Sir deposu okunursa kimlik kumesi buyur. export function okunan(hedef, cikarilan = new Set()) { const kimlik = new Set(['hesap-toplayici']); const kapat = () => { // ustlenme kapanisi let n = -1; while (kimlik.size !== n) { n = kimlik.size; for (const k of [...kimlik]) for (const [a, b] of USTLENME) if (a === k) kimlik.add(b); } }; let onceki = -1, kalem = new Set(), izin = new Set(); while (kimlik.size !== onceki) { onceki = kimlik.size; kapat(); izin = new Set([...kimlik].flatMap((k) => ANAHTAR_IZNI[k].split(' ')) .filter((a) => !cikarilan.has(a))); kalem = new Set([...kimlik].flatMap((k) => ERISIM[k].split(' ')).filter((r) => { const x = bul(r); if (x.anahtar === null) return true; // sifresiz kalem const kip = KIP.indexOf(hedef) < KIP.indexOf(x.destek) ? hedef : x.destek; return kip === 'saglayici' || (kip === 'yonetilen' && izin.has(x.anahtar)); })); if (kalem.has('sir-deposu')) for (const s of SIRLAR) kimlik.add(s); } return { kimlik, kalem, izin }; }
// bulut/kosum1.mjs — uc sahiplik kipinde sizan kimligin okuyabildigi kalem import { KALEM, KIP, bul, okunan } from './anahtar.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 = [-23, -10, -11, 12, 12, 10]; yaz(A, 'kalem', 'anahtar', 'destek', ...KIP); const R = Object.fromEntries(KIP.map((k) => [k, okunan(k)])); const gorulen = [...new Set(KIP.flatMap((k) => [...R[k].kalem]))].sort(); for (const r of gorulen.filter((x) => bul(x).anahtar)) yaz(A, r, bul(r).anahtar, bul(r).destek, ...KIP.map((k) => R[k].kalem.has(r) ? 'okunur' : '-')); yaz(A, `+ ${gorulen.filter((x) => !bul(x).anahtar).length} sifresiz kalem`, '', '', ...KIP.map(() => 'okunur')); yaz(A, 'okunan kalem', '', '', ...KIP.map((k) => R[k].kalem.size)); console.log(`\nyuruyuse giren kimlik: ` + KIP.map((k) => `${k} ${R[k].kimlik.size}`).join(', ')); console.log('sizan kimligin zincirinden gelen anahtar izni: ' + [...R.tutulan.izin].sort().join(', ')); console.log(`sifresiz kalem ${KALEM.filter((k) => k.anahtar === null).length}/${KALEM.length}`);
kalem anahtar destek saglayici yonetilen tutulan abone-veritabani k-abone yonetilen okunur okunur okunur denetim-gunlugu k-gunluk saglayici okunur okunur okunur fatura-cikti-deposu k-fatura tutulan okunur okunur - fatura-veritabani k-fatura yonetilen okunur okunur okunur gunluk-deposu k-gunluk yonetilen okunur okunur okunur ham-arsiv k-olcum tutulan okunur okunur - olcum-deposu k-olcum tutulan okunur okunur - rapor-deposu k-fatura tutulan okunur okunur - sir-deposu k-sir yonetilen okunur okunur okunur yedek-deposu k-yedek tutulan okunur okunur - + 6 sifresiz kalem okunur okunur okunur okunan kalem 16 16 11 yuruyuse giren kimlik: saglayici 8, yonetilen 8, tutulan 8 sizan kimligin zincirinden gelen anahtar izni: k-abone, k-fatura, k-gunluk, k-olcum, k-sir, k-yedek sifresiz kalem 7/18
İlk iki sütun aynıdır: on altı. Anahtar müşteriye geçtiğinde okunabilen kalem sayısı hiç değişmiyor. Nedeni son satırdan bir öncekidir — sızan kimliğin zinciri altı anahtar izninin hepsini taşıyor. Sahiplik kipi çözmeyi bir izne bağlar; o izin de aynı zincirin üzerindeyse bağlama işe yaramaz.
Üçüncü sütun on bir veriyor. Düşen beş kalem tutulan kipini destekleyen kalemlerdir: ölçüm
deposu, ham arşiv, yedek deposu, fatura çıktı deposu ve rapor deposu. Kalan altısı destekleyemez,
çünkü çözme sunucu tarafında yapılan yönetilen hizmetlerdir.
İkinci satırdan bir öncesi de dikkat çeker. Yürüyüşe giren kimlik sayısı üç kipte de sekizdir — oysa erişim grafiğinin kendisi dört kimlikle biterdi. Aradaki dört kimlik sır deposundan gelir ve sır deposu üç kipte de okunabilir.
Sahiplik Tek Başına Yetmiyor
Sahiplik kipi ile anahtar kullanma izni iki ayrı kaldıraçtır. İkisi ayrı ayrı ve birlikte koşturuluyor.
// bulut/kosum2.mjs — sahiplik kipi ile anahtar izninin birlikte etkisi; her ikisinin bedeli import { KALEM, KIP, MESRU_ANAHTAR, SIRLAR, okunan } from './anahtar.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 = [-12, 16, 15, 13, 12]; yaz(A, 'sahiplik', 'k-sir zincirde', 'k-sir disinda', 'yuruyen', 'yuruyen'); yaz(A, 'kipi', 'okunan kalem', 'okunan kalem', 'kimlik', 'kimlik'); for (const k of KIP) { const a = okunan(k), b = okunan(k, new Set(['k-sir'])); yaz(A, k, a.kalem.size, b.kalem.size, a.kimlik.size, b.kimlik.size); } const sirIs = MESRU_ANAHTAR.filter(([k, a]) => a === 'k-sir' && k === 'rol-yonetim') .reduce((x, [, , n]) => x + n, 0); console.log(`\nk-sir iznini zincirdeki rolden almanin bedeli: gunde ${sirIs} mesru islem`); console.log(`sir deposundaki sir sayisi ${SIRLAR.length}; okunursa yuruyuse giren ek kimlik ` + `${okunan('saglayici').kimlik.size - 4}`); const sifreli = KALEM.filter((k) => k.anahtar); const desteksiz = sifreli.filter((k) => k.destek !== 'tutulan'); console.log(`\ntutulan kipini ${sifreli.length} sifreli kalemin ${desteksiz.length}'i ` + 'desteklemiyor:'); console.log(' ' + desteksiz.map((k) => k.ad).join(', ')); const dis = MESRU_ANAHTAR.filter(([, a]) => sifreli.some((k) => k.anahtar === a && k.destek === 'tutulan')); console.log(`disaridan anahtar teslimi gereken (is yuku, anahtar) cifti ${dis.length}; ` + `gunde ${dis.reduce((x, [, , n]) => x + n, 0)} islem bu yoldan geciyor`);
sahiplik k-sir zincirde k-sir disinda yuruyen yuruyen kipi okunan kalem okunan kalem kimlik kimlik saglayici 16 16 8 8 yonetilen 16 6 8 4 tutulan 11 3 8 4 k-sir iznini zincirdeki rolden almanin bedeli: gunde 1 mesru islem sir deposundaki sir sayisi 3; okunursa yuruyuse giren ek kimlik 4 tutulan kipini 11 sifreli kalemin 5'i desteklemiyor: abone-veritabani, fatura-veritabani, gunluk-deposu, sir-deposu, denetim-gunlugu disaridan anahtar teslimi gereken (is yuku, anahtar) cifti 8; gunde 2567 islem bu yoldan geciyor
Tablo altı hücrelidir ve üçü karar taşır. Sağlayıcı satırında iki sütun aynıdır: on altı ve on altı. Anahtar izniyle oynamak sağlayıcı anahtarında hiçbir şey değiştirmez, çünkü çözme için izin sorulmaz — okuma izni düz metin demektir.
Yönetilen satırı bu dersin en keskin karşılaştırmasını verir. Anahtar müşteriye geçirildiğinde tek başına yarıçap on altıda kalır. Aynı kipte tek bir anahtar izni — sır deposunun anahtarı — sızan kimliğin zincirinden çıkarıldığında yarıçap altıya iner. Aynı sahiplik kipi, aynı grafik, iki buçuk kattan fazla fark. Sahiplik yarıçabı düşürmez; sahibin izni kime verdiği düşürür.
Tutulan satırı da aynı yönde okunur: on birden üçe. Ama on bir ile on altı arasındaki fark beş
kalemdir ve bedeli ağırdır — beş şifreli kalem bu kipi hiç desteklemez ve sekiz (iş yükü, anahtar)
çifti dışarıdan anahtar teslimi gerektirir; günde iki bin beş yüz altmış yedi işlem o yoldan geçer.
Tek bir izni kaldırmanın bedeli ise günde bir meşru işlemdir.
Altı Anahtar Tek Tek
Sır deposunun anahtarı örnek olarak seçildi. Altı anahtarın hepsi aynı ölçüden geçirilirse seçimin neden bu olduğu görülür.
// bulut/kosum3.mjs — tek tek anahtar izinleri: hangisini zincirden almak yaricabi ne kadar dusurur import { ANAHTAR_IZNI, MESRU_ANAHTAR, okunan } from './anahtar.mjs'; const ANAHTAR = [...new Set(Object.values(ANAHTAR_IZNI).flatMap((s) => s.split(' ')))].sort(); 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 = [-10, 11, 11, 12, 13]; const taban = okunan('yonetilen').kalem.size; yaz(A, 'anahtar', 'yonetilen', 'tutulan', 'yaricap', 'duran islem'); yaz(A, 'zincirden', 'kipinde', 'kipinde', 'dususu', 'gunde'); for (const a of ANAHTAR) { const c = new Set([a]); yaz(A, a, okunan('yonetilen', c).kalem.size, okunan('tutulan', c).kalem.size, taban - okunan('yonetilen', c).kalem.size, MESRU_ANAHTAR.filter(([, x]) => x === a).reduce((s, [, , n]) => s + n, 0)); } const hepsi = new Set(ANAHTAR); console.log(`\nhepsi cikarilirsa: yonetilen ${okunan('yonetilen', hepsi).kalem.size}, ` + `tutulan ${okunan('tutulan', hepsi).kalem.size}; ` + `gunde ${MESRU_ANAHTAR.reduce((s, [, , n]) => s + n, 0)} islem durur`);
anahtar yonetilen tutulan yaricap duran islem zincirden kipinde kipinde dususu gunde k-abone 15 10 1 3360 k-fatura 13 10 3 300 k-gunluk 15 10 1 100 k-olcum 14 11 2 2256 k-sir 6 3 10 7 k-yedek 15 11 1 4 hepsi cikarilirsa: yonetilen 3, tutulan 3; gunde 6027 islem durur
Beş anahtarın yarıçap düşüşü bir ile üç arasındadır; altıncısı ondur. k-abone günde üç bin üç yüz
altmış işlem taşır ve kaldırılırsa yarıçabı tek bir kalem düşürür. k-sir günde yedi işlem taşır
ve yarıçabı on kalem düşürür. Kalem başına bedel oranı arasında üç bin katın üzerinde fark vardır.
Bu tablodaki yedi rakamı bir önceki bölümün bir rakamıyla karıştırmamak gerekir: burada izin bütün kimliklerden çıkarılıyor ve dağıtım rolünün günde altı işlemi de duruyor. Sızan kimliğin zincirinde olan tek rolden almak yeterlidir ve bedeli günde bir işlemdir.
Son satır sınırı çiziyor: bütün anahtar izinleri çıkarılırsa yarıçap üçe iner ve günde altı bin yirmi yedi işlem durur. Yani yarıçabı ondan üçe indirmenin yolu bütün izinleri kaldırmak değildir; altıdan birini kaldırmak farkın büyük bölümünü verir.
Sır Deposu Bir Kalem Değil
Sağdaki iki sütun neden bu kadar büyük bir fark çıktığını söylüyor. k-sir zincirdeyken yürüyüşe
sekiz kimlik giriyor; çıkarıldığında dört. Sır deposu okunduğunda içindeki üç sır üç kimliğe
karşılık geliyor ve üstlenme kapanışıyla birlikte dört yeni kimlik yürüyüşe katılıyor.
Bu, sır deposunun grafikteki yerini değiştirir. Öteki kalemler yürüyüşün sonudur: okunur ve orada biter. Sır deposu okunduğunda yürüyüşün yeni kenarları doğar — yani sır deposu bir kalem değil, bir kenar kaynağıdır. Yarıçap ölçümünde ona bir kalem olarak bakmak sayıyı on altı yerine dokuz gösterir.
Aynı nedenle ölçüm bir sabit nokta hesabıdır. Kimlik kümesi büyüdükçe anahtar izni büyür, anahtar izni büyüdükçe okunan kalem büyür, okunan kalemde sır deposu varsa kimlik kümesi yeniden büyür. Döngü ancak yeni kimlik gelmediğinde durur. Tek bir geçişte hesaplanan yarıçap bu modelde eksik çıkar.
Önceki dersin bulgusuyla birleştirildiğinde sıra netleşir: bir yapılandırma dosyasında duran kimlik referansı yarıçabı beş kalem büyütüyordu, sır deposunun okunabilmesi yedi kalem büyütüyor. İkisi de küçük kalemlerdir ve ikisinin de zararı kendi içeriğinde değil, açtıkları kenarlardadır.
Özet
- Anahtar sahipliği tek başına yarıçabı düşürmüyor: sağlayıcı anahtarında 16, müşteri yönetilen anahtarda yine 16 kalem okunuyor. Sızan kimliğin zinciri altı anahtar izninin hepsini taşıyor.
- Müşteri tutulan anahtar 16’yı 11’e indirir; düşen beş kalem bu kipi destekleyen kalemlerdir. 11 şifreli kalemin 5’i sunucu tarafında çözdüğü için bu kipi hiç desteklemez.
- Tek bir anahtar iznini zincirin dışına almak yönetilen kipte 16’yı 6’ya, tutulan kipte 11’i 3’e indirir. Aynı sahiplik kipinde iki buçuk kattan fazla fark; bedeli günde 1 meşru işlemdir.
- Tutulan kipin bedeli ağırdır: 8
(iş yükü, anahtar)çifti dışarıdan anahtar teslimi ister ve günde 2.567 işlem o yoldan geçer. - Sır deposu yürüyüşte bir kalem değil bir kenar kaynağıdır: okunduğunda 3 sır 3 kimliğe karşılık gelir ve kapanışla birlikte yürüyüşe 4 kimlik girer, kimlik sayısı 4’ten 8’e çıkar.
- Ölçüm bir sabit nokta hesabıdır; tek geçişte hesaplanan yarıçap bu modelde 9 çıkar, sabit noktada 16.
Sonraki Adım
Beş ders boyunca yanlış kalemler tek tek bulundu: aşırı geniş bir güven listesi, kapatılmamış bir genel uç, nesne düzeyinde unutulmuş bir izin, zincirin üzerinde duran bir anahtar izni. Hepsi çalışan sistemde bulundu ve her biri bulunduğunda çoktan yerindeydi. Sorulmayan soru şudur: bunların kaçı sisteme konmadan önce, şablonda görülebilirdi. Sonraki ders şablon kümesini bir kural setinden geçiriyor ve dağıtımdan önce yakalanan kalemi ancak koşarken görülebilen kalemden ayırıyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.