---
title: 'Güvenlik Çerçeveleri'
source: 'https://academia.sh/tr/kurslar/yonetisim-risk-uyumluluk/guvenlik-cerceveleri'
course: 'Yönetişim, Risk ve Uyumluluk'
language: tr
updated: '2026-08-17T18:08:36+00:00'
license: 'CC BY-SA 4.0'
---

# Güvenlik Çerçeveleri

İşlev tabanlı çerçevenin yapısı ve kurgu bir kontrol kümesinde olgunluk hesabı: 5 işlev, 14 kategori ve 31 kontrol kaleminde genel olgunluğun 1,35 çıkması, 5 kontrolün düzey 0'da durması ve bir kategorinin hiçbir işleyen kontrole sahip olmaması, 31 kontrolün 15'inin kanıt üretmesi ve 25 kanıt kalemi vermesi, 45 adam-günlük bütçede boşluk önceliğiyle verim önceliğinin beş işlevi de farklı sıralaması ve verim sırasının ortalamayı 0,07 yükseltirken en zayıf işlevi 0,33 geride bırakması.

Önceki konu bir liste bıraktı: kalemler sıralandı, seçenekler bedeliyle yarıştırıldı ve kıt
bütçenin hangi kaleme gideceği sayıyla gerekçelendirildi. O listenin kurum içinden görünmeyen bir
kusuru vardır — tamamı kurumun kendi dilinde yazılmıştır. Ölçütleri kurum seçti, ağırlıkları kurum
verdi, sıralamayı kurum çıkardı. Dışarıdan bakan biri, bir alıcı, bir sigortacı ya da hizmeti satın
alan başka bir kurum "güvenlik durumunuzu gösterin" dediğinde bu liste yanıt olmaz: karşı tarafın
onu kendi listesiyle yan yana koyabileceği ortak bir eksen yoktur.

**Güvenlik çerçevesi** (security framework) o eksendir. Bir kurumun yaptığı güvenlik işini, kimin
yaptığından ve hangi araçla yaptığından bağımsız olarak sayılabilir başlıklara bölen ortak bir
sınıflandırmadır. Bu ders çerçeveyi **yapısıyla** ele alır ve tek bir soruya bağlar: aynı kontrol
kümesi bu yapıya oturtulduğunda hangi sayı çıkıyor, o sayı neyi gösteriyor, neyi saklıyor. Ders
boyunca hiçbir çerçeve, standart ya da kurum adı geçmez; ölçülen şey ad değil, yapının kendisidir.

## İşlev, Kategori, Kontrol

**İşlev tabanlı çerçeve** üç katmanlıdır. En üstte **işlev** durur ve güvenlik işini birbirini
izleyen beş başlığa böler: **kimlik** (neye sahibim, hangi riski taşıyorum), **koruma** (erişimi
neyle daraltıyorum), **tespit** (olan biteni nasıl görüyorum), **yanıt** (görünce ne yapıyorum) ve
**kurtarma** (sonrasında nasıl ayağa kalkıyorum). Her işlev **kategori**lere, her kategori tek tek
**kontrol**lere ayrılır. Bu bölünmenin işlevi şudur: farklı iki kurumun farklı araçlarla yaptığı
işler aynı beş başlığa düşer, böylece iki kurum aynı tabloda karşılaştırılabilir.

İkinci katman **olgunluk düzeyi**dir (maturity level) ve kontrolün varlığını değil, **ne kadar
kurumsallaştığını** ölçer. Bu ayrım dersin ana kavramıdır: bir kontrolün var olması ile denetlenebilir
biçimde işlemesi aynı şey değildir. Aşağıdaki model beş düzey kullanır — yok, belgesiz yapılıyor,
belgeli, ölçülüyor, sürekli iyileştiriliyor.

- **CE1.** Örnek kurum, dokuz kurs boyunca sürdürülen kurgu **bölgesel ölçüm ağı**dır: uç noktalar,
  ağ, kimlik, kiralanan hesaplar ve üç tedarikçi. Kontrol kümesi ve düzeyler **kurgudur**.
- **CE2.** Çerçeve beş işlev, on dört kategori ve otuz bir kontrol kaleminden oluşur.
- **CE3.** Olgunluk düzeyi 0–4 aralığındadır: 0 yok, 1 belgesiz yapılıyor, 2 belgeli, 3 ölçülüyor,
  4 sürekli iyileştiriliyor.
- **CE4.** Kategori olgunluğu kontrollerinin, işlev olgunluğu kategorilerinin **ağırlıksız
  ortalamasıdır**; genel olgunluk beş işlevin ortalamasıdır.
- **CE5.** Bir kontrolü bir düzey yükseltmek `2 + 3 × mevcut düzey` adam-gün tutar: düşük düzeyden
  çıkmak ucuz, yüksek düzeyi taşımak pahalıdır.
- **CE6.** Kanıt üretimi düzeye bağlıdır: düzey 2'den itibaren bir belge, düzey 3'ten itibaren iki
  ölçüm kaydı daha üretilir. Düzey 0 ve 1 hiçbir kanıt kalemi üretmez.

```js
// cerceve/olgunluk.mjs — islev tabanli cercevede olgunluk duzeyinin hesaplanmasi.
// MODELDIR: bolgesel olcum agi (kurgu); kontrol kumesi ve duzeyler kurgudur.
export const satir = (s) => s.trim().split("\n").map((l) => l.trim().split("|"));
export const gen = (B) => (...h) => h.map((v, j) =>
  (j ? String(v).padStart(B[j]) : String(v).padEnd(B[0]))).join("");

// islev | kategori | kategorideki kontrollerin olgunluk duzeyleri (0-4)
export const KATEGORI = satir(`
  kimlik|varlik envanteri|3 2 1
  kimlik|is baglami|2 2
  kimlik|risk degerlendirmesi|3 2
  koruma|erisim denetimi|3 3 2
  koruma|veri guvenligi|3 2 2
  koruma|bakim ve yama|2 1
  tespit|surekli izleme|2 1 1
  tespit|olay ayirdetme|1 0
  yanit|yanit plani|2 1
  yanit|bildirim|1 0
  yanit|azaltma|1 1
  kurtarma|kurtarma plani|1 0
  kurtarma|iyilestirme|0 0
  kurtarma|iletisim|1`)
  .map(([islev, ad, d]) => ({ islev, ad, duzey: d.split(" ").map(Number) }));

export const ISLEV = ["kimlik", "koruma", "tespit", "yanit", "kurtarma"];
export const kategoriler = (i) => KATEGORI.filter((k) => k.islev === i);
export const kOrt = (k) => k.duzey.reduce((a, b) => a + b, 0) / k.duzey.length;
export const iOrt = (i) => kategoriler(i).reduce((a, k) => a + kOrt(k), 0) / kategoriler(i).length;
// Bir kontrolu bir duzey yukseltmek 2 + 3 x mevcut duzey adam-gun tutar (kurgu).
export const gun = (d) => 2 + 3 * d;
// Kanit: duzey 2'den itibaren 1 belge, duzey 3'ten itibaren 2 olcum kaydi daha.
export const kanit = (d) => (d >= 2 ? 1 : 0) + (d >= 3 ? 2 : 0);

if (import.meta.url === `file://${process.argv[1]}`) {
  const kontrol = KATEGORI.flatMap((k) => k.duzey);
  console.log(`model: ${ISLEV.length} islev, ${KATEGORI.length} kategori, ` +
    `${kontrol.length} kontrol kalemi`);

  const y = gen([10, 9, 8, 10, 22, 9]);
  console.log("\n" + y("islev", "kategori", "kontrol", "olgunluk", "en zayif", "duzey 0"));
  for (const i of ISLEV) {
    const c = kategoriler(i), d = c.flatMap((k) => k.duzey);
    const enZayif = c.reduce((a, k) => (kOrt(k) < kOrt(a) ? k : a));
    console.log(y(i, c.length, d.length, iOrt(i).toFixed(2),
      `${enZayif.ad} ${kOrt(enZayif).toFixed(1)}`, d.filter((x) => x === 0).length));
  }
  const hepsi = KATEGORI.flatMap((k) => k.duzey);
  const genelOrt = ISLEV.reduce((a, i) => a + iOrt(i), 0) / ISLEV.length;
  const isleyensiz = KATEGORI.filter((k) => k.duzey.every((d) => d === 0));
  console.log(`\ngenel olgunluk ${genelOrt.toFixed(2)}; duzey 0 kontrol ` +
    `${hepsi.filter((d) => d === 0).length}/${hepsi.length}; ` +
    `hicbir isleyen kontrolu olmayan kategori ${isleyensiz.length} ` +
    `(${isleyensiz.map((k) => k.ad).join(", ")})`);
  console.log(`kanit ureten kontrol ${hepsi.filter((d) => d >= 2).length}/${hepsi.length}; ` +
    `uretilen kanit kalemi ${hepsi.reduce((a, d) => a + kanit(d), 0)}`);

  // Bir duzey yukseltmenin islev olgunluguna kazanci: 1 / (kategori x kontrol).
  const z = gen([10, 9, 14, 24, 11]);
  console.log("\n" + z("islev", "olgunluk", "olgunluk sira", "en ucuz +1", "verim sira"));
  const verim = ISLEV.map((i) => {
    const c = kategoriler(i);
    const en = c.flatMap((k) => k.duzey.map((d) =>
      ({ ad: k.ad, kazanc: 1 / (c.length * k.duzey.length) / gun(d), d })))
      .reduce((a, b) => (b.kazanc > a.kazanc ? b : a));
    return { i, ort: iOrt(i), en };
  });
  const sO = [...verim].sort((a, b) => a.ort - b.ort).map((v) => v.i);
  const sV = [...verim].sort((a, b) => b.en.kazanc - a.en.kazanc).map((v) => v.i);
  for (const v of verim) {
    console.log(z(v.i, v.ort.toFixed(2), sO.indexOf(v.i) + 1,
      `${v.en.ad} ${gun(v.en.d)} gun`, sV.indexOf(v.i) + 1));
  }
  const ayni = sO.filter((i, k) => i === sV[k]).length;
  console.log(`\nolgunluk sirasi: ${sO.join(" > ")}`);
  console.log(`verim sirasi   : ${sV.join(" > ")}`);
  console.log(`ayni sirada kalan islev: ${ayni}/${ISLEV.length}`);
}
```

```
model: 5 islev, 14 kategori, 31 kontrol kalemi

islev      kategori kontrol  olgunluk              en zayif  duzey 0
kimlik            3       7      2.17  varlik envanteri 2.0        0
koruma            3       8      2.17     bakim ve yama 1.5        0
tespit            2       5      0.92    olay ayirdetme 0.5        1
yanit             3       6      1.00          bildirim 0.5        1
kurtarma          3       5      0.50       iyilestirme 0.0        3

genel olgunluk 1.35; duzey 0 kontrol 5/31; hicbir isleyen kontrolu olmayan kategori 1 (iyilestirme)
kanit ureten kontrol 15/31; uretilen kanit kalemi 25

islev      olgunluk olgunluk sira              en ucuz +1 verim sira
kimlik         2.17             4  varlik envanteri 5 gun          5
koruma         2.17             5     bakim ve yama 5 gun          4
tespit         0.92             2    olay ayirdetme 2 gun          1
yanit          1.00             3          bildirim 2 gun          2
kurtarma       0.50             1    kurtarma plani 2 gun          3

olgunluk sirasi: kurtarma > tespit > yanit > kimlik > koruma
verim sirasi   : tespit > yanit > kurtarma > koruma > kimlik
ayni sirada kalan islev: 0/5
```

Birinci tablo çerçevenin asıl işini yapıyor: otuz bir dağınık kontrol kalemi beş sayıya iniyor ve
beş sayı **karşılaştırılabilir**. Kurumun dağılımı çarpıktır — koruma ve kimlik 2,17, kurtarma
0,50. Dokuz kursun bıraktığı tablo tam olarak budur: erişimi daraltmak, verinin okunduğunda ne
göstereceğini değiştirmek ve sınırı çekmek üzerine çok iş yapılmış, olaydan sonra ayağa kalkmak
üzerine az iş yapılmıştır. Bu çarpıklık ancak beş başlık ayrı ayrı yazıldığında görünür.

Genel olgunluk 1,35'tir ve bu sayı tek başına verildiğinde yanıltır. İki nedenle: birincisi,
**ortalama en zayıf halkayı yutar** — kurtarma işlevi ortalamanın üçte biri kadar bir değerdeyken
genel sayı orta bir yerde durur. İkincisi, ortalama bir kontrolün **hiç bulunmadığı** durumla
**düşük düzeyde bulunduğu** durumu ayırmaz. Son sütun bu ayrımı yapıyor: otuz bir kontrolün beşi
düzey 0'dadır ve bir kategori — iyileştirme — hiçbir işleyen kontrole sahip değildir. Bu tek satır,
"kurtarma olgunluğumuz 0,50" cümlesinden farklı bir karar doğurur, çünkü bir kategorinin tamamen
boş olması bir yavaşlık değil, bir **boşluktur**.

Üçüncü sayı kanıt tarafını açar ve sonraki iki dersin girdisidir. Otuz bir kontrolün on beşi
kanıt üretiyor, üretilen kanıt kalemi yirmi beştir. Düzey 0 ve 1'deki on altı kontrol ise
denetimde **hiçbir şey gösteremez**: yapılıyor olabilir, ama yapıldığını ortaya koyan bir kalem
yoktur. Olgunluk düzeyinin kanıtla bu kadar sıkı bağlı olması rastlantı değildir — düzey
tanımlarının kendisi belge ve ölçüm kaydı üzerinden yazılmıştır.

İkinci tablo kursun ölçü eksenini çerçeveye taşıyor. Sol taraf işlevleri olgunluğa göre sıralıyor:
en zayıf olan kurtarma birinci sırada. Sağ taraf ise aynı işlevleri **birim çabaya düşen olgunluk
kazancına** göre sıralıyor. İki sıra hiçbir işlevde çakışmıyor. Nedeni yapısaldır: bir işlevin
olgunluğuna yapılan katkı, o işlevin kategori sayısına ve kategorideki kontrol sayısına bölünür.
Tespit iki kategorilidir, bu yüzden oradaki bir yükseltme kurtarmadaki bir yükseltmeden daha çok
oynatır — kurtarma en düşük olduğu hâlde verim sırasında üçüncüdür.

## Aynı Bütçe, İki Sıra

İki sıralamanın gerçek farkı, sabit bir bütçe harcandığında ortaya çıkar. Aşağıdaki dosya aynı
kontrol kümesini iki ayrı kuralla yükseltir: **boşluk önce** her adımda en düşük olgunluklu işlevin
en ucuz kalemini alır; **verim önce** genel olgunluğa birim gün başına en çok katkı veren kalemi
alır. Bütçe kırk beş adam-gündür ve kurgudur.

```js
// cerceve/butce.mjs — ayni cerceve iki farkli sirayla yukseltilir (kurgu butce).
import { KATEGORI, ISLEV, gen, gun, kanit } from "./olgunluk.mjs";

const BUTCE = 45;                                    // adam-gun (kurgu birim)
const kopya = () => KATEGORI.map((k) => ({ ...k, duzey: [...k.duzey] }));
const ort = (K, i) => { const c = K.filter((k) => k.islev === i);
  return c.reduce((a, k) => a + k.duzey.reduce((x, d) => x + d, 0) / k.duzey.length, 0) / c.length; };
const genel = (K) => ISLEV.reduce((a, i) => a + ort(K, i), 0) / ISLEV.length;
const kanitSay = (K) => K.flatMap((k) => k.duzey).reduce((a, d) => a + kanit(d), 0);
const sifir = (K) => K.flatMap((k) => k.duzey).filter((d) => d === 0).length;

// Aday yukseltme: kategori, kontrol, maliyet ve genel olgunluga kazanc.
const adaylar = (K) => K.flatMap((k, ki) => k.duzey.map((d, di) => ({ ki, di, d, k,
  maliyet: gun(d), kazanc: 1 / (ISLEV.length * K.filter((x) => x.islev === k.islev).length
    * k.duzey.length) })).filter((a) => a.d < 4));

function kostur(sec) {
  const K = kopya(); let kalan = BUTCE, adim = 0;
  for (;;) {
    const uygun = adaylar(K).filter((a) => a.maliyet <= kalan);
    if (!uygun.length) break;
    const a = sec(uygun, K);
    K[a.ki].duzey[a.di]++; kalan -= a.maliyet; adim++;
  }
  return { K, kalan, adim };
}

const YOL = [
  ["bosluk once", (u, K) => { const enDusuk = [...ISLEV].sort((a, b) => ort(K, a) - ort(K, b))[0];
    const ic = u.filter((a) => a.k.islev === enDusuk);
    return (ic.length ? ic : u).sort((a, b) => a.maliyet - b.maliyet || a.ki - b.ki)[0]; }],
  ["verim once", (u) => [...u].sort((a, b) =>
    b.kazanc / b.maliyet - a.kazanc / a.maliyet || a.ki - b.ki)[0]],
];

const y = gen([13, 9, 7, 8, 9, 7, 17]);
console.log(`butce ${BUTCE} adam-gun; baslangic genel olgunluk ` +
  `${genel(kopya()).toFixed(2)}, duzey 0 kontrol ${sifir(kopya())}, ` +
  `kanit kalemi ${kanitSay(kopya())}`);
console.log("\n" + y("sira", "yukselen", "kalan", "genel", "duzey 0", "kanit", "en zayif islev"));
const sonuc = {};
for (const [ad, sec] of YOL) {
  const { K, kalan, adim } = kostur(sec);
  const enZayif = [...ISLEV].sort((a, b) => ort(K, a) - ort(K, b))[0];
  sonuc[ad] = { K, enZayif };
  console.log(y(ad, adim, kalan, genel(K).toFixed(2), sifir(K), kanitSay(K),
    `${enZayif} ${ort(K, enZayif).toFixed(2)}`));
}

const z = gen([11, 12, 14, 14, 12]);
console.log("\n" + z("islev", "baslangic", "bosluk once", "verim once", "fark"));
for (const i of ISLEV) {
  const a = ort(sonuc["bosluk once"].K, i), b = ort(sonuc["verim once"].K, i);
  console.log(z(i, ort(kopya(), i).toFixed(2), a.toFixed(2), b.toFixed(2), (b - a).toFixed(2)));
}
const v = sonuc["verim once"].K;
const dokunulmayan = ISLEV.filter((i) => ort(v, i) === ort(kopya(), i));
console.log(`\nverim sirasi ${dokunulmayan.length} islevi hic yukseltmedi: ` +
  `${dokunulmayan.join(", ")}`);
console.log(`genel olgunluk farki ${(genel(v) - genel(sonuc["bosluk once"].K)).toFixed(2)}; ` +
  `en zayif islev farki ${(ort(v, sonuc["verim once"].enZayif) -
    ort(sonuc["bosluk once"].K, sonuc["bosluk once"].enZayif)).toFixed(2)}`);
```

```
butce 45 adam-gun; baslangic genel olgunluk 1.35, duzey 0 kontrol 5, kanit kalemi 25

sira          yukselen  kalan   genel  duzey 0  kanit   en zayif islev
bosluk once         12      0    1.77        0     32      tespit 1.50
verim once          11      2    1.83        0     32       yanit 1.17

islev         baslangic   bosluk once    verim once        fark
kimlik             2.17          2.17          2.17        0.00
koruma             2.17          2.17          2.33        0.17
tespit             0.92          1.50          1.83        0.33
yanit              1.00          1.50          1.17       -0.33
kurtarma           0.50          1.50          1.67        0.17

verim sirasi 1 islevi hic yukseltmedi: kimlik
genel olgunluk farki 0.07; en zayif islev farki -0.33
```

İki satır aynı kırk beş günü harcıyor ve ikisi de düzey 0'daki beş kontrolü sıfırdan çıkarıyor;
kanıt kalemi ikisinde de yirmi beşten otuz ikiye çıkıyor. Ayrıldıkları yer son iki sütundur. Verim
sırası genel olgunluğu 1,83'e taşıyor, boşluk sırası 1,77'de kalıyor — arada 0,07 vardır ve tek
başına okunduğunda verim sırası kazanmış görünür. Ama en zayıf işleve bakıldığında iş tersine
döner: boşluk sırası en zayıf işlevi 1,50'ye kadar getiriyor, verim sırası 1,17'de bırakıyor. Fark
0,33'tür, yani ortalamada kazanılanın yaklaşık beş katı kadar bir kayıp en zayıf halkada
birikiyor.

Alt tablo bunun nedenini gösteriyor. Verim sırası yanıt işlevini boşluk sırasından 0,33 geride
bırakıyor ve kimlik işlevine hiç dokunmuyor. Kural bunu bilerek yapıyor: kimlikteki bir yükseltme
beş gün tutuyor ve az oynatıyor, tespitteki iki gün tutuyor ve çok oynatıyor. **Verim ölçüsü bir
kalemin ne kadar kritik olduğunu değil, ölçüyü ne kadar oynattığını sorar.** Bu ders için sonuç
biçimseldir: olgunluk sayısı bir hedef hâline geldiğinde, sayıyı en ucuza yükselten sıra ile
boşluğu kapatan sıra ayrışır ve ikisi aynı bütçeyle farklı kurumlar üretir.

Buradan çıkan üçüncü gözlem çerçevenin kendisiyle ilgilidir. Ağırlıksız ortalama (CE4) bir
tercihtir, kaçınılmaz değildir: kategori sayısı az olan işlev, kalem başına daha çok oynar. Ölçüyü
kuran kural, ölçünün hangi kalemi öne alacağını da kurar. Bir çerçeve raporunda yalnız beş sayı
görünüyorsa, o beş sayının nasıl toplandığı da sorulmalıdır.

## Özet

- İşlev tabanlı çerçeve üç katmanlıdır — işlev, kategori, kontrol — ve otuz bir dağınık kalemi
  karşılaştırılabilir beş sayıya indirir: kimlik ve koruma 2,17, yanıt 1,00, tespit 0,92,
  kurtarma 0,50.
- Genel olgunluk 1,35'tir ve iki şeyi saklar: en zayıf işlevi yutar, "yok" ile "düşük"ü ayırmaz.
  Otuz bir kontrolün beşi düzey 0'dadır ve bir kategorinin hiçbir işleyen kontrolü yoktur.
- Kanıt üretimi düzeye bağlıdır: otuz bir kontrolün yalnız on beşi kanıt üretiyor ve toplam yirmi
  beş kalem veriyor; düzey 0 ve 1'deki on altı kontrol denetimde hiçbir şey gösteremez.
- İşlevleri olgunluğa göre sıralamakla birim çabaya düşen kazanca göre sıralamak beş işlevin
  hiçbirinde aynı sonucu vermiyor; kurtarma en düşük olduğu hâlde verim sırasında üçüncüdür.
- Kırk beş adam-günlük bütçede verim sırası genel olgunluğu 0,07 daha yükseltiyor ama en zayıf
  işlevi 0,33 geride bırakıyor ve bir işleve hiç dokunmuyor: sayıyı yükseltmekle boşluğu kapatmak
  aynı iş değildir.

## Sonraki Adım

Çerçeve ortak bir eksen kurdu ve dağınık kontrolleri karşılaştırılabilir sayılara indirdi. Bu
sayıların hepsinin ortak bir özelliği var: **kurumun kendisi hesapladı.** Düzeyleri kurum atadı,
ortalamayı kurum aldı, hangi kalemin yükseltileceğine kurum karar verdi. Dışarıdan bakan biri için
bu, önceki konudaki listeden yalnız bir adım ilerdedir — dil ortaklaştı, ama sayıyı üreten taraf
değişmedi.

Sonraki ders bu adımı atan yapıyı ele alır: kapsamı bildirilen, hangi kontrolün neden uygulanıp
neden uygulanmadığı yazılan, iç denetimden geçen ve **dışarıdan bir tarafça belgelendirilen**
yönetim sistemi modelini. Ölçülecek şey belgenin kendisi değil, kapsam bildirimidir: kapsamı
daraltmak belgeyi ucuzlatır ve aynı hareketle kaç kalemi belgenin dışında bırakır.
