İçeriğe geç
academia.sh

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 node ile 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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat