Ders 14 / 15
Sürekli Yapılandırma Denetimi
Sürekli denetimin 147 açık bulgusu sahiplik zincirinden geçirilir: sahip etiketi 65'ini, ad alanı sahipliği 24'ünü, depo yolu eşlemesi 18'ini çözer ve 40'ı (yüzde 27,2) sahipsiz kalır. Bulguların 81'i uygulama ekiplerine düşer, 26'sı platformda kalır; sahipsiz 40 bulgunun kapasitesi sıfır olduğu için kuyruk on iki haftada 112'ye çıkarken düzelten ekiplerin yığını erir. Sahipsizliğin 31'i küme dışındaki kaynaktadır ve hiçbir küme düzeneği onu çözemez; 147 bulgunun 122'si daha erken bir aşamada kapatılabilirdi ama sahipsiz 40 bulgunun 25'i için erken aşama yoktur.
İçindekiler
Önceki dersin kapısı yalnız gönderilen nesneyi gördü ve on kuralın onu da nesnenin bildirilen alanlarını okudu. Kapı bugün sıkılaştırılsa bile dün kabul edilmiş nesneler yerinde durur; küme dışındaki depolama, ağ ve kimlik tanımları ise hiçbir kabul kapısından geçmez. O alanı ancak sürekli koşan bir denetim tarar.
Bu ders o denetimi ölçer, ama bulgu sayısını değil. Hangi yanlış yapılandırmanın hangi kapıda kapandığı Bulut ve Sanallaştırma Güvenliği kursunda ölçüldü ve burada tekrarlanmıyor. Buradaki ölçü tek bir sorudur: bulgu kimin işine düşüyor. Kaç bulgu bir uygulama ekibine dönüyor, kaçı platform ekibinde kalıyor ve kaçının hiçbir sahibi yok. Sahipsiz bulgu, ölçülmemiş bulgudan farklıdır: gösterge tablosunda görünür, sayıya girer, raporlanır ve kimse kapatmaz.
- AD18. Denetim kurgusal bölgesel ölçüm ağının tamamını tarar: küme nesneleri ve küme dışındaki
depolama, ağ, kimlik ve kayıt defteri kaynakları. Bulgu envanteri
nodeile kurulmuş bir modeldir. - AD19. Kural kümesinin içeriği ölçülmüyor; sayılar açık bulgu envanterinden okunur. Aynı kaynak aynı kuralı ihlal ettiği sürece tek bir bulgu sayılır.
- AD20. Sahiplik zinciri üç adımlıdır ve sırayla denenir: kaynağın sahip etiketi, ad alanı sahiplik tablosu, depo yolu eşlemesi. İlk eşleşen adım kazanır; hiçbiri eşleşmezse bulgu sahipsizdir.
- AD21. Bir bulgunun hangi adımda çözüldüğü ve hangi ekibe düştüğü modelde verilmiştir. Üretimde bu, envanterin o günkü gerçek durumundan okunur ve zaman içinde değişir.
- AD22. Kapasite haftalık sabittir ve yalnız bu bulgular için ayrılan kalemi sayar. Kuyruk
max(0, kuyruk + yeni - kapasite)ile yürür; bulguların kapanma zorluğu farkı modellenmiyor.
Bulgu Envanteri ve Sahiplik Zinciri
// bulgu.mjs — surekli denetimin acik bulgu envanteri ve sahiplik zinciri. MODELDIR. // [ad, kaynak turu, acik bulgu, siddet, sahipligin cozuldugu adim, ekip, erken kapatma asamasi] export const BULGU = [ ['kapsul kaynak siniri yok', 'kume', 18, 'orta', 'etiket', 'abone', 'dagitim'], ['salt okunur kok degil', 'kume', 14, 'orta', 'etiket', 'saha', 'dagitim'], ['sir ortam degiskeninde', 'kume', 6, 'yuksek', 'etiket', 'faturalama', 'kod'], ['degisken goruntu etiketi', 'kume', 9, 'dusuk', 'adalani', 'abone', 'yapi'], ['imzasiz goruntu', 'kayit', 7, 'yuksek', 'adalani', 'saha', 'yapi'], ['genis erisimli depolama kovasi', 'depolama', 11, 'yuksek', 'etiket', 'olcum', 'tasarim'], ['sifrelenmemis yedek birimi', 'depolama', 5, 'yuksek', 'depo', 'platform', 'tasarim'], ['acik yonetim kapisi', 'ag', 9, 'yuksek', 'yok', '-', 'tasarim'], ['kullanilmayan kimlik tanimi', 'kimlik', 16, 'dusuk', 'yok', '-', 'yok'], ['genis yetkili rol baglantisi', 'kimlik', 8, 'yuksek', 'adalani', 'platform', 'tasarim'], ['gunlugu kapali kaynak', 'ag', 13, 'dusuk', 'depo', 'platform', 'dagitim'], ['eski calisma zamani surumu', 'kume', 16, 'orta', 'etiket', 'olcum', 'yapi'], ['sahipsiz kalan eski ad alani', 'kume', 9, 'orta', 'yok', '-', 'yok'], ['elle olusturulmus ag kurali', 'ag', 6, 'orta', 'yok', '-', 'dagitim'], ]; export const ZINCIR = ['etiket', 'adalani', 'depo']; export const ADIM_ADI = { etiket: 'sahip etiketi', adalani: 'ad alani sahipligi', depo: 'depo yolu esleme' }; // Ekibin haftada guvenlik bulgusu icin ayirdigi kalem; sahipsiz bulgunun kapasitesi yoktur. export const KAPASITE = { abone: 4, faturalama: 2, saha: 3, olcum: 5, platform: 3, sahipsiz: 0 }; export const YENI = 22; // haftalik yeni bulgu; dagitim hizina bagli, modelde verilmis export const taraf = (b) => (b[4] === 'yok' ? 'sahipsiz' : b[5] === 'platform' ? 'platform' : 'uygulama'); export const kova = (b) => (b[4] === 'yok' ? 'sahipsiz' : b[5]); export const top = (f) => BULGU.filter(f).reduce((a, b) => a + b[2], 0); export const gen = (B) => (h) => h.map((v, j) => j ? String(v).padStart(B[j]) : String(v).padEnd(B[0])).join('');
Zincirin üç adımı üç ayrı yerden okur ve üçü de bir envanter kararıdır: kaynağa bir etiket konmuş mu, ad alanı bir ekibe bağlanmış mı, kaynağı tanımlayan dosya bir depo yolunda mı duruyor. Hiçbiri denetimin kendi kararı değildir.
Bulgu Kimin İşine Düşüyor
// kosum1.mjs — sahiplik zinciri kosturulur: bulgu kimin isine dusuyor import { BULGU, ZINCIR, ADIM_ADI, taraf, top, gen } from './bulgu.mjs'; const SID = ['yuksek', 'orta', 'dusuk']; const T = top(() => true); console.log(`${BULGU.length} bulgu sinifi; acik bulgu ${T} ` + `(${SID.map((s) => `${s} ${top((b) => b[3] === s)}`).join(' / ')})\n`); const yz = gen([22, 8, 12, 9]); console.log(yz(['cozum adimi', 'bulgu', 'kumulatif', 'pay'])); let k = 0; for (const a of ZINCIR) { k += top((b) => b[4] === a); console.log(yz([ADIM_ADI[a], top((b) => b[4] === a), k, `%${(100 * k / T).toFixed(1)}`])); } console.log(yz(['cozulemeyen', T - k, T, `%${(100 * (T - k) / T).toFixed(1)}`])); const yt = gen([20, 8, 9, 8, 9]); console.log('\n' + yt(['bulgu kime dusuyor', 'bulgu', ...SID])); for (const [ad, t] of [['uygulama ekipleri', 'uygulama'], ['platform ekibi', 'platform'], ['sahipsiz', 'sahipsiz']]) console.log(yt([ad, top((b) => taraf(b) === t), ...SID.map((s) => top((b) => taraf(b) === t && b[3] === s))])); const sz = BULGU.filter((b) => taraf(b) === 'sahipsiz'); console.log(`sahipsiz bulgu ${sz.length} sinifta: ` + sz.map((b) => `${b[0]} (${b[2]})`).join(', '));
14 bulgu sinifi; acik bulgu 147 (yuksek 46 / orta 63 / dusuk 38) cozum adimi bulgu kumulatif pay sahip etiketi 65 65 %44.2 ad alani sahipligi 24 89 %60.5 depo yolu esleme 18 107 %72.8 cozulemeyen 40 147 %27.2 bulgu kime dusuyor bulgu yuksek orta dusuk uygulama ekipleri 81 24 48 9 platform ekibi 26 13 0 13 sahipsiz 40 9 15 16 sahipsiz bulgu 4 sinifta: acik yonetim kapisi (9), kullanilmayan kimlik tanimi (16), sahipsiz kalan eski ad alani (9), elle olusturulmus ag kurali (6)
Zincirin ilk adımı en güçlü olanıdır: sahip etiketi tek başına altmış beş bulgunun sahibini bulur, yani envanterin yüzde kırk dördünü. İkinci ve üçüncü adımlar yirmi dört ve on sekiz bulgu daha çözer. Üç adım birlikte yüzde yetmiş üçe ulaşır ve orada durur. Kalan kırk bulgu, denetimin gördüğü ama kimseye gönderemediği kalemlerdir.
Alt tablo asıl dağılımı veriyor. Seksen bir bulgu uygulama ekiplerine dönüyor, yirmi altısı platform ekibinde kalıyor ve kırkı sahipsiz. Şiddet sütunları bu üç kovayı birbirinden ayırıyor: platform ekibinin bulgularının yarısı yüksek şiddetli, uygulama ekiplerinin bulgularının çoğunluğu orta. Sahipsiz kovada dokuz yüksek şiddetli bulgu var ve dokuzu da açık yönetim kapısıdır. Bu, sahipsizliğin düşük şiddetli kalemlerle sınırlı olmadığını gösteriyor — sahipsiz olmanın nedeni bulgunun önemsizliği değil, kaynağın envanterde kimseye bağlanmamış olmasıdır.
Kuyruk On İki Hafta Yürütülürse
// kosum2.mjs — kuyrugun on iki haftalik seyri, sahipsizligin kaynagi ve erken asama import { BULGU, KAPASITE, YENI, kova, top, gen } from './bulgu.mjs'; const T = top(() => true), HAFTA = 12; const yk = gen([12, 7, 15, 10, 14, 11]); console.log(yk(['kova', 'acik', 'haftalik yeni', 'kapasite', 'haftalik net', `${HAFTA}. hafta`])); const son = {}; for (const kv of Object.keys(KAPASITE)) { const acik = top((b) => kova(b) === kv), yeni = YENI * acik / T, net = yeni - KAPASITE[kv]; let q = acik; for (let h = 0; h < HAFTA; h++) q = Math.max(0, q + net); son[kv] = Math.round(q); console.log(yk([kv, acik, yeni.toFixed(1), KAPASITE[kv], net.toFixed(1), son[kv]])); } const sahipli = Object.keys(KAPASITE).filter((k) => k !== 'sahipsiz'); const kap = sahipli.reduce((a, k) => a + KAPASITE[k], 0); const szAcik = top((b) => kova(b) === 'sahipsiz'), gerek = YENI * szAcik / T + szAcik / HAFTA; console.log(`toplam yigin ${T} -> ${Object.values(son).reduce((a, b) => a + b, 0)}; sahipli kovalar ` + `${T - szAcik} -> ${sahipli.reduce((a, k) => a + son[k], 0)}, sahipsiz kova ${szAcik} -> ${son.sahipsiz}`); console.log(`sahipsiz kovayi ${HAFTA} haftada eritmek haftada ${gerek.toFixed(1)} kalem ister: ` + `en buyuk tek ekip kapasitesinin ${(gerek / Math.max(...sahipli.map((k) => KAPASITE[k]))).toFixed(1)} kati, ` + `bes ekibin toplam kapasitesinin (${kap}) %${(100 * gerek / kap).toFixed(0)}'i`); const sz = (f) => top((b) => kova(b) === 'sahipsiz' && f(b)); const ici = sz((b) => b[1] === 'kume'), tumSz = sz(() => true), yuksek = sz((b) => b[3] === 'yuksek'); console.log(`\nsahipsiz ${tumSz} bulgunun ${ici}'u kume nesnesinde, ${tumSz - ici}'i kume disindaki kaynakta ` + `(${[...new Set(BULGU.filter((b) => kova(b) === 'sahipsiz' && b[1] !== 'kume').map((b) => b[1]))].join(', ')})`); const KALDIRAC = [['ad alani sahipligi satiri', ici, yuksek - sz((b) => b[1] === 'kume' && b[3] === 'yuksek'), 'yalniz kume nesnesi'], ['kaynak envanterinde sahip alani', tumSz, 0, 'butun kaynaklar'], ['dusuk siddetli sinifi susturma', sz((b) => b[3] === 'dusuk'), yuksek, 'bulgu kaybolur, kaynak kalir'], ['kabul kapisinda sahip etiketi', 0, yuksek, 'yalniz yeni olusturulan kaynak']]; const yl = gen([34, 10, 8, 15, 32]); console.log('\n' + yl(['kaldirac', 'cozulen', 'kalan', 'kalan yuksek', 'kapsam'])); for (const [ad, c, y, kap] of KALDIRAC) console.log(yl([ad, c, tumSz - c, y, kap])); console.log(`kabul kapisi mevcut ${tumSz} bulguya dokunmaz; haftalik yeni sahipsizin kume payini ` + `${(YENI * ici / T).toFixed(1)}'ten 0'a indirir`); const ASAMA = ['tasarim', 'yapi', 'kod', 'dagitim', 'yok']; const ya = gen([12, 8, 11]); console.log('\n' + ya(['erken asama', 'bulgu', 'sahipsiz'])); for (const a of ASAMA) console.log(ya([a, top((b) => b[6] === a), sz((b) => b[6] === a)])); const erken = top((b) => b[6] !== 'yok'); console.log(`${erken} bulgu (%${(100 * erken / T).toFixed(0)}) daha erken bir asamada kapatilabilirdi; ` + `sahipsiz ${tumSz} bulgunun ${sz((b) => b[6] === 'yok')}'i icin erken asama yok`);
kova acik haftalik yeni kapasite haftalik net 12. hafta abone 27 4.0 4 0.0 27 faturalama 6 0.9 2 -1.1 0 saha 21 3.1 3 0.1 23 olcum 27 4.0 5 -1.0 15 platform 26 3.9 3 0.9 37 sahipsiz 40 6.0 0 6.0 112 toplam yigin 147 -> 214; sahipli kovalar 107 -> 102, sahipsiz kova 40 -> 112 sahipsiz kovayi 12 haftada eritmek haftada 9.3 kalem ister: en buyuk tek ekip kapasitesinin 1.9 kati, bes ekibin toplam kapasitesinin (17) %55'i sahipsiz 40 bulgunun 9'u kume nesnesinde, 31'i kume disindaki kaynakta (ag, kimlik) kaldirac cozulen kalan kalan yuksek kapsam ad alani sahipligi satiri 9 31 9 yalniz kume nesnesi kaynak envanterinde sahip alani 40 0 0 butun kaynaklar dusuk siddetli sinifi susturma 16 24 9 bulgu kaybolur, kaynak kalir kabul kapisinda sahip etiketi 0 40 9 yalniz yeni olusturulan kaynak kabul kapisi mevcut 40 bulguya dokunmaz; haftalik yeni sahipsizin kume payini 1.3'ten 0'a indirir erken asama bulgu sahipsiz tasarim 33 9 yapi 32 0 kod 6 0 dagitim 51 6 yok 25 25 122 bulgu (%83) daha erken bir asamada kapatilabilirdi; sahipsiz 40 bulgunun 25'i icin erken asama yok
Üst tablo altı kovanın altısını farklı yönlere gönderiyor. Faturalama ve ölçüm ekiplerinin kapasitesi gelen yükün üstünde olduğu için yığınları eriyor: faturalama on iki haftada sıfırlanıyor, ölçüm yirmi yediden on beşe iniyor. Abone ekibi tam dengede duruyor. Saha ve platform ekipleri her hafta biraz geriye düşüyor ve platformun yığını yirmi altıdan otuz yediye çıkıyor. Bunların hepsi yönetilebilir sayılardır ve hepsinin ortak yanı bir sahibinin olmasıdır.
Altıncı satır başka bir şey. Sahipsiz kovada kapasite sıfırdır, çünkü kapasite bir ekibe ait bir kavramdır ve bu kovanın ekibi yoktur. Kırk bulgu her hafta altı yeni bulgu alıyor, hiç kapanmıyor ve on iki haftada yüz on ikiye çıkıyor. Sahibi olan beş kovanın toplam yığını aynı sürede yüz yediden yüz ikiye inerken toplam envanter yüz kırk yediden iki yüz on dörde çıkıyor: artışın tamamı tek bir kovadan geliyor ve o kova hiçbir düzeltme çabasına yanıt vermiyor.
Son satır bunun fiyatını yazıyor. Sahipsiz kovayı on iki haftada eritmek haftada dokuz virgül üç kalemlik bir kapasite ister. Bu sayı en büyük tek ekip kapasitesinin bir virgül dokuz katı ve beş ekibin toplam kapasitesinin yüzde elli beşidir. Yani sahipsiz bulgular bir ekibe toptan verilseydi o ekibin bütün kapasitesi yetmezdi; iki ekibin kapasitesi gerekirdi ve o iki ekip kendi bulgularını bırakmak zorunda kalırdı. Sahipsizliğin bedeli, kimsenin bakmaması değil, bakacak birinin bulunması hâlinde ödenmesi gereken sayının bu kadar büyük olmasıdır.
Sahipliği Kim Verecek
Orta blok sahipsizliğin nereden geldiğini ayırıyor: kırk bulgunun yalnız dokuzu bir küme nesnesindedir, otuz biri ağ ve kimlik kaynaklarındadır. Bu ayrım kaldıraç tablosunun tamamını belirliyor. Ad alanı sahipliği tablosuna bir satır yazmak dokuz bulguyu çözer ve otuz biri yerinde bırakır — çünkü o kaynaklar bir ad alanında değildir. Bir önceki dersin kabul kapısına eklenen sahip etiketi kuralı mevcut kırk bulgunun hiçbirine dokunmaz; yalnız yeni oluşturulan küme nesnelerini etkiler ve haftalık yeni sahipsizin küme payını bir virgül üçten sıfıra indirir. Düşük şiddetli sınıfı susturmak envanteri kırktan yirmi dörde indirir ama kalan yüksek şiddetli dokuz bulguya hiç dokunmaz; kaynak yerinde durur, yalnız görünmez olur.
Kırk bulgunun kırkını çözen tek satır ikincisidir: kaynak envanterinde bir sahip alanı. O alan kümenin bir düzeneği değildir, denetimin bir çıktısı da değildir — kaynak oluşturulurken doldurulan bir metadır. Sürekli denetim sahipliği üretemez; yalnız yokluğunu raporlar.
Daha Erken Nerede Kapanırdı
Son tablo iki sütunla bakıldığında dersin sonucunu veriyor. Yüz kırk yedi bulgunun yüz yirmi ikisi — yüzde seksen üçü — daha erken bir aşamada kapatılabilirdi: elli biri dağıtım aşamasında bir manifest denetimiyle, otuz üçü tasarımda bir erişim kararıyla, otuz ikisi yapı aşamasında bir yeniden inşayla, altısı kodda. Sürekli denetim bu yüz yirmi ikiyi her taramada yeniden bulur ve her taramada yeniden raporlar.
İkinci sütun ise ters yönde okunur. Sahipsiz kırk bulgunun yirmi beşi için erken aşama yoktur ve bu bir rastlantı değildir: kullanılmayan kimlik tanımları ile sahipsiz kalan eski ad alanı, bir aşamada doğup unutulmuş kaynaklardır. Onları üreten karar bir aşamaya ait değil, bir kaydın hiç tutulmamış olmasına aittir. Bu kursun ölçüsü — bir kalemi daha erken kapatmanın kaç kat ucuz olduğu — burada başka bir biçim alır: sahiplik bir aşamada kapatılabilecek bir kalem değil, kaynağın var olduğu ilk andan itibaren taşıması gereken bir alandır. Alan boş bırakıldığında ortaya çıkan bulgu hiçbir aşamada ucuzlamaz; yalnızca kimsenin bakmadığı bir listede birikir.
Özet
- 147 açık bulgunun sahipliği üç adımlı bir zincirle çözülüyor: sahip etiketi 65, ad alanı sahipliği 24, depo yolu eşlemesi 18. Zincir yüzde 72,8’de duruyor ve 40 bulgu (yüzde 27,2) sahipsiz kalıyor.
- Bulguların 81’i uygulama ekiplerine düşüyor, 26’sı platform ekibinde kalıyor. Sahipsiz kovada 9 yüksek şiddetli bulgu var; sahipsizlik düşük şiddetle sınırlı değil.
- Sahipsiz kovanın kapasitesi sıfırdır: 40 bulgu on iki haftada 112’ye çıkarken sahibi olan beş kovanın toplam yığını 107’den 102’ye iniyor. Bu kovayı aynı sürede eritmek haftada 9,3 kalem, yani beş ekibin toplam kapasitesinin yüzde 55’i kadar bir pay ister.
- Sahipsiz 40 bulgunun 31’i küme dışındaki ağ ve kimlik kaynaklarındadır; ad alanı sahipliği yalnız 9’unu çözer, kabul kapısı mevcut hiçbirine dokunmaz, susturma 16’sını görünmez yapar ve kaynağı yerinde bırakır. Kırkını çözen tek şey kaynak envanterindeki bir sahip alanıdır.
- 147 bulgunun 122’si (yüzde 83) daha erken bir aşamada kapatılabilirdi; sahipsiz 40 bulgunun 25’i için erken aşama yoktur, çünkü sahiplik bir aşamanın değil kaynak oluşturmanın kararıdır.
Sonraki Adım
Erken aşama sütununda otuz iki bulgu yapı yazıyor: değişken görüntü etiketi, imzasız görüntü ve eski çalışma zamanı sürümü. Bu üç sınıfın ortak yanı, hiçbirinin yerinde düzeltilememesidir — kapanmaları için yeni bir görüntü inşa edilip otuz bir kopyanın yeniden dağıtılması gerekir. Denetim onları her taramada yeniden bulur, çünkü tarama ile düzeltme arasındaki mesafe bir yapılandırma değişikliği değil, bir sürüm döngüsüdür. Sonraki ders o döngüyü ölçer: bir düzeltme yayımlandıktan sonra kopyalara ulaşması kaç gün alıyor, yerinde yama ile yeniden inşa arasındaki gün farkı nedir ve yeniden inşanın karşılığında getirdiği kesinti kaç kopyaya değiyor.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.