İçeriğe geç
academia.sh

Ders 13 / 15

Güvenlik Rolleri

Rollerin sorumluluk kalemi cinsinden ayrılması: 9 kalem türü ve 3 görevden oluşan 27 hücrede tek sahipli 15, sahipsiz 7, iki sahipli 3 ve sınırın öte yanında 2 hücre; sahipsiz kalemin 12 yolu daha pahalı bir adımdan kapattırması, 2 yolun hiç kapanmaması, 15 kapatmanın iki onay istemesi ve sınırın yazılmasıyla duran meşru isteğin 2.321'den 2.135'e inmesi.

İçindekiler

Önceki ders üç çalışma biçimini aynı yol kümesinde ayırdı ve mor çalışmanın kapattığı bilgi boşluğunu saydı. O ölçüm bir soruyu açıkta bıraktı: yollar bilindikten sonra kim hangi adımı kesecek. “Mavi” ve “kırmızı” birer çalışma biçiminin adıdır; bir kurumda işi yapan şey biçim değil, adı yazılı bir sorumluluk kalemidir.

Bu ders yolları bilindiği varsayımıyla ele alır ve sahipliği ölçer. Güvenlik işi beş rolde toplanır: güvenlik operasyonu kaydı okur ve olayı yürütür; güvenlik sınaması yolu arar ve kapalı olduğunu doğrular; güvenlik mimarisi tasarım kararını ve varsayılanı belirler; yönetişim politikayı, riski ve üçüncü taraf sözleşmesini taşır; sistem ve ağ işletimi değişikliği gerçekten uygular. Sorulan iki sayı şudur: aynı yol kümesinde kaç kalem hiçbir rolün üzerinde değil, kaç kalem iki rolün birden üzerinde.

Kalem, Görev ve Sahip

Rolleri isim isim saymak bir sorumluluk ölçüsü vermez; aynı isim iki kurumda başka işi kapsar. Ölçülebilir birim sorumluluk kalemidir: bir adımı kesmek için değiştirilmesi gereken şey.

  • AR9. Yol kümesi önceki dersin grafından gelir: 20 adım, 30 yol. Her adım bir kalem türüne bağlıdır; 9 kalem türü vardır.
  • AR10. Her kalem türünün üç görevi vardır: bul (kalemin var olduğunu bilmek ve listede tutmak), kapat (değişikliği uygulamak), sürdür (kapalı kaldığını doğrulamak). Matris 9 × 3 = 27 hücredir.
  • AR11. Bir hücrenin sahibi 0, 1 ya da 2 rol olabilir.
  • AR12. dis işaretli hücre paylaşılan sorumluluk sınırının öte yanındadır. O sınırın nerede geçtiği bu dersin sorusu değildir; girdisidir ve kurum içi bir boşluk sayılmaz.
  • AR13. Bir yol, üzerindeki bir adım kesilerek kapanır. Bir adım ancak kaleminin bul ve kapat hücrelerinde kurum içi bir sahip varsa kesilebilir: kimsenin listesinde olmayan bir kalem gündeme gelmez, gündeme gelse de uygulayanı yoktur.
  • AR14. Savunma kesilebilir adımlar arasından en az meşru istek taşıyanı seçer. Hiçbir adımı kesilebilir olmayan yol açık kalır.
  • AR15. kapat hücresinde iki sahip varsa o kapatma iki ayrı onay adımı kazanır.
  • AR16. Rol sınırını yazmak, her sahipsiz hücreye bir sahip atamak ve her iki sahipli hücrede tek sahip bırakmaktır; dis hücreler değişmez.
// rol/kalem.mjs — ayni erisim grafi, bu kez SORUMLULUK KALEMI ile etiketli (MODEL).
// Her adim bir kalem turune baglidir; her kalem turunun uc gorevi vardir. Sayilar kurgudur.
export const KENAR = `
  saha-terminali toplayici      420 saha-donanimi
  saha-terminali sube-anahtari   35 envanter-kaydi
  abone-portali  dogrulayici    900 uygulama-denetimi
  abone-portali  kimlik-dizini  760 kimlik-yetkisi
  tedarikci-ucu  yonetim-agi     18 ucuncu-taraf-maddesi
  tedarikci-ucu  yedek-ucu        6 ucuncu-taraf-maddesi
  sube-anahtari  yonetim-agi     24 ag-kurali
  sube-anahtari  toplayici      110 ag-kurali
  toplayici      dogrulayici    380 uygulama-denetimi
  toplayici      okuma-deposu   540 veri-siniflandirmasi
  dogrulayici    okuma-deposu   610 veri-siniflandirmasi
  dogrulayici    faturalama     290 uygulama-denetimi
  kimlik-dizini  yonetim-agi     44 kimlik-yetkisi
  kimlik-dizini  is-emri        150 kimlik-yetkisi
  yonetim-agi    toplayici       60 ag-kurali
  yonetim-agi    yedek-ucu       12 yedek-yolu
  yonetim-agi    kimlik-dizini   38 kimlik-yetkisi
  yedek-ucu      okuma-deposu     9 yedek-yolu
  is-emri        dogrulayici    130 uygulama-denetimi
  is-emri        faturalama      95 yama-dizeyi`
  .trim().split("\n").map((r) => {
    const [a, b, m, k] = r.trim().split(/\s+/);
    return { a, b, mesru: Number(m), kalem: k };
  });

export const GIRIS = ["saha-terminali", "abone-portali", "tedarikci-ucu"];
export const VARLIK = ["okuma-deposu", "faturalama"];
export const GOREV = ["bul", "kapat", "surdur"];
export const ROL = ["operasyon", "sinama", "mimari", "yonetisim", "isletim"];

// Sorumluluk hucresi: kalem turu x gorev -> sahip rol listesi. "dis" = paylasilan sorumluluk
// sinirinin ote yani; onceki kursta olculmus bir girdidir, kurum ici bir bosluk degildir.
export const SAHIP = {
  "ag-kurali":            { bul: ["isletim"], kapat: ["isletim", "mimari"], surdur: ["operasyon"] },
  "kimlik-yetkisi":       { bul: ["operasyon"], kapat: ["isletim"], surdur: ["operasyon", "yonetisim"] },
  "uygulama-denetimi":    { bul: ["sinama"], kapat: ["mimari"], surdur: [] },
  "envanter-kaydi":       { bul: [], kapat: ["isletim"], surdur: [] },
  "veri-siniflandirmasi": { bul: ["yonetisim"], kapat: ["mimari", "yonetisim"], surdur: ["operasyon"] },
  "yedek-yolu":           { bul: [], kapat: ["isletim"], surdur: [] },
  "yama-dizeyi":          { bul: ["operasyon"], kapat: ["isletim"], surdur: ["operasyon"] },
  "saha-donanimi":        { bul: [], kapat: ["isletim"], surdur: [] },
  "ucuncu-taraf-maddesi": { bul: ["yonetisim"], kapat: ["dis"], surdur: ["dis"] },
};

export function yollar() {
  const cikis = {};
  for (const k of KENAR) (cikis[k.a] ??= []).push(k.b);
  const hepsi = [];
  const yuru = (d, iz) => {
    if (VARLIK.includes(d)) { hepsi.push([...iz]); return; }
    for (const s of cikis[d] ?? []) if (!iz.includes(s)) yuru(s, [...iz, s]);
  };
  for (const g of GIRIS) yuru(g, [g]);
  return hepsi.map((iz) => ({ iz, kenar: iz.slice(0, -1).map((_, i) =>
    KENAR.find((k) => k.a === iz[i] && k.b === iz[i + 1])) }));
}

Sahipsiz Hücre ve Çakışan Hücre

// rol/olc.mjs — sorumluluk hucresi sayimi, rol basina yuk ve yol duzeyinde sonuc.
import { KENAR, SAHIP, GOREV, ROL, yollar } from "./kalem.mjs";

const Y = yollar(), KALEM = Object.keys(SAHIP);
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 ic = (s) => s.filter((r) => r !== "dis");
const sinif = (s) => (s[0] === "dis" ? "dis" : s.length === 0 ? "BOS"
  : s.length > 1 ? "CAK" : "tek");

console.log(`sorumluluk matrisi MODELI: ${KALEM.length} kalem turu x ${GOREV.length} gorev ` +
  `= ${KALEM.length * GOREV.length} hucre; ${ROL.length} rol, ${KENAR.length} adim, ` +
  `${Y.length} yol.`);
const T = [-22, 11, 18, 21];
console.log("\n1. hangi hucrenin sahibi var (dis = paylasilan sorumluluk sinirinin otesi)");
yaz(T, "kalem turu", ...GOREV);
for (const k of KALEM) yaz(T, k, ...GOREV.map((g) => SAHIP[k][g].join("+") || "-"));
const say = (c) => KALEM.reduce((a, k) =>
  a + GOREV.filter((g) => sinif(SAHIP[k][g]) === c).length, 0);
console.log(`hucre dagilimi: tek sahip ${say("tek")}, sahipsiz ${say("BOS")}, ` +
  `iki sahip ${say("CAK")}, dis ${say("dis")}.`);

// Bir adim ancak kaleminin bul ve kapat hucrelerinde kurum ici sahip varsa kesilebilir.
const kesilir = (e) => ic(SAHIP[e.kalem].bul).length > 0 && ic(SAHIP[e.kalem].kapat).length > 0;
const R = [-20, 10, 10];
console.log("\n2. rol basina yuk");
yaz(R, "rol", "hucre", "yol");
for (const r of ROL) {
  const h = KALEM.reduce((a, k) => a + GOREV.filter((g) => SAHIP[k][g].includes(r)).length, 0);
  const y = Y.filter((p) => p.kenar.some((e) =>
    kesilir(e) && GOREV.some((g) => SAHIP[e.kalem][g].includes(r)))).length;
  yaz(R, r, h, y);
}

// Rol sinirini yazmak: her sahipsiz hucreye bir sahip, her cakisan hucrede tek sahip.
const YAZILI = Object.fromEntries(KALEM.map((k) => [k, Object.fromEntries(GOREV.map((g) => {
  const s = SAHIP[k][g];
  return [g, s[0] === "dis" ? s : s.length === 0 ? ["isletim"] : [s[0]]];
}))]));
const karar = KALEM.reduce((a, k) =>
  a + GOREV.filter((g) => ["BOS", "CAK"].includes(sinif(SAHIP[k][g]))).length, 0);

function kos(M) {
  const uygun = (e) => ic(M[e.kalem].bul).length > 0 && ic(M[e.kalem].kapat).length > 0;
  const kes = new Set(); let kapanan = 0, onay = 0, dogrulanmaz = 0;
  for (const y of Y) {
    const u = y.kenar.filter(uygun).sort((a, b) => a.mesru - b.mesru);
    if (u.length === 0) continue;
    kapanan++; kes.add(u[0]);
    if (ic(M[u[0].kalem].kapat).length > 1) onay++;
    if (ic(M[u[0].kalem].surdur).length === 0) dogrulanmaz++;
  }
  return { kapanan, kalan: Y.length - kapanan, adim: kes.size, dogrulanmaz, onay,
    mesru: [...kes].reduce((a, e) => a + e.mesru, 0) };
}
const A = kos(SAHIP), B = kos(YAZILI);
const D = [-30, 12, 12];
console.log(`\n3. yol duzeyinde sonuc (rol sinirini yazmak ${karar} hucre karari ister)`);
yaz(D, "olcu", "mevcut", "yazili");
for (const [ad, f] of [["kapanan yol", (r) => r.kapanan], ["kalan yol", (r) => r.kalan],
  ["kesilen adim", (r) => r.adim], ["duran mesru istek (gun)", (r) => r.mesru],
  ["iki onay isteyen kapatma", (r) => r.onay],
  ["kapali kaldigi dogrulanmayan", (r) => r.dogrulanmaz]]) yaz(D, ad, f(A), f(B));

const kayan = Y.filter((y) => {
  const u = y.kenar.filter(kesilir).sort((a, b) => a.mesru - b.mesru);
  return u.length > 0 && u[0] !== [...y.kenar].sort((a, b) => a.mesru - b.mesru)[0];
}).length;
const sahipsizKalem = KALEM.filter((k) => !ic(SAHIP[k].bul).length || !ic(SAHIP[k].kapat).length);
console.log(`\nen ucuz adimi kesilemedigi icin daha pahali adimdan kapanan yol: ${kayan};`);
console.log(`kesilemeyen kalem turleri: ${sahipsizKalem.join(", ")}.`);
const acik = Y.filter((y) => y.kenar.every((e) => !kesilir(e)));
for (const y of acik) console.log(`acik kalan yol: ${y.iz.join(" > ")}`);
sorumluluk matrisi MODELI: 9 kalem turu x 3 gorev = 27 hucre; 5 rol, 20 adim, 30 yol.

1. hangi hucrenin sahibi var (dis = paylasilan sorumluluk sinirinin otesi)
kalem turu                    bul             kapat               surdur
ag-kurali                 isletim    isletim+mimari            operasyon
kimlik-yetkisi          operasyon           isletim  operasyon+yonetisim
uygulama-denetimi          sinama            mimari                    -
envanter-kaydi                  -           isletim                    -
veri-siniflandirmasi    yonetisim  mimari+yonetisim            operasyon
yedek-yolu                      -           isletim                    -
yama-dizeyi             operasyon           isletim            operasyon
saha-donanimi                   -           isletim                    -
ucuncu-taraf-maddesi    yonetisim               dis                  dis
hucre dagilimi: tek sahip 15, sahipsiz 7, iki sahip 3, dis 2.

