---
title: 'Anahtar ve Sır Yönetimi'
source: 'https://academia.sh/tr/kurslar/bulut-guvenligi/anahtar-ve-sir-yonetimi'
course: 'Bulut ve Sanallaştırma Güvenliği'
language: tr
updated: '2026-08-17T18:08:35+00:00'
license: 'CC BY-SA 4.0'
---

# Anahtar ve Sır Yönetimi

Anahtar sahipliğinin yayılma yarıçapına etkisi üç kipte koşturulur: sağlayıcı anahtarında sızan kimlik 16 kalem okur, müşteri yönetilen anahtarda yine 16, müşteri tutulan anahtarda 11. Tek bir anahtar iznini zincirin dışına almak yönetilen kipte 16'yı 6'ya, tutulan kipte 11'i 3'e indirir ve günde 1 meşru işlemi durdurur. Sır deposu okunduğunda yürüyüşe 4 kimlik ekleniyor.

Önceki derste açık bir dosyanın içeriği okunabilir sayıldı. Kayıtlar diskte şifreliydi, ama okuma
izni olan özne için bu bir engel olmadı — çözme, okuma isteğinin bir parçası olarak sağlayıcı
tarafında yapıldı. Sorulmayan soru şudur: çözme anahtarı kimde duruyorsa yarıçap değişir mi.

Bu ders yalnız onu ölçer. Bulut Yönetişimi, Güvenlik ve Maliyet kursu beklemede ve aktarımda
şifrelemeyi, zarf şifrelemesini ve döndürme penceresini ölçtü; burada şifreleme mekaniğinin
hiçbiri tekrarlanmaz. Ölçülen tek şey **anahtar sahipliğinin okunabilen kalem sayısına
etkisidir**. İkinci yarıda sır deposu ele alınıyor ve bu dersin ikinci bulgusu çıkıyor: sır
deposu yürüyüşte bir kalem değil, bir
**kenar kaynağıdır**.

- **BG23.** Üç **sahiplik kipi** vardır. `saglayici`: anahtar sağlayıcının elindedir ve çözme, okuma
  isteğinin parçası olarak yapılır. `yonetilen`: anahtar müşterinindir ve anahtar yönetimi
  servisinde durur; çözme için ayrı bir **anahtar kullanma izni** gerekir. `tutulan`: anahtar
  kiralanan altyapının dışındadır ve sızan bir bulut kimliği ona ulaşamaz.
- **BG24.** Anahtar kullanma izni erişim izninden **ayrı** bir kümedir. Bir kimlik bir kaleme
  erişebilirken onun anahtarını kullanamayabilir.
- **BG25.** Her kalem en güçlü hangi kipi desteklediğini yazar. Sunucu tarafında çözen bir yönetilen
  hizmet `tutulan` kipini destekleyemez; bu bir model kararıdır ve hizmet türünden gelir.
- **BG26.** Sır deposu okunabildiğinde içindeki her sır bir **kimlik** olur ve yürüyüş oradan devam
  eder. Sırların içeriği modellenmez, yalnız hangi kimliğe karşılık geldikleri sayılır.
- **BG27.** Yürüyüş bir sabit noktaya kadar koşar: kimlik kümesi büyüdükçe anahtar izni ve okunan
  kalem büyür, okunan kalem büyüdükçe kimlik kümesi büyür.

## Üç Kip, Üç Sayı

```js
// bulut/anahtar.mjs — anahtar sahipliginin yaricapa etkisi MODELIDIR. Sifreleme mekanigi, zarf
// sifrelemesi ve donderme penceresi bu derste yoktur; yalniz okunabilen kalem sayilir.

const ERISIM = {
  'hesap-toplayici': 'olcum-deposu olcum-kuyrugu',
  'hesap-dogrulayici': 'olcum-deposu olcum-kuyrugu ham-arsiv',
  'hesap-portal': 'abone-veritabani portal-varlik-deposu is-emri-kuyrugu',
  'hesap-rapor': 'rapor-deposu fatura-cikti-deposu gunluk-deposu',
  'rol-fatura': 'fatura-veritabani fatura-cikti-deposu posta-cikisi abone-veritabani',
  'rol-arsiv': 'ham-arsiv yedek-deposu',
  'rol-yedek': 'yedek-deposu fatura-veritabani abone-veritabani olcum-deposu',
  'rol-dagitim': 'dagitim-yapilandirmasi sablon-deposu ornek-yonetimi',
  'rol-gunluk': 'gunluk-deposu denetim-gunlugu',
  'rol-yonetim': 'ornek-yonetimi anahtar-yonetimi sir-deposu',
};
const USTLENME = [['hesap-toplayici', 'rol-arsiv'], ['hesap-dogrulayici', 'rol-arsiv'],
  ['rol-arsiv', 'rol-yedek'], ['rol-yedek', 'rol-yonetim'], ['hesap-portal', 'rol-fatura'],
  ['rol-fatura', 'rol-gunluk'], ['hesap-rapor', 'rol-gunluk'], ['rol-dagitim', 'rol-yonetim']];
// Kimligin anahtar kullanma izni: erisim izninden ayri bir kumedir.
export const ANAHTAR_IZNI = {
  'hesap-toplayici': 'k-olcum', 'hesap-dogrulayici': 'k-olcum', 'hesap-portal': 'k-abone',
  'hesap-rapor': 'k-fatura k-gunluk', 'rol-fatura': 'k-fatura k-abone', 'rol-arsiv': 'k-olcum',
  'rol-yedek': 'k-yedek', 'rol-dagitim': 'k-sir', 'rol-gunluk': 'k-gunluk',
  'rol-yonetim': 'k-sir',
};
// Kalem: sifreli mi, hangi anahtarla, en guclu destekledigi sahiplik kipi.
// Kipler: saglayici < yonetilen < tutulan. Yonetilen anahtar anahtar yonetimi servisinde durur,
// tutulan anahtar kiralanan altyapinin disindadir ve sizan kimlik ona ulasamaz.
export const KIP = ['saglayici', 'yonetilen', 'tutulan'];
export const KALEM = `
  olcum-deposu           k-olcum   tutulan
  ham-arsiv              k-olcum   tutulan
  yedek-deposu           k-yedek   tutulan
  fatura-cikti-deposu    k-fatura  tutulan
  rapor-deposu           k-fatura  tutulan
  dagitim-yapilandirmasi k-sir     tutulan
  abone-veritabani       k-abone   yonetilen
  fatura-veritabani      k-fatura  yonetilen
  gunluk-deposu          k-gunluk  yonetilen
  sir-deposu             k-sir     yonetilen
  denetim-gunlugu        k-gunluk  saglayici
  olcum-kuyrugu          -         -
  portal-varlik-deposu   -         -
  is-emri-kuyrugu        -         -
  posta-cikisi           -         -
  anahtar-yonetimi       -         -
  ornek-yonetimi         -         -
  sablon-deposu          -         -`
  .trim().split('\n').map((s) => {
    const [ad, anahtar, destek] = s.trim().split(/\s+/);
    return { ad, anahtar: anahtar === '-' ? null : anahtar, destek };
  });
export const bul = (ad) => KALEM.find((k) => k.ad === ad);
// Sir deposu okunursa icindeki sirlar birer kimliktir; yuruyus oradan devam eder.
export const SIRLAR = ['hesap-portal', 'rol-fatura', 'hesap-rapor'];

// Gunde kac mesru islem hangi anahtari kullaniyor: [kimlik, anahtar, gunde kullanim]
export const MESRU_ANAHTAR = [['hesap-toplayici', 'k-olcum', 1440],
  ['hesap-dogrulayici', 'k-olcum', 720], ['hesap-portal', 'k-abone', 3100],
  ['hesap-rapor', 'k-fatura', 40], ['hesap-rapor', 'k-gunluk', 12],
  ['rol-fatura', 'k-fatura', 260], ['rol-fatura', 'k-abone', 260],
  ['rol-arsiv', 'k-olcum', 96], ['rol-yedek', 'k-yedek', 4],
  ['rol-dagitim', 'k-sir', 6], ['rol-gunluk', 'k-gunluk', 88], ['rol-yonetim', 'k-sir', 1]];

// Sizan kimlikten okunabilen kalem: sabit nokta. Sir deposu okunursa kimlik kumesi buyur.
export function okunan(hedef, cikarilan = new Set()) {
  const kimlik = new Set(['hesap-toplayici']);
  const kapat = () => {                            // ustlenme kapanisi
    let n = -1;
    while (kimlik.size !== n) {
      n = kimlik.size;
      for (const k of [...kimlik]) for (const [a, b] of USTLENME) if (a === k) kimlik.add(b);
    }
  };
  let onceki = -1, kalem = new Set(), izin = new Set();
  while (kimlik.size !== onceki) {
    onceki = kimlik.size;
    kapat();
    izin = new Set([...kimlik].flatMap((k) => ANAHTAR_IZNI[k].split(' '))
      .filter((a) => !cikarilan.has(a)));
    kalem = new Set([...kimlik].flatMap((k) => ERISIM[k].split(' ')).filter((r) => {
      const x = bul(r);
      if (x.anahtar === null) return true;                       // sifresiz kalem
      const kip = KIP.indexOf(hedef) < KIP.indexOf(x.destek) ? hedef : x.destek;
      return kip === 'saglayici' || (kip === 'yonetilen' && izin.has(x.anahtar));
    }));
    if (kalem.has('sir-deposu')) for (const s of SIRLAR) kimlik.add(s);
  }
  return { kimlik, kalem, izin };
}
```

```js
// bulut/kosum1.mjs — uc sahiplik kipinde sizan kimligin okuyabildigi kalem
import { KALEM, KIP, bul, okunan } from './anahtar.mjs';

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 A = [-23, -10, -11, 12, 12, 10];
yaz(A, 'kalem', 'anahtar', 'destek', ...KIP);
const R = Object.fromEntries(KIP.map((k) => [k, okunan(k)]));
const gorulen = [...new Set(KIP.flatMap((k) => [...R[k].kalem]))].sort();
for (const r of gorulen.filter((x) => bul(x).anahtar))
  yaz(A, r, bul(r).anahtar, bul(r).destek, ...KIP.map((k) => R[k].kalem.has(r) ? 'okunur' : '-'));
yaz(A, `+ ${gorulen.filter((x) => !bul(x).anahtar).length} sifresiz kalem`, '', '',
  ...KIP.map(() => 'okunur'));
yaz(A, 'okunan kalem', '', '', ...KIP.map((k) => R[k].kalem.size));
console.log(`\nyuruyuse giren kimlik: ` + KIP.map((k) => `${k} ${R[k].kimlik.size}`).join(', '));
console.log('sizan kimligin zincirinden gelen anahtar izni: ' +
  [...R.tutulan.izin].sort().join(', '));
console.log(`sifresiz kalem ${KALEM.filter((k) => k.anahtar === null).length}/${KALEM.length}`);
```

```
kalem                  anahtar   destek        saglayici   yonetilen   tutulan
abone-veritabani       k-abone   yonetilen        okunur      okunur    okunur
denetim-gunlugu        k-gunluk  saglayici        okunur      okunur    okunur
fatura-cikti-deposu    k-fatura  tutulan          okunur      okunur         -
fatura-veritabani      k-fatura  yonetilen        okunur      okunur    okunur
gunluk-deposu          k-gunluk  yonetilen        okunur      okunur    okunur
ham-arsiv              k-olcum   tutulan          okunur      okunur         -
olcum-deposu           k-olcum   tutulan          okunur      okunur         -
rapor-deposu           k-fatura  tutulan          okunur      okunur         -
sir-deposu             k-sir     yonetilen        okunur      okunur    okunur
yedek-deposu           k-yedek   tutulan          okunur      okunur         -
+ 6 sifresiz kalem                                okunur      okunur    okunur
okunan kalem                                          16          16        11

yuruyuse giren kimlik: saglayici 8, yonetilen 8, tutulan 8
sizan kimligin zincirinden gelen anahtar izni: k-abone, k-fatura, k-gunluk, k-olcum, k-sir, k-yedek
sifresiz kalem 7/18
```

İlk iki sütun aynıdır: on altı. Anahtar müşteriye geçtiğinde okunabilen kalem sayısı hiç değişmiyor.
Nedeni son satırdan bir öncekidir — sızan kimliğin zinciri altı anahtar izninin **hepsini** taşıyor.
Sahiplik kipi çözmeyi bir izne bağlar; o izin de aynı zincirin üzerindeyse bağlama işe yaramaz.

Üçüncü sütun on bir veriyor. Düşen beş kalem `tutulan` kipini destekleyen kalemlerdir: ölçüm
deposu, ham arşiv, yedek deposu, fatura çıktı deposu ve rapor deposu. Kalan altısı destekleyemez,
çünkü çözme sunucu tarafında yapılan yönetilen hizmetlerdir.

İkinci satırdan bir öncesi de dikkat çeker. Yürüyüşe giren kimlik sayısı üç kipte de sekizdir —
oysa erişim grafiğinin kendisi dört kimlikle biterdi. Aradaki dört kimlik sır deposundan gelir ve
sır deposu üç kipte de okunabilir.

## Sahiplik Tek Başına Yetmiyor

Sahiplik kipi ile anahtar kullanma izni iki ayrı kaldıraçtır. İkisi ayrı ayrı ve birlikte
koşturuluyor.

```js
// bulut/kosum2.mjs — sahiplik kipi ile anahtar izninin birlikte etkisi; her ikisinin bedeli
import { KALEM, KIP, MESRU_ANAHTAR, SIRLAR, okunan } from './anahtar.mjs';

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 A = [-12, 16, 15, 13, 12];
yaz(A, 'sahiplik', 'k-sir zincirde', 'k-sir disinda', 'yuruyen', 'yuruyen');
yaz(A, 'kipi', 'okunan kalem', 'okunan kalem', 'kimlik', 'kimlik');
for (const k of KIP) {
  const a = okunan(k), b = okunan(k, new Set(['k-sir']));
  yaz(A, k, a.kalem.size, b.kalem.size, a.kimlik.size, b.kimlik.size);
}
const sirIs = MESRU_ANAHTAR.filter(([k, a]) => a === 'k-sir' && k === 'rol-yonetim')
  .reduce((x, [, , n]) => x + n, 0);
console.log(`\nk-sir iznini zincirdeki rolden almanin bedeli: gunde ${sirIs} mesru islem`);
console.log(`sir deposundaki sir sayisi ${SIRLAR.length}; okunursa yuruyuse giren ek kimlik ` +
  `${okunan('saglayici').kimlik.size - 4}`);
const sifreli = KALEM.filter((k) => k.anahtar);
const desteksiz = sifreli.filter((k) => k.destek !== 'tutulan');
console.log(`\ntutulan kipini ${sifreli.length} sifreli kalemin ${desteksiz.length}'i ` +
  'desteklemiyor:');
console.log('  ' + desteksiz.map((k) => k.ad).join(', '));
const dis = MESRU_ANAHTAR.filter(([, a]) =>
  sifreli.some((k) => k.anahtar === a && k.destek === 'tutulan'));
console.log(`disaridan anahtar teslimi gereken (is yuku, anahtar) cifti ${dis.length}; ` +
  `gunde ${dis.reduce((x, [, , n]) => x + n, 0)} islem bu yoldan geciyor`);
```

```
sahiplik      k-sir zincirde  k-sir disinda      yuruyen     yuruyen
kipi            okunan kalem   okunan kalem       kimlik      kimlik
saglayici                 16             16            8           8
yonetilen                 16              6            8           4
tutulan                   11              3            8           4

k-sir iznini zincirdeki rolden almanin bedeli: gunde 1 mesru islem
sir deposundaki sir sayisi 3; okunursa yuruyuse giren ek kimlik 4

tutulan kipini 11 sifreli kalemin 5'i desteklemiyor:
  abone-veritabani, fatura-veritabani, gunluk-deposu, sir-deposu, denetim-gunlugu
disaridan anahtar teslimi gereken (is yuku, anahtar) cifti 8; gunde 2567 islem bu yoldan geciyor
```

Tablo altı hücrelidir ve üçü karar taşır. Sağlayıcı satırında iki sütun aynıdır: on altı ve on
altı. Anahtar izniyle oynamak sağlayıcı anahtarında hiçbir şey değiştirmez, çünkü çözme için izin
sorulmaz — okuma izni düz metin demektir.

Yönetilen satırı bu dersin en keskin karşılaştırmasını verir. Anahtar müşteriye geçirildiğinde tek
başına yarıçap on altıda kalır. Aynı kipte tek bir anahtar izni — sır deposunun anahtarı — sızan
kimliğin zincirinden çıkarıldığında yarıçap **altıya** iner. Aynı sahiplik kipi, aynı grafik, iki
buçuk kattan fazla fark. Sahiplik yarıçabı düşürmez; sahibin izni kime verdiği düşürür.

Tutulan satırı da aynı yönde okunur: on birden üçe. Ama on bir ile on altı arasındaki fark beş
kalemdir ve bedeli ağırdır — beş şifreli kalem bu kipi hiç desteklemez ve sekiz `(iş yükü, anahtar)`
çifti dışarıdan anahtar teslimi gerektirir; günde iki bin beş yüz altmış yedi işlem o yoldan geçer.
Tek bir izni kaldırmanın bedeli ise günde bir meşru işlemdir.

## Altı Anahtar Tek Tek

Sır deposunun anahtarı örnek olarak seçildi. Altı anahtarın hepsi aynı ölçüden geçirilirse seçimin
neden bu olduğu görülür.

```js
// bulut/kosum3.mjs — tek tek anahtar izinleri: hangisini zincirden almak yaricabi ne kadar dusurur
import { ANAHTAR_IZNI, MESRU_ANAHTAR, okunan } from './anahtar.mjs';

const ANAHTAR = [...new Set(Object.values(ANAHTAR_IZNI).flatMap((s) => s.split(' ')))].sort();
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 A = [-10, 11, 11, 12, 13];
const taban = okunan('yonetilen').kalem.size;
yaz(A, 'anahtar', 'yonetilen', 'tutulan', 'yaricap', 'duran islem');
yaz(A, 'zincirden', 'kipinde', 'kipinde', 'dususu', 'gunde');
for (const a of ANAHTAR) {
  const c = new Set([a]);
  yaz(A, a, okunan('yonetilen', c).kalem.size, okunan('tutulan', c).kalem.size,
    taban - okunan('yonetilen', c).kalem.size,
    MESRU_ANAHTAR.filter(([, x]) => x === a).reduce((s, [, , n]) => s + n, 0));
}
const hepsi = new Set(ANAHTAR);
console.log(`\nhepsi cikarilirsa: yonetilen ${okunan('yonetilen', hepsi).kalem.size}, ` +
  `tutulan ${okunan('tutulan', hepsi).kalem.size}; ` +
  `gunde ${MESRU_ANAHTAR.reduce((s, [, , n]) => s + n, 0)} islem durur`);
```

```
anahtar     yonetilen    tutulan     yaricap  duran islem
zincirden     kipinde    kipinde      dususu        gunde
k-abone            15         10           1         3360
k-fatura           13         10           3          300
k-gunluk           15         10           1          100
k-olcum            14         11           2         2256
k-sir               6          3          10            7
k-yedek            15         11           1            4

