İçeriğe geç
academia.sh

Ders 13 / 18

Katılım Kuralları

64 kalemlik kurgu bir envanterde yazılı kapsam tanımı programlı denetime çevriliyor: 20 kalem kapsamda, 11 kalem sınırda, 33 kalem dışında çıkıyor. Beş paylaşılan ön yüz üzerinden 29 kapsam dışı ve sınırdaki kaleme yanlışlıkla dokunulabiliyor; bunların 11'i katılım kurallarında adıyla yasaklanmış. Kaba pencere planlanan işi 4 saat aşarken sayaç okuma aralığı düşünce 6 saat eksik kalıyor, dört eşiğin ikisinde nöbet karşılığı olmadığı için gerçekleşen bildirim süresi sözleşmede yazandan uzun çıkıyor.

İçindekiler

Bir önceki konu araçların ne ürettiğini ve neyi kanıtlayamadığını gösterdi: paket kümesinden çıkarılan akış, vekil aracın değiştirdiği istek, sanal alanın gözleyebildiği davranış, itibar servislerinin çoğunluk kararı. Hepsi aynı sessiz varsayımı taşıyordu — o araçların çalıştırıldığı hedef üzerinde çalıştırma hakkı vardı. Bu hakkın nereden geldiği, nerede bittiği ve bittiği yeri kimin ölçtüğü hiç yazılmadı.

Katılım kuralları (rules of engagement) o hakkın yazılı biçimidir: neye dokunulabileceğini, ne zaman dokunulabileceğini ve bir şey ters gittiğinde kimin ne kadar sürede haber alacağını belirler. Yazılı bir cümle ise bir denetim değildir. “Abone portalı kapsamdadır, şube ağı kapsam dışıdır” cümlesi elde bir hedef listesi varken tek tek karara dönüşmek zorundadır, ve bu ders o dönüşümü koşturur. Kapsam dışı bir hedefe dokunmak yetkiyi geçersiz kılar: o andan sonra yapılan işlem yazılı izne değil izinsiz erişime dönüşür, hem yasal sonuç doğurur hem de değerlendirmenin tamamını kullanılamaz kılar.

  • TS1. Bölgesel ölçüm ağı envanteri 64 kalemdir; dört birime, üç ortama ve sekiz ön yüze dağılır. Envanter de kapsam tanımı da kurgudur, gerçek hedef yoktur.
  • TS2. Kapsam tanımı üç izin ölçütü (ağ bloku, birim, ortam) ve iki dışlama ölçütünden oluşur; toplam altı izin, üç dışlama kalemi.
  • TS3. Denetim üç karar üretir: kapsamda, sınırda, dışında. Sınırda demek, ölçütlerin yalnız bir bölümünün tuttuğu ya da kalemin hem izin hem dışlama kuralına girdiği anlamına gelir; bu kalemler ayrı ve yazılı onay olmadan dokunulamaz.
  • TS4. Ön yüz, birden çok kalemi aynı noktadan yayımlayan ortak giriştir. Bir ön yüze gönderilen istek, o ön yüzün arkasındaki her kaleme ulaşabilir.
  • TS5. Test penceresi beş gece, gecede sekiz saat, iki kişidir. Gecenin bir saati sayaç okuma aralığıdır ve o aralıkta hiçbir kaleme dokunulmaz.
  • TS6. İletişim protokolü dört eşik tanımlar; örnek olay gecenin 02:30’unda oluşur, mesai 09:00’da başlar. Bütün süreler kurgudur.

Kapsam Tanımı Bir Denetim Olarak

// kapsam.mjs — kapsam tanimini programli denetime ceviren model.
// MODELDIR; envanter de kapsam da kurgudur, gercek hedef yoktur.
export const TOHUM = 20260806;
const uretec = (t) => { let s = t >>> 0;
  return () => (s = (s * 1664525 + 1013904223) >>> 0) / 4294967296; };
const r = uretec(TOHUM);

// Her kalem bir birime, bir ortama, bir ic ag blokuna ve bir on yuze baglidir.
const BIRIM = ["abone-portali", "saha-uygulamasi", "sube-agi", "sayac-toplayici"];
const ORTAM = ["uretim", "hazirlik", "gelistirme"];
const HAVUZ = {                                     // hangi birim hangi on yuzu kullaniyor
  "abone-portali": ["onyuz-a1", "onyuz-a2", "onyuz-ortak-1"],
  "saha-uygulamasi": ["onyuz-s1", "onyuz-ortak-1", "onyuz-ortak-2"],
  "sube-agi": ["onyuz-b1", "onyuz-ortak-2"],
  "sayac-toplayici": ["onyuz-t1", "onyuz-t2", "onyuz-ortak-2"],
};
export const HEDEF = Array.from({ length: 64 }, (_, i) => {
  const birim = BIRIM[Math.floor(r() * 4)], havuz = HAVUZ[birim];
  return { ad: `${birim}-${String(i + 1).padStart(2, "0")}`, birim,
    ortam: ORTAM[Math.floor(r() * 3)],
    blok: `10.${20 + Math.floor(r() * 4)}.${Math.floor(r() * 6)}.0/24`,
    onyuz: havuz[Math.floor(r() * havuz.length)] };
});

// Katilim kurallarinda yazan kapsam tanimi: uc izin olcutu, iki dislama olcutu.
export const KAPSAM = {
  izinliBlok: ["10.20.", "10.21."],
  izinliBirim: ["abone-portali", "saha-uygulamasi"],
  izinliOrtam: ["uretim", "hazirlik"],
  dislananAd: ["sayac-toplayici", "sube-agi"],
  dislananOrtam: ["gelistirme"],
};

// Denetim: uc olcute ayri ayri bakilir. Hepsi tutarsa kapsamda, hicbiri tutmazsa
// disinda, bir bolumu tutarsa ya da dislama ile cakisirsa SINIRDA.
export function kararVer(h, k = KAPSAM) {
  const olcut = [k.izinliBlok.some((b) => h.blok.startsWith(b)),
    k.izinliBirim.includes(h.birim), k.izinliOrtam.includes(h.ortam)];
  const dislandi = k.dislananAd.some((a) => h.ad.startsWith(a)) ||
    k.dislananOrtam.includes(h.ortam);
  const tutan = olcut.filter(Boolean).length;
  if (dislandi) return tutan === 3 ? "sinirda" : "disinda";
  return tutan === 3 ? "kapsamda" : tutan === 0 ? "disinda" : "sinirda";
}
export const KARAR = new Map(HEDEF.map((h) => [h.ad, kararVer(h)]));

// Paylasilan on yuz: kapsam ici bir kalemle ayni on yuzu kullanan kapsam disi
// kalem varsa, o on yuze gonderilen istek ona da ulasir.
export function paylasilanRisk() {
  const onyuzler = new Map();
  for (const h of HEDEF) onyuzler.set(h.onyuz, [...(onyuzler.get(h.onyuz) ?? []), h]);
  const riskli = [];
  for (const [ad, liste] of onyuzler) {
    const d = (k) => liste.filter((h) => KARAR.get(h.ad) === k).length;
    const yasak = liste.filter((h) => KAPSAM.dislananAd.some((a) => h.ad.startsWith(a))).length;
    if (d("kapsamda") && liste.length > d("kapsamda")) {
      riskli.push({ onyuz: ad, ici: d("kapsamda"), disi: d("disinda"),
        sinirda: d("sinirda"), yasak });
    }
  }
  return riskli.sort((a, b) => b.disi - a.disi || a.onyuz.localeCompare(b.onyuz));
}

if (import.meta.url === `file://${process.argv[1]}`) {
  const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
    : String(v).padEnd(B[0]))).join("");
  const yz = gen([18, 10, 10, 10, 12]);
  const say = (d) => HEDEF.filter((h) => KARAR.get(h.ad) === d).length;
  console.log(`model (tohum ${TOHUM}): ${HEDEF.length} hedef, ${BIRIM.length} birim, ` +
    `${new Set(HEDEF.map((h) => h.onyuz)).size} on yuz`);
  console.log("\n" + yz(["birim", "kapsamda", "sinirda", "disinda", "toplam"]));
  for (const b of BIRIM) {
    const l = HEDEF.filter((h) => h.birim === b);
    const c = (d) => l.filter((h) => KARAR.get(h.ad) === d).length;
    console.log(yz([b, c("kapsamda"), c("sinirda"), c("disinda"), l.length]));
  }
  console.log(yz(["TOPLAM", say("kapsamda"), say("sinirda"), say("disinda"), HEDEF.length]));

  const riskli = paylasilanRisk(), yz2 = gen([15, 12, 12, 11, 13]);
  console.log("\n" + yz2(["on yuz", "kapsam ici", "kapsam disi", "sinirda", "adiyla yasak"]));
  for (const x of riskli) console.log(yz2([x.onyuz, x.ici, x.disi, x.sinirda, x.yasak]));
  const t = (alan) => riskli.reduce((a, x) => a + x[alan], 0);
  console.log(`\npaylasilan on yuz ${riskli.length}; bu on yuzlere gonderilen istek ` +
    `${t("disi") + t("sinirda")} kapsam disi ve sinirdaki kaleme de ulasabilir, ` +
    `${t("yasak")}'i katilim kurallarinda adiyla yasaklanmis`);
}
model (tohum 20260806): 64 hedef, 4 birim, 8 on yuz

birim               kapsamda   sinirda   disinda      toplam
abone-portali             11         5         1          17
saha-uygulamasi            9         6         6          21
sube-agi                   0         0         9           9
sayac-toplayici            0         0        17          17
TOPLAM                    20        11        33          64

on yuz           kapsam ici kapsam disi    sinirda adiyla yasak
onyuz-ortak-2             1          14          2           11
onyuz-ortak-1             7           3          5            0
onyuz-a1                  3           1          0            0
onyuz-a2                  5           0          3            0
onyuz-s1                  4           0          1            0

paylasilan on yuz 5; bu on yuzlere gonderilen istek 29 kapsam disi ve sinirdaki kaleme de ulasabilir, 11'i katilim kurallarinda adiyla yasaklanmis

Üstteki tablo, iki cümlelik bir kapsam tanımının 64 kalem üzerinde neye karşılık geldiğini yazıyor. Yazılı metin iki birimi içeri, iki birimi dışarı alıyor; sayı ise üç sütuna dağılıyor. 20 kalem kapsamda, 33 kalem dışında, 11 kalem sınırda. Sınırdaki 11 kalemin tamamı izinli birimlerden geliyor: birim ölçütü tutuyor ama ağ bloku ya da ortam ölçütü tutmuyor. Yazılı tanım bu kalemler için bir karar üretmez, çünkü tanımı yazan kişi bir birimin üç ayrı blokta ve üç ayrı ortamda kalemi olabileceğini hesaba katmamıştır. Ölçüm bu boşluğu ada indirger: kapsamın belirsiz olduğu kalem sayısı, kapsamda olduğu kalemin yarısından biraz azdır.

Üçüncü kararın ayrı bir sütun olması bir ayrıntı değil, denetimin taşıdığı asıl bilgidir. Sınırdaki kalem “kapsamda” sayılırsa yetki sınırı aşılır; “dışında” sayılırsa değerlendirme kendi kapsamını gereğinden dar tutar ve gerçekten test edilmesi gereken kalemler hiç görülmez. İki yanlıştan birincisi yasal sonuç doğurur, ikincisi kurumun parasını boşa harcar. Doğru işlem üçüncü bir kararla kalemi işaretlemek ve kararı yazan tarafa geri göndermektir. Bir kapsam denetiminin değeri de burada ölçülür: kaç kalemi otomatik onayladığı değil, kaç kalemi insana geri gönderdiği.

Alttaki tablo daha sert bir sonuç veriyor. Sekiz ön yüzün beşi kapsam içi ve kapsam dışı kalemi aynı noktada topluyor. En ağırı onyuz-ortak-2: arkasında tek bir kapsam içi kalem var, buna karşılık 14 kapsam dışı ve 2 sınırdaki kalem duruyor, ve 14’ün 11’i katılım kurallarında birim adıyla yasaklanmış kalemlerdir. O tek kalem için o ön yüze gönderilen istek, adıyla yasaklanmış 11 kaleme de ulaşır. Toplamda beş ön yüz üzerinden 29 kalem yanlışlıkla dokunulabilir durumdadır.

Bu, kapsam tanımının bir kalem listesi olarak yazılmasının neden yetmediğini gösterir. Kapsam kalemle değil, erişim noktasıyla kesişir; bir noktanın arkasında kaç kalem olduğu envanterin değil, altyapının kararıdır. Buradaki doğru işlem onyuz-ortak-2 arkasındaki tek kalemi değerlendirme dışına çıkarmaktır: bir kalemin getirisi, 11 yasak kaleme dokunma riskinin yanında ölçülemeyecek kadar küçüktür. Sınırdaki 11 kalem ise ayrı bir yazılı onaya bağlanır ve onay gelmeden hiçbir adım koşturulmaz.

Zaman Penceresi ve İletişim Protokolü

// pencere.mjs — zaman penceresi ve iletisim protokolu kalem olarak sayilir.
import { HEDEF, KARAR } from "./kapsam.mjs";

const kapsamda = HEDEF.filter((h) => KARAR.get(h.ad) === "kapsamda").length;
const ADIM = [["kesif", 0.4], ["tarama", 1.1], ["dogrulama", 2.3]];   // saat/kalem, kurgu
const GECE = 5, SAAT = 8, KISI = 2, YASAK = 1;      // gecenin bir saati sayac okuma araligi

const gen = (B) => (h) => h.map((v, j) => (j ? String(v).padStart(B[j])
  : String(v).padEnd(B[0]))).join("");
const y1 = gen([12, 10, 12, 14]);
const planlanan = ADIM.reduce((a, [, s]) => a + s * kapsamda, 0);
const kaba = GECE * SAAT * KISI, net = GECE * (SAAT - YASAK) * KISI;

console.log(`${kapsamda} kapsam ici kalem, ${ADIM.length} adim sinifi`);
console.log(y1(["adim", "kalem", "sure/kalem", "toplam saat"]));
for (const [ad, s] of ADIM) {
  console.log(y1([ad, kapsamda, s.toFixed(1), (s * kapsamda).toFixed(1)]));
}
console.log(y1(["PLANLANAN", "", "", planlanan.toFixed(1)]));
console.log(`pencere: ${GECE} gece x ${SAAT} saat x ${KISI} kisi = ${kaba} kisi-saat; ` +
  `sayac okuma araligi (${YASAK} saat/gece) dusunce ${net} kisi-saat`);
console.log(`kaba pencere planlanani ${(kaba - planlanan).toFixed(1)} saat asiyor, ` +
  `net pencere ${(planlanan - net).toFixed(1)} saat eksik kaliyor`);

// Iletisim protokolu: her esik icin sozlesme suresi, nobet karsiligi ve taraflar.
const ESIK = [
  ["kritik bulgu", 1, true, ["test ekibi", "kurum guvenlik"], false],
  ["hizmet kesintisi", 0.25, true, ["test ekibi", "kurum guvenlik", "sistem sahibi"], true],
  ["kapsam disina tasma", 4, false, ["test ekibi", "kurum guvenlik", "sistem sahibi",
    "hukuk"], true],
  ["ucuncu taraf verisi", 24, false, ["test ekibi", "kurum guvenlik", "hukuk",
    "veri sahibi", "duzenleyici"], true],
];
const OLAY = 2.5, MESAI = 9;                        // olay saati ve mesai baslangici
const y2 = gen([22, 10, 8, 12, 9, 9]);
console.log("\n" + y2(["esik", "sozlesme", "nobet", "gerceklesen", "taraf", "durdur"]));
let sozToplam = 0, gercekToplam = 0;
for (const [ad, soz, nobet, taraf, durdur] of ESIK) {
  const gercek = nobet ? soz : Math.max(soz, MESAI - OLAY);
  sozToplam += soz; gercekToplam += gercek;
  console.log(y2([ad, `${soz} sa`, nobet ? "var" : "yok", `${gercek.toFixed(2)} sa`,
    taraf.length, durdur ? "evet" : "hayir"]));
}
const taraflar = new Set(ESIK.flatMap(([, , , t]) => t));
console.log(`\n${ESIK.length} esik, ${taraflar.size} ayri taraf, ` +
  `${ESIK.filter((e) => e[4]).length} esikte test durdurulur`);
console.log(`gecenin ${OLAY.toFixed(2)}'unda olusan olayda sozlesme toplam ` +
  `${sozToplam.toFixed(2)} saat vaat ediyor, gerceklesen ${gercekToplam.toFixed(2)} saat`);
20 kapsam ici kalem, 3 adim sinifi
adim             kalem  sure/kalem   toplam saat
kesif               20         0.4           8.0
tarama              20         1.1          22.0
dogrulama           20         2.3          46.0
PLANLANAN                                   76.0
pencere: 5 gece x 8 saat x 2 kisi = 80 kisi-saat; sayac okuma araligi (1 saat/gece) dusunce 70 kisi-saat
kaba pencere planlanani 4.0 saat asiyor, net pencere 6.0 saat eksik kaliyor

esik                    sozlesme   nobet gerceklesen    taraf   durdur
kritik bulgu                1 sa     var     1.00 sa        2    hayir
hizmet kesintisi         0.25 sa     var     0.25 sa        3     evet
kapsam disina tasma         4 sa     yok     6.50 sa        4     evet
ucuncu taraf verisi        24 sa     yok    24.00 sa        5     evet

4 esik, 6 ayri taraf, 3 esikte test durdurulur
gecenin 2.50'unda olusan olayda sozlesme toplam 29.25 saat vaat ediyor, gerceklesen 31.75 saat

Zaman penceresi kâğıt üzerinde yeterlidir ve gerçekte değildir. Beş gece, iki kişi ve gecede sekiz saat 80 kişi-saat verir; planlanan iş 76 saattir, yani pencere işi dört saat aşar. Sayaç okuma aralığı düşüldüğünde kullanılabilir süre 70 saate iner ve aynı plan altı saat eksik kalır. Aradaki fark bir yönetim kararı değil, aritmetiktir: dokunulmaz aralık pencerenin sekizde biridir ve planın payı da o oranda düşer. Süreyi kurtarmanın tek yolu adım sayısını azaltmaktır, ve doğrulama 46 saatle en pahalı sınıf olduğu için kesinti oradan gelir — bu da bir sonraki dersin sorusudur.

İkinci tablo iletişimi ölçüyor. Dört eşiğin ikisinde nöbet karşılığı vardır ve o ikisinde gerçekleşen bildirim süresi sözleşmede yazana eşittir. Kalan ikisinde karşı taraf yalnız mesai saatlerinde ulaşılabilirdir; gecenin 02:30’unda oluşan bir olayda kapsam dışına taşma şüphesi için sözleşme dört saat yazarken gerçekleşen süre 6,5 saattir. Bu, protokolün en kritik eşiğinin en yavaş eşik olması demektir: testi durduran üç eşikten ikisi mesaiye bağlıdır. Dört eşik toplamda altı ayrı tarafı ilgilendirir ve taraf sayısı arttıkça bildirimin tamamlanma süresi de uzar, çünkü protokol tarafların hepsine ulaşmayı şart koşar.

Durdurma sütunu da ayrıca okunmalıdır. Üç eşikte test durur, ve durma anı bir karar değil bir yükümlülüktür: kapsam dışına taşma şüphesi doğduğunda o şüphe giderilene kadar hiçbir yeni adım koşturulmaz. Bu, pencerede kaybedilen saati doğrudan artırır — gecenin 02:30’unda duran bir test 09:00’a kadar bekliyorsa o gecenin kalan 3,5 saati iki kişi için yedi kişi-saat eder ve zaten altı saat eksik olan plana eklenir. Katılım kurallarının zaman ve iletişim bölümleri bu yüzden ayrı belgeler değildir; biri ötekinin girdisidir.

Sonuç tek cümleye iner: katılım kuralları üç ayrı sayı üretir — dokunulabilir kalem sayısı, kullanılabilir saat sayısı ve bildirimin gerçekleşme süresi. Üçü de yazılı metinde değil, envanter ve takvim üzerinde koşturulduğunda ortaya çıkar.

Özet

  • 64 kalemlik envanterde iki cümlelik kapsam tanımı 20 kalemi kapsamda, 33’ünü dışında bırakıyor ve 11 kalemi sınırda — kararsız — bırakıyor; sınırdaki kalemlerin tamamı izinli birimlerden, izinsiz blok ya da ortamdan geliyor.
  • Sekiz ön yüzün beşi kapsam içi ve kapsam dışı kalemi aynı noktada topluyor; bu ön yüzler üzerinden 29 kaleme yanlışlıkla dokunulabiliyor ve 11’i katılım kurallarında adıyla yasaklanmış.
  • onyuz-ortak-2 arkasında tek bir kapsam içi kalem için 11 yasak kalem riski taşıyor; doğru karar o tek kalemi değerlendirme dışına çıkarmaktır.
  • Pencere kaba hesapta planlanan işi 4 saat aşarken sayaç okuma aralığı düşünce 6 saat eksik kalıyor; kesinti 46 saatlik doğrulama sınıfından gelmek zorundadır.
  • Dört iletişim eşiğinin ikisinde nöbet karşılığı yok; gecenin 02:30’unda kapsam dışına taşma şüphesi sözleşmede 4 saat, gerçekte 6,5 saat sürüyor ve altı ayrı tarafı ilgilendiriyor.

Sonraki Adım

Kapsam sayıya çevrildi, pencere hesaplandı ve bildirim süreleri yazıldı. Bu üç sayı neyin yapılabileceğini belirler, ama nasıl yapılacağını belirlemez. Aynı 20 kalem üzerinde değerlendirme hiçbir ön bilgi verilmeden de yürütülebilir, kimlik bilgisi ve mimari belgesi verilerek de. İki yol aynı süreyi harcamaz ve aynı sayıda aday üretmez. Sonraki ders kara, gri ve beyaz kutu değerlendirmelerini aday üretimi cinsinden karşılaştırır: aynı hedefte her tür kaç aday çıkarıyor, kaçı kanıta dönüşüyor ve aradaki süre farkı neye mal oluyor.

İ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