---
title: 'Yapılandırma Uyum Denetimi'
source: 'https://academia.sh/tr/kurslar/bulut-yonetisimi/yapilandirma-uyum-denetimi'
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'
---

# Yapılandırma Uyum Denetimi

Sapmanın otomatik tespiti: 22 kiralanmış kaynakta 6 kuralın koşturulması, 46 ateşleyen çiftin 40'ının işaretlenmesi, 38 gerçek uyumsuzluğun 32'sinin yakalanıp 6'sının kaçması, üç düzeltme kipinde açıkta kalan kaynağın 16'dan 6'ya inerken 8 meşru yapılandırmanın bozulması ve 6 meşru değişiklikten 5'inin durdurulması.

Önceki ders kimin ne yaptığını kayda geçirdi: denetim günlüğü, geçmiş kipinde bir kayıttır ve
sorusu "bu işlem oldu mu" sorusudur. Bu dersin sorusu şimdiki kiptedir — kaynağın **şu anki
yapılandırması** kurala uyuyor mu? Kayıt, yanlış olanı gösterip göstermediği konusunda sessizdir;
bir depoyu genel erişime açan işlem kayda düzgünce düşer ve kayıt o işlemin yanlış olduğunu
söylemez.

**Yapılandırma uyum denetimi** (configuration compliance), kaynak kümesinin üzerinde bir kural
kümesi koşturup uyumsuz olanı işaretlemektir. Yapılandırma sapması M22/K01'de, sapmayı kapatan
uzlaştırıcı döngü M22/K05'te ölçüldü; ikisi de burada tekrarlanmaz. Ayrım şudur: orada istenen
durumu yazan da, sapmayı kapatan da aynı taraftı. Burada kaynak kiralanmıştır, kural kümesini
başkası yazar ve düzeltme, kiralanan katmana **yazma yetkisi** ister — düzeltmenin kendisi bir
erişim kalemi hâline gelir.

## Kural Kümesi ve Uyumsuz Kaynak

Örnek kursun kurgu **bölgesel ölçüm ağı**dır: beş ekip, üç ortam. **BG25 — kaynak çizelgesi:**
yirmi iki kaynak; her satır bir kaynağın sahibi ekibi, ortamını ve altı yapılandırma alanını
taşır. **BG26 — kural kümesi:** altı kural; her kural bir yüklem, düzeltmenin değiştireceği alan
ve düzeltilmiş değerden oluşur. **BG27 — istisna kayıtları:** dört kayıt; üçü kaynak, biri **ekip
düzeyinde** yazılmıştır. **BG28 — gerçek uyumsuzluk etiketi:** otuz sekiz
kaynak-kural çifti elle uyumsuz etiketlenmiştir; ikisi kural kümesinde karşılığı olmayan bir
türdedir. **BG29 — değişiklik akışı:** yirmi değişiklik, altısı meşru etiketli. **BG30 — birim
girdiler:** elle düzeltme kalem başına 25 dakika, denetleyicinin tarama başına değerlendirme
kotası 240 (kurgu birim).

Aşağıdaki dosya çizelgeleri, kuralları ve üç kipi kurar. Süreç içi bir **modeldir**; gerçek bulut
kaynağı, denetleyici ya da düzeltme yoktur.

```js
// uyum/denetim.mjs — kiralanan katmanda yapilandirma uyum denetimi. Surec ici model: bolgesel
// olcum agi (kurgu); gercek bulut kaynagi, denetleyici ya da duzeltme 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(""));

// Kaynak: ad|ekip|ortam|genel erisim|beklemede sifreleme|denetim gunlugu|yonetim portu genis|sahip etiketi|anahtar yasi (gun)
const KAYNAK = satir(`
  olcum-depo|olcum|uretim|0|1|1|0|1|120
  olcum-arsiv|olcum|uretim|0|0|1|0|1|900
  olcum-sinama|olcum|sinama|1|0|0|1|0|500
  akis-kuyruk|akis|uretim|0|1|1|0|1|200
  akis-depo|akis|uretim|1|1|0|0|1|410
  akis-gelistirme|akis|gelistirme|1|0|0|1|0|730
  katalog-depo|katalog|uretim|0|1|1|0|1|90
  katalog-kapi|katalog|uretim|1|1|1|0|1|150
  katalog-sinama|katalog|sinama|0|0|1|1|1|380
  kapi-genel|kapi|uretim|1|1|1|0|1|60
  kapi-yonetim|kapi|uretim|0|1|1|1|1|340
  kapi-gelistirme|kapi|gelistirme|1|1|0|1|0|620
  isletim-gunluk|isletim|uretim|0|1|1|0|1|280
  isletim-yedek|isletim|uretim|0|0|1|0|1|1100
  isletim-arac|isletim|sinama|0|1|0|1|1|450
  isletim-gelistirme|isletim|gelistirme|1|1|0|0|0|800
  olcum-kenar|olcum|uretim|1|1|1|0|1|170
  akis-arsiv|akis|uretim|0|0|1|0|0|960
  katalog-yedek|katalog|uretim|0|1|0|0|1|520
  kapi-sinama|kapi|sinama|0|1|1|1|1|300
  isletim-kota|isletim|uretim|0|1|1|0|1|110
  olcum-rapor|olcum|sinama|0|1|0|0|0|240`)
  .map(([ad, ekip, ortam, genel, sifre, gunluk, port, etiket, yas]) =>
    ({ ad, ekip, ortam, genel: +genel, sifre: +sifre, gunluk: +gunluk,
       port: +port, etiket: +etiket, yas: +yas }));

// Kural kumesi: kural kimligi -> [yuklem, duzeltmenin degistirdigi alan, duzeltilmis deger]
const KURAL = {
  Y1: [(k) => k.genel === 1, "genel", 0],
  Y2: [(k) => k.sifre === 0, "sifre", 1],
  Y3: [(k) => k.gunluk === 0, "gunluk", 1],
  Y4: [(k) => k.port === 1, "port", 0],
  Y5: [(k) => k.etiket === 0, "etiket", 1],
  Y6: [(k) => k.yas > 365, "yas", 90],
};
const AD = { Y1: "genel erisim kapali", Y2: "beklemede sifreleme", Y3: "denetim gunlugu",
  Y4: "yonetim portu dar", Y5: "sahip etiketi", Y6: "anahtar yasi <= 365",
  Y7: "aktarimda sifreleme" };

// Bildirilmis istisna kayitlari (model girdisi). Ucu kaynak, biri ekip duzeyinde yazilmistir.
const ISTISNA = satir(`
  kapi-genel|Y1
  olcum-kenar|Y1
  isletim-yedek|Y6
  ekip:akis|Y6`).map((x) => x.join("|"));

const istisnali = (k, r) =>
  ISTISNA.includes(`${k.ad}|${r}`) || ISTISNA.includes(`ekip:${k.ekip}|${r}`);

// Elle etiketli gercek uyumsuzluk (model girdisi): sapmanin mesru olmadigi kaynak-kural ciftleri.
// Y7 kural kumesinde yoktur; iki gercek uyumsuzluk bu turdedir.
const GERCEK = satir(`
  olcum-sinama|Y1 Y2 Y3 Y4 Y5 Y6
  akis-depo|Y1 Y3 Y6
  akis-gelistirme|Y1 Y2 Y6
  kapi-gelistirme|Y1 Y3 Y6
  isletim-gelistirme|Y1 Y3 Y5 Y6
  olcum-arsiv|Y2
  katalog-sinama|Y2 Y4 Y6
  isletim-yedek|Y2 Y6
  akis-arsiv|Y2 Y5 Y6
  isletim-arac|Y3 Y6
  katalog-yedek|Y3 Y6
  olcum-rapor|Y3 Y5
  kapi-yonetim|Y4
  kapi-sinama|Y4
  akis-kuyruk|Y7
  katalog-depo|Y7`).flatMap(([ad, r]) => r.split(" ").map((x) => `${ad}|${x}`));

const KURALLAR = Object.keys(KURAL);
const TUM = [...KURALLAR, "Y7"];

// Atesleyen: yuklem dogru. Isaretlenen: atesleyen ve istisna kaydi yok.
const atesle = (kume) => {
  const a = [], i = [];
  for (const k of kume) for (const r of KURALLAR) if (KURAL[r][0](k)) {
    a.push(`${k.ad}|${r}`);
    if (!istisnali(k, r)) i.push(`${k.ad}|${r}`);
  }
  return { atesleyen: a, isaretli: i };
};

const taban = atesle(KAYNAK);
const yak = taban.isaretli.filter((x) => GERCEK.includes(x));
const yanlis = taban.isaretli.filter((x) => !GERCEK.includes(x));
const kacan = GERCEK.filter((x) => !taban.isaretli.includes(x));
const uyumsuzKaynak = new Set(taban.isaretli.map((x) => x.split("|")[0]));

console.log(`${KAYNAK.length} kaynak, ${KURALLAR.length} kural, ${ISTISNA.length} istisna kaydi, ` +
  `${GERCEK.length} elle etiketli gercek uyumsuzluk`);
console.log(`isaretlenen kaynak: ${uyumsuzKaynak.size}/${KAYNAK.length}, ` +
  `isaretlenen cift: ${taban.isaretli.length} (atesleyen ${taban.atesleyen.length})`);

const K = [-8, -22, 11, 12, 11, 8, 15];
console.log();
yaz(K, "kural", "ne bakiyor", "atesleyen", "isaretlenen", "yakalanan", "kacan", "yanlis isaret");
for (const r of TUM) {
  const at = taban.atesleyen.filter((x) => x.endsWith(`|${r}`)).length;
  const is = taban.isaretli.filter((x) => x.endsWith(`|${r}`));
  const y = is.filter((x) => GERCEK.includes(x)).length;
  const kc = GERCEK.filter((x) => x.endsWith(`|${r}`) && !is.includes(x)).length;
  yaz(K, r, AD[r], at, is.length, y, kc, is.length - y);
}
yaz(K, "toplam", "", taban.atesleyen.length, taban.isaretli.length, yak.length, kacan.length,
  yanlis.length);

// Degisiklik akisi: kaynak|alan|yeni deger|mesru mu (model girdisi)
const DEGISIKLIK = satir(`
  katalog-depo|genel|1|1
  katalog-depo|gunluk|0|0
  olcum-depo|port|1|0
  olcum-depo|yas|900|0
  akis-kuyruk|genel|1|1
  akis-kuyruk|sifre|0|0
  isletim-kota|port|1|1
  isletim-kota|etiket|0|0
  kapi-genel|gunluk|0|0
  kapi-genel|yas|700|0
  olcum-kenar|port|1|1
  katalog-kapi|sifre|0|0
  katalog-kapi|yas|800|0
  isletim-gunluk|genel|1|1
  isletim-gunluk|port|1|0
  olcum-depo|etiket|0|0
  akis-kuyruk|yas|900|1
  kapi-yonetim|gunluk|0|0
  isletim-kota|yas|600|0
  katalog-depo|etiket|0|0`)
  .map(([ad, alan, deger, mesru]) => ({ ad, alan, deger: +deger, mesru: mesru === "1" }));

// Uc kip: yalniz bildir, engelle, duzelt. Her kip ayni akisi ayni sirayla gorur.
const kipKos = (kip) => {
  const durum = KAYNAK.map((k) => ({ ...k }));
  const bul = (ad) => durum.find((k) => k.ad === ad);
  let durdurulan = 0, geriAlinan = 0, bozulan = 0, duzeltilen = 0;

  if (kip === "duzelt") for (const k of durum) for (const r of KURALLAR)
    if (KURAL[r][0](k) && !istisnali(k, r)) {
      if (!GERCEK.includes(`${k.ad}|${r}`)) bozulan++;
      k[KURAL[r][1]] = KURAL[r][2];
      duzeltilen++;
    }

  for (const d of DEGISIKLIK) {
    const k = bul(d.ad);
    const once = { ...k };
    k[d.alan] = d.deger;
    const yeni = KURALLAR.filter((r) => KURAL[r][0](k) && !KURAL[r][0](once) && !istisnali(k, r));
    if (yeni.length === 0) continue;
    if (kip === "engelle") { Object.assign(k, once); if (d.mesru) durdurulan++; }
    else if (kip === "duzelt") {
      for (const r of yeni) { k[KURAL[r][1]] = KURAL[r][2]; duzeltilen++; }
      if (d.mesru) geriAlinan++;
    }
  }

  // Pencere sonunda acikta kalan: hala gercek uyumsuzluk tasiyan kaynak ve cift
  const acik = new Set(), cift = [];
  for (const k of durum) {
    for (const r of KURALLAR) if (KURAL[r][0](k) && GERCEK.includes(`${k.ad}|${r}`))
      { acik.add(k.ad); cift.push(`${k.ad}|${r}`); }
    if (GERCEK.includes(`${k.ad}|Y7`)) { acik.add(k.ad); cift.push(`${k.ad}|Y7`); }
  }
  // Denetleyicinin yazma yetkisi: yalnizca duzelt kipi alan yazar
  const alan = kip === "duzelt" ? KAYNAK.length * KURALLAR.length : 0;
  return { acik: acik.size, cift: cift.length, durdurulan, geriAlinan, bozulan, duzeltilen, alan };
};

const KIP = ["bildir", "engelle", "duzelt"], SONUC = {};
for (const kip of KIP) SONUC[kip] = kipKos(kip);

const D = [-10, 15, 13, 11, 23, 20, 15];
console.log();
yaz(D, "kip", "acikta kaynak", "acikta cift", "duzeltme", "durdurulan/geri alinan",
  "bozulan mesru yap.", "yazma yetkisi");
for (const kip of KIP) {
  const s = SONUC[kip];
  yaz(D, kip, s.acik, s.cift, s.duzeltilen, s.durdurulan + s.geriAlinan, s.bozulan,
    `${s.alan} alan`);
}

// Elle duzeltme yuku (kurgu birim): bildir kipinde her isaretli cift bir is kalemidir
const DAKIKA = 25, KISI_SAAT = (n) => ((n * DAKIKA) / 60).toFixed(1);
const mesruDeg = DEGISIKLIK.filter((d) => d.mesru).length;
console.log(`\nbildir kipi kuyrugu: ${taban.isaretli.length} cift x ${DAKIKA} dk = ` +
  `${KISI_SAAT(taban.isaretli.length)} kisi-saat; akistaki ${DEGISIKLIK.length} degisikligin ` +
  `${mesruDeg} tanesi mesru etiketli`);
console.log(`engelle: mesru degisikligin ${SONUC.engelle.durdurulan}/${mesruDeg} tanesi ` +
  `durduruldu; duzelt: ${SONUC.duzelt.geriAlinan}/${mesruDeg} tanesi geri alindi`);
console.log(`kacan ${kacan.length} ciftin ${kacan.filter((x) => x.endsWith("|Y7")).length} tanesi ` +
  `kural kumesinde karsiligi olmayan tur, ` +
  `${kacan.filter((x) => !x.endsWith("|Y7")).length} tanesi istisna kaydinin kapsadigi cift`);
const ekipIstisna = GERCEK.filter((x) => {
  const [ad, r] = x.split("|");
  const k = KAYNAK.find((z) => z.ad === ad);
  return ISTISNA.includes(`ekip:${k.ekip}|${r}`);
}).length;
console.log(`ekip duzeyinde yazilmis tek istisna kaydi ${ekipIstisna} gercek uyumsuzlugu ortuyor`);

// Sinir ve kalan (kurgu): denetleyicinin tarama basina degerlendirme kotasi
const KOTA = 240, kullanilan = KAYNAK.length * KURALLAR.length;
console.log(`\ndegerlendirme kotasi ${KOTA}/tarama; kullanilan ${KAYNAK.length} x ` +
  `${KURALLAR.length} = ${kullanilan}, kalan ${KOTA - kullanilan} -> ayni kural kumesiyle ` +
  `${Math.floor((KOTA - kullanilan) / KURALLAR.length)} kaynak daha, ya da ayni kaynak ` +
  `kumesiyle ${Math.floor(KOTA / KAYNAK.length) - KURALLAR.length} kural daha`);
```

```
22 kaynak, 6 kural, 4 istisna kaydi, 38 elle etiketli gercek uyumsuzluk
isaretlenen kaynak: 15/22, isaretlenen cift: 40 (atesleyen 46)

kural   ne bakiyor              atesleyen isaretlenen  yakalanan   kacan  yanlis isaret
Y1      genel erisim kapali             8           6          5       0              1
Y2      beklemede sifreleme             6           6          6       0              0
Y3      denetim gunlugu                 8           8          7       0              1
Y4      yonetim portu dar               7           7          4       0              3
Y5      sahip etiketi                   6           6          4       0              2
Y6      anahtar yasi <= 365            11           7          6       4              1
Y7      aktarimda sifreleme             0           0          0       2              0
toplam                                 46          40         32       6              8

kip         acikta kaynak  acikta cift   duzeltme durdurulan/geri alinan  bozulan mesru yap.  yazma yetkisi
bildir                 16           38          0                      0                   0         0 alan
engelle                16           38          0                      5                   0         0 alan
duzelt                  6            6         59                      5                   8       132 alan

bildir kipi kuyrugu: 40 cift x 25 dk = 16.7 kisi-saat; akistaki 20 degisikligin 6 tanesi mesru etiketli
engelle: mesru degisikligin 5/6 tanesi durduruldu; duzelt: 5/6 tanesi geri alindi
kacan 6 ciftin 2 tanesi kural kumesinde karsiligi olmayan tur, 4 tanesi istisna kaydinin kapsadigi cift
ekip duzeyinde yazilmis tek istisna kaydi 3 gercek uyumsuzlugu ortuyor

degerlendirme kotasi 240/tarama; kullanilan 22 x 6 = 132, kalan 108 -> ayni kural kumesiyle 18 kaynak daha, ya da ayni kaynak kumesiyle 4 kural daha
```

Sayılar **ölçüm** sınıfındadır; girdileri yukarıdaki varsayımlardır. Yirmi iki kaynak üzerinde
altı kural kırk altı yerde ateşliyor, istisna kayıtları altısını süzüyor ve geriye kırk işaretli
çift kalıyor. Kaynak düzeyinde bakıldığında yirmi ikinin on beşi uyumsuz görünüyor — bu, ilk
taramada okunacak sayıdır ve tek başına yanıltıcıdır, çünkü işaretlenen her çift gerçekten
uyumsuz değildir.

## Kural Başına Yakalanan ve Kaçan

Alt tablo kuralları ayırıyor ve kuralların birbirine benzemediğini gösteriyor. Y2 temiz çalışıyor:
altı yerde ateşliyor, altısı da gerçekten uyumsuz, yanlış işareti yok — çünkü yüklemi bir kaynağın
niyetinden bağımsızdır, beklemede şifrelemenin kapalı olmasının meşru bir okuması yoktur. Y4 aynı
biçimde yazılmış ama başka türlü davranıyor: yedi ateşlemenin dördü gerçek, üçü meşru bir
yapılandırmayı işaretliyor; geliştirme ortamındaki bir yönetim aracının portunun açık olması o
ortamın kendi düzenidir. Y5 de aynı: altı ateşlemenin ikisi geçici geliştirme kaynağına ait ve
sahip etiketi bilerek boştur.

Kırk işaretli çiftin otuz ikisi gerçek uyumsuzluk, sekizi **yanlış işaret**. Kaçan altı çift ise
iki ayrı yerden geliyor ve ikisi de kuralın eşiğiyle ilgili değildir. Dördü istisna kayıtlarının
altında duruyor: Y6 on bir yerde ateşliyor ama yalnız yedisi işaretleniyor, çünkü bir istisna
kaydı **ekip düzeyinde** yazılmıştır ve tek başına üç gerçek uyumsuzluğu örtüyor. İstisnanın
kapsamı, uyumsuzluğun kendisinden daha belirleyicidir — istisna kaydı yazma yetkisi bir denetim
kalemidir ve kimin yazabildiği sayılmalıdır. Kalan iki kaçan çift kural kümesinde karşılığı
olmayan bir türdedir: aktarımda şifreleme için yazılmış bir kural yoktur, dolayısıyla o iki
kaynak için üretilen sayı da yoktur. Kuralları sıkılaştırmak bu boşluğu kapatmaz; boşluk eşikte
değil, kural kümesinin kapsamındadır.

## Üç Düzeltme Kipi

Yirmi değişiklikten oluşan akış üç kipte de aynı sırayla koşuyor. **Yalnız bildir** kipi hiçbir
şeye dokunmaz: açıkta kalan otuz sekiz çift ve on altı kaynak duruyor, denetleyicinin kiralanan
katmanda yazma yetkisi sıfır alandır, karşılığında kırk kalemlik bir elle düzeltme kuyruğu doğuyor
— kalem başına 25 dakikayla 16,7 kişi-saat. **Engelle** kipi yeni değişikliği reddeder ama var
olana dokunmaz; açıkta kalan sayı değişmiyor, on altı kaynak ve otuz sekiz çift aynen duruyor.
Engellemenin bedeli ise başka bir sütunda: akıştaki altı meşru değişikliğin beşi durduruldu.