hepsi cikarilirsa: yonetilen 3, tutulan 3; gunde 6027 islem durur
```

Beş anahtarın yarıçap düşüşü bir ile üç arasındadır; altıncısı ondur. `k-abone` günde üç bin üç yüz
altmış işlem taşır ve kaldırılırsa yarıçabı tek bir kalem düşürür. `k-sir` günde yedi işlem taşır
ve yarıçabı on kalem düşürür. Kalem başına bedel oranı arasında üç bin katın üzerinde fark vardır.

Bu tablodaki yedi rakamı bir önceki bölümün bir rakamıyla karıştırmamak gerekir: burada izin
**bütün kimliklerden** çıkarılıyor ve dağıtım rolünün günde altı işlemi de duruyor. Sızan kimliğin
zincirinde olan tek rolden almak yeterlidir ve bedeli günde bir işlemdir.

Son satır sınırı çiziyor: bütün anahtar izinleri çıkarılırsa yarıçap üçe iner ve günde altı bin
yirmi yedi işlem durur. Yani yarıçabı ondan üçe indirmenin yolu bütün izinleri kaldırmak değildir;
altıdan birini kaldırmak farkın büyük bölümünü verir.

## Sır Deposu Bir Kalem Değil

Sağdaki iki sütun neden bu kadar büyük bir fark çıktığını söylüyor. `k-sir` zincirdeyken yürüyüşe
sekiz kimlik giriyor; çıkarıldığında dört. Sır deposu okunduğunda içindeki üç sır üç kimliğe
karşılık geliyor ve üstlenme kapanışıyla birlikte dört yeni kimlik yürüyüşe katılıyor.

Bu, sır deposunun grafikteki yerini değiştirir. Öteki kalemler yürüyüşün **sonu**dur: okunur ve
orada biter. Sır deposu okunduğunda yürüyüşün yeni **kenarları** doğar — yani sır deposu bir kalem
değil, bir kenar kaynağıdır. Yarıçap ölçümünde ona bir kalem olarak bakmak sayıyı on altı yerine
dokuz gösterir.

Aynı nedenle ölçüm bir sabit nokta hesabıdır. Kimlik kümesi büyüdükçe anahtar izni büyür, anahtar
izni büyüdükçe okunan kalem büyür, okunan kalemde sır deposu varsa kimlik kümesi yeniden büyür.
Döngü ancak yeni kimlik gelmediğinde durur. Tek bir geçişte hesaplanan yarıçap bu modelde eksik
çıkar.

Önceki dersin bulgusuyla birleştirildiğinde sıra netleşir: bir yapılandırma dosyasında duran kimlik
referansı yarıçabı beş kalem büyütüyordu, sır deposunun okunabilmesi yedi kalem büyütüyor. İkisi de
küçük kalemlerdir ve ikisinin de zararı kendi içeriğinde değil, açtıkları kenarlardadır.

## Özet

- Anahtar sahipliği tek başına yarıçabı düşürmüyor: sağlayıcı anahtarında 16, müşteri yönetilen
  anahtarda yine 16 kalem okunuyor. Sızan kimliğin zinciri altı anahtar izninin hepsini taşıyor.
- Müşteri tutulan anahtar 16'yı 11'e indirir; düşen beş kalem bu kipi destekleyen kalemlerdir.
  11 şifreli kalemin 5'i sunucu tarafında çözdüğü için bu kipi hiç desteklemez.
- Tek bir anahtar iznini zincirin dışına almak yönetilen kipte 16'yı 6'ya, tutulan kipte 11'i 3'e
  indirir. Aynı sahiplik kipinde iki buçuk kattan fazla fark; bedeli günde 1 meşru işlemdir.
- Tutulan kipin bedeli ağırdır: 8 `(iş yükü, anahtar)` çifti dışarıdan anahtar teslimi ister ve
  günde 2.567 işlem o yoldan geçer.
- Sır deposu yürüyüşte bir kalem değil bir kenar kaynağıdır: okunduğunda 3 sır 3 kimliğe karşılık
  gelir ve kapanışla birlikte yürüyüşe 4 kimlik girer, kimlik sayısı 4'ten 8'e çıkar.
- Ölçüm bir sabit nokta hesabıdır; tek geçişte hesaplanan yarıçap bu modelde 9 çıkar, sabit
  noktada 16.

## Sonraki Adım

Beş ders boyunca yanlış kalemler tek tek bulundu: aşırı geniş bir güven listesi, kapatılmamış bir
genel uç, nesne düzeyinde unutulmuş bir izin, zincirin üzerinde duran bir anahtar izni. Hepsi
**çalışan sistemde** bulundu ve her biri bulunduğunda çoktan yerindeydi. Sorulmayan soru şudur:
bunların kaçı sisteme konmadan önce, şablonda görülebilirdi. Sonraki ders şablon kümesini bir kural
setinden geçiriyor ve dağıtımdan önce yakalanan kalemi ancak koşarken görülebilen kalemden ayırıyor.