2. rol basina yuk
rol                      hucre       yol
operasyon                    6        26
sinama                       1        18
mimari                       3        25
yonetisim                    4        22
isletim                      7        23

3. yol duzeyinde sonuc (rol sinirini yazmak 10 hucre karari ister)
olcu                                mevcut      yazili
kapanan yol                             28          30
kalan yol                                2           0
kesilen adim                            11          12
duran mesru istek (gun)               2321        2135
iki onay isteyen kapatma                15           0
kapali kaldigi dogrulanmayan             5           0

en ucuz adimi kesilemedigi icin daha pahali adimdan kapanan yol: 12;
kesilemeyen kalem turleri: envanter-kaydi, yedek-yolu, saha-donanimi, ucuncu-taraf-maddesi.
acik kalan yol: tedarikci-ucu > yonetim-agi > yedek-ucu > okuma-deposu
acik kalan yol: tedarikci-ucu > yedek-ucu > okuma-deposu

Birinci tablo 27 hücreyi dört sınıfa ayırır: 15 tek sahipli, 7 sahipsiz, 3 iki sahipli, 2 dış. Kurum içi 25 hücrenin yalnız 15’inin tek bir sahibi vardır; onda birinden fazlası değil, tam %40’ı tanımsız ya da çift tanımlıdır.

Sahipsiz yedi hücre üç kalem türünde toplanır ve hepsi aynı yönde eksiktir: envanter-kaydi, yedek-yolu ve saha-donanimi kalemlerinin bul ve sürdür hücreleri boştur, kapat hücreleri doludur. Bu, kurumun bu üç kalemi değiştirmeyi bildiği ama izlemeyi kimseye vermediği anlamına gelir: envanter kaydını kim tutar, yedek yolunun var olduğunu kim bilir, saha donanımını kim listeler sorularının yazılı yanıtı yoktur. Bir kalemi değiştirebilmek onu yönetmek değildir; değişecek kalemin listede olması gerekir. uygulama-denetimi kaleminde de sürdür hücresi boştur: denetim kurulur ama kaldırıldığında bunu fark edecek bir rol yazılı değildir.

Üç iki sahipli hücre başka bir eksikliktir. ag-kurali kapatma hücresi işletim ile mimaride, veri-siniflandirmasi kapatma hücresi mimari ile yönetişimde, kimlik-yetkisi sürdürme hücresi operasyon ile yönetişimdedir. Bu hücreler boş değildir, fakat her değişiklik iki ayrı onaydan geçer.

İkinci tablo rol başına yükü verir ve iki sütunu birbirini tutmaz. isletim 7 hücreyle en yüklü roldür ama güvenlik ekibinin parçası değildir: adımı gerçekten kesen eldir. sinama yalnız 1 hücrenin sahibidir; buna karşılık 18 yolun kapanması onun bulduğu kaleme bağlıdır. Hücre sayısı bir rolün ne kadar iş yaptığını ölçmez, kaç yolun ondan geçtiğini ölçmez de: iki sütun ayrı sorulara yanıt verir. Aynı yolun birden çok rolde sayılması da bundandır — bir yolun kapanması genellikle üç görevin üçünde de bir sahip ister.

Sahipsizliğin Yol Düzeyindeki Bedeli

Üçüncü tablo hücre sayımını yol kümesine indirir. Mevcut dağılımda 28 yol kapanır, 2 yol açık kalır. Açık kalan iki yol çıktının son satırlarındadır ve ikisi de üçüncü taraf ucundan yedek ucu üzerinden okuma deposuna gider. Üzerlerindeki her adım ya sınırın öte yanındadır ya da hiçbir rolün listesindedir — bir yolun açık kalması için üzerindeki adımların hepsinin sahipsiz olması gerekir ve burada tam olarak bu olmuştur.

Asıl bedel açık kalan yollarda değil, kapanan yolların nasıl kapandığındadır. Çıktının sondan üçüncü satırı bunu yazar: 12 yol en ucuz adımından kapatılamaz, çünkü o adımın kalemi hiçbir rolün listesinde değildir. Savunma bir sonraki kesilebilir adıma kayar ve o adım daha çok meşru iş taşır. Duran meşru istek mevcut dağılımda günde 2.321, rol sınırı yazıldığında 2.135’tir. Aradaki 186 istek hiçbir güvenlik kazancı karşılığı değildir; yalnız kesilecek adımın seçilememesinin bedelidir.