Kaçan tek meşru değişikliğin nasıl geçtiği söylenmeye değer. Akış kuyruğunun anahtar yaşını
uzatan değişikliği reddedilmedi, çünkü o ekibin Y6 için ekip düzeyinde bir istisna kaydı var —
yani meşru işi geçiren kayıt ile üç gerçek uyumsuzluğu örten kayıt **aynı kayıttır**. İstisnayı
daraltmak kaçanı dörtten bire indirir ve durdurulan meşru değişikliği beşten altıya çıkarır; iki
sütun aynı düğmeye bağlıdır.

**Düzelt** kipi açıkta kalanı on altı kaynaktan altıya, otuz sekiz çiftten altıya indiriyor. Kalan
altı çift zaten kaçanlardır: dördü istisna kaydının örttüğü, ikisi kural kümesinde karşılığı
olmayan tür. Denetleyici bunun için elli dokuz düzeltme yazıyor ve yirmi iki kaynağın altı alanına,
yani yüz otuz iki alana yazma yetkisi istiyor. Kiralanan katmanda bu, hiçbir insanın sahip olmadığı
genişlikte bir yetkidir: bir kaynağı ağa açan, şifrelemeyi çeviren ve anahtarı değiştiren tek
özne, denetim aracının kendisi olur.

## Yanlış Düzeltmenin Bedeli

Düzelt kipinin ikinci sütunu asıl ölçüdür: sekiz meşru yapılandırma bozuldu. Bunlar yanlış
işaretlenen sekiz çiftin tamamıdır — kamuya açık olması gereken katalog kapısı kapatıldı, üç
yönetim portu daraltıldı, iki geçici kaynağa sahip etiketi yazıldı, bir arşiv anahtarının ömrü
kısaltıldı, bir sınama kaynağının günlüğü açıldı. Denetleyici bunların meşru olduğunu bilmiyor,
çünkü meşruluk bilgisinin tek taşıyıcısı istisna kaydıdır ve bu sekiz çift için yazılmamıştır.

Oran adıyla anılmalı: taban taramasındaki kırk düzeltmenin sekizi, yani her beş düzeltmeden
biri meşru bir yapılandırmayı bozuyor. Üstüne akıştan gelen beş meşru değişiklik uygulandıktan sonra geri
alınıyor. Kip seçimi bu yüzden bir kural sıkılığı seçimi değil, iki sütun arasında bir seçimdir:
bildir kipi hiçbir meşru işi durdurmaz ve on altı kaynağı açıkta bırakır; düzelt kipi on kaynağı
kapatır ve on üç meşru işlemi bozar ya da geri alır. Ortadaki engelle kipi ikisini de yapmaz —
yeni uyumsuzluğu içeri sokmaz ama eskisini de kapatmaz; var olan on altı kaynak için hâlâ bir
elle düzeltme kuyruğu gerekir.

## Sınır ve Kalan

Denetleyicinin kendi sınırı da sayılır. Tarama başına değerlendirme kotası 240 birimdir; yirmi iki
kaynak çarpı altı kural, 132 birim kullanıyor ve 108 kalıyor. Aynı kural kümesiyle on sekiz kaynak
daha eklenebilir ya da aynı kaynak kümesiyle dört kural daha yazılabilir; ikisi birden yapılamaz.
Kapsam boşluğunu kapatmak için yazılacak aktarımda şifreleme kuralı yirmi iki değerlendirme yer
kaplar, yani kalan bütçenin beşte birini. Kota, kural yazmayı ücretsiz olmaktan çıkarır: kural
kümesini büyütmek ile kaynak sayısını büyütmek aynı sınıra çarpar.

## Özet

- Yirmi iki kaynak üzerinde altı kural kırk altı yerde ateşliyor, dört istisna kaydı altısını
  süzüyor; kırk işaretli çiftin otuz ikisi gerçek uyumsuzluk, sekizi yanlış işarettir.
- Kaçan altı çiftin dördü istisna kayıtlarının altındadır ve tek bir ekip düzeyinde kayıt üç
  gerçek uyumsuzluğu örtüyor; ikisi kural kümesinde karşılığı olmayan türdür ve eşik
  sıkılaştırmakla kapanmaz.
- Yalnız bildir kipi on altı kaynağı açıkta bırakır, hiçbir meşru işi durdurmaz ve kırk kalemlik
  bir kuyruk üretir (16,7 kişi-saat, kurgu birim).
- Engelle kipi açıkta kalanı değiştirmez ama altı meşru değişikliğin beşini durdurur; geçen tek
  meşru değişiklik, üç gerçek uyumsuzluğu örten istisna kaydı sayesinde geçiyor.
- Düzelt kipi açıkta kalanı on altı kaynaktan altıya indirir; karşılığında sekiz meşru
  yapılandırmayı bozar, beş meşru değişikliği geri alır ve yüz otuz iki alanda yazma yetkisi ister.
- Denetleyicinin tarama başına 240 değerlendirmelik kotasının 132'si kullanılıyor; kalan 108 birim
  on sekiz kaynağa ya da dört kurala yeter, ikisine birden değil.

## Sonraki Adım

Uyum denetimi kaynağın yapılandırmasını okudu ve ilk kuralı genel erişimle ilgiliydi: Y1 sekiz
yerde ateşledi, altısı işaretlendi. Ama bu kural bir kaynağın açık olup olmadığına bakan tek bir
bayrağı okuyor. Bayrak kapatıldığında o kaynağa gerçekten kaç yol kaldığı, hizmete hangi uçtan
gidildiği ve adın nasıl çözümlendiği hiç sorulmadı. Sonraki ders yönetilen bir hizmete erişimin
kaç yoldan sağlandığını sayar ve genel uç kapatıldığında kaç meşru erişimin kırıldığını ölçer.