iki onay isteyen kapatma satırı çakışmanın bedelini verir: 15 kapatma iki ayrı onay adımı kazanır. Otuz yolun yarısı, iki rolün de sahiplendiği bir kalem üzerinden kapandığı için iki kez karar gerektirir. Çakışma bir yolu açık bırakmaz; kapanmayı yavaşlatır ve her değişikliği iki kata çıkarır.

kapali kaldigi dogrulanmayan satırı üçüncü kalemi verir: 5 yol kapanır ama kapalı kaldığını doğrulayan bir rol yoktur. Bu yollar tabloda kapalı sayılır. Bir sonraki yapılandırma değişikliğinde yeniden açılırlarsa bunu fark edecek yazılı bir sahip yoktur — sürdürme hücresinin boş olması, kapatmanın ölçüsüz olması demektir.

Sınırı Yazmanın Bedeli

yazili sütunu on hücre kararının sonucudur: yedi sahipsiz hücreye birer sahip atanır, üç çakışan hücrede tek sahip bırakılır. Kapanan yol 28’den 30’a çıkar, açık kalan yol sıfırlanır, duran meşru istek 2.321’den 2.135’e iner, iki onay isteyen kapatma 15’ten 0’a, doğrulanmayan yol 5’ten 0’a düşer.

Bu on karar teknik bir çalışma değildir. Yeni bir denetim kurulmaz, yeni bir adım kesilmez, grafta hiçbir şey değişmez; yalnız on hücreye birer ad yazılır. Karşılığında iki yol daha kapanır ve günde 186 meşru istek daha az durur.

Ölçüm bir uyarı da taşır. Sahipsiz hücrelerin tamamı bul ve sürdür sütunlarındadır, hiçbiri kapat sütununda değildir. Kurumlar yapacak eli tanımlamayı kolay bulur; listeyi tutan ve sonucun kalıcı olduğunu doğrulayan eli tanımlamayı atlar. Bir sorumluluk matrisinin en çok atlanan hücresi işin yapıldığı hücre değil, işin gerekliliğini fark eden ve sonucunu sınayan hücredir.

Özet

  • 27 hücrelik sorumluluk matrisinde 15 hücrenin tek sahibi vardır; 7 hücre sahipsiz, 3 hücre iki sahipli, 2 hücre paylaşılan sorumluluk sınırının öte yanındadır. Kurum içi 25 hücrenin %40’ı tanımsız ya da çift tanımlıdır.
  • Sahipsiz yedi hücrenin tamamı bul ve sürdür sütunlarındadır. Kalemi değiştirecek el yazılıdır; kalemi listede tutacak ve kapalı kaldığını sınayacak el yazılı değildir.
  • Rol başına hücre sayısı ile yol sayısı birbirini tutmaz: sınama tek hücrenin sahibidir ama 18 yolun kapanması onun bulduğu kaleme bağlıdır.
  • Mevcut dağılımda 28 yol kapanır, 2 yol açık kalır; kapanan yolların 12’si en ucuz adımından kapatılamadığı için daha pahalı bir adımdan kapanır ve günde 186 fazla meşru istek durur.
  • 15 kapatma iki onay adımı kazanır, 5 yol kapalı kaldığı doğrulanmadan kapalı sayılır. Sınırı yazmak on hücre kararıdır ve bu üç sayıyı sırasıyla 30, 0 ve 0 yapar.

Sonraki Adım

Rol sınırını yazmak on hücreyi kapattı ve iki yolu daha kapanır hâle getirdi. Yine de matrisin iki hücresi baştan sona dis kaldı ve bu ders onlara hiç dokunmadı: üçüncü taraf maddesinin kapatma ve sürdürme hücreleri kurum içinde bir sahip almaz.

O iki hücrenin nedeni teknik değildir. Bir adımı kesmek, bir yolu sınamak, bir kalemi listeye almak — hepsi birinin o sistem üzerinde işlem yapma yetkisine bağlıdır ve o yetki bir tabloyla değil bir yazıyla verilir. Bir sonraki ders bu yetkiyi sayılabilir kalem olarak kurar: yazılı kapsamda kaç varlık var, kapsamın dışında kaç varlık aynı ağda duruyor ve kapsam belirsizliği kaç kalemi tartışmaya açık bırakıyor.

İ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