---
title: 'Sır Yönetimi Sistemleri'
source: 'https://academia.sh/tr/kurslar/sunucu-ve-sertlestirme/sir-yonetimi-sistemleri'
course: 'Sunucu, Ağ ve Sertleştirme'
language: tr
updated: '2026-08-17T18:09:10+00:00'
license: 'CC BY-SA 4.0'
---

# Sır Yönetimi Sistemleri

Sırrın ekseni ömürdür: statik sırda sızıntı penceresi sonsuzdur, ömrü belli kimlik bilgisinde ömür kadardır. Ömür taranır, yenileme yükü ve depo kesintisine dayanma sayılır, merkezî deponun kendi erişim yüzeyi kalem kalem çıkarılır.

Önceki dersin anahtarı iptal edilene kadar geçerliydi; ölçülemeyen tek kalem buydu. Uygulamaların
taşıdığı kimlik bilgileri için de aynısı geçerlidir: veri deposu kimliği, kuyruk anahtarı ve posta
geçidi belirteci kurulum günü yazılır ve ne zaman değişecekleri hiçbir yerde yazmaz. Sırların
üretimde nasıl saklandığı M22/K01'de, dağıtım hattının sırlara nasıl eriştiği M22/K04'te ölçüldü;
ikisi de burada tekrarlanmıyor. Buranın tek ekseni ömürdür — bir kimlik bilgisi ne kadar süre
geçerli kalıyor ve sızarsa pencere ne kadar açık duruyor.

- **ST13.** Beş sır, altı servis ve üç ortam kurgusal bölgesel ölçüm ağına aittir. Gerçek sır
  yazılmadı, adlar kurgusaldır; ölçülen şey `node` ile yazılan modeldir.
- **ST14.** Dönem otuz gün, yani 43.200 dakika sayıldı.
- **ST15.** Depo kesintisinde örneklerin kalan ömrü, ömür aralığına eşit aralıklarla dağıtıldı;
  rastgelelik yok. Gerçekte dağılım yenileme zamanlamasına bağlıdır, sonucun yönü değişmez.
- **ST16.** Bir kimlik bilgisi ya geçerlidir ya değil. Kısmi yetki, yenileme başarısızlığında
  yeniden deneme ve önbelleğe alınmış oturum modellenmiyor.
- **ST17.** Sırrın içeriği, üretilme biçimi ve şifrelenmesi ölçülmüyor. Ölçülen tek şey ömür ve
  erişim kalemidir.
- **ST18.** Merkezî depo tek bir yer olarak modellendi. Çoğaltılmış bir depo kesinti kalemini
  düşürür, erişim kalemini düşürmez.

## Statik Sır Düzeni

Model beş sırrı, sırlara ihtiyaç duyan altı servisi, üç ortamı ve statik düzende sırrın durduğu
yerleri tutuyor. Ömür listesi taranacak değerleri veriyor; `null` ömrü olmayan, yani statik sırrı
gösteriyor.

```js
// sir.mjs — sir kumesi, erisim matrisi ve omur modeli; gercek sir yok, adlar kurgusaldir
export const SIR = ['veri-deposu-kimligi', 'kuyruk-anahtari', 'posta-gecidi-belirteci',
  'olcut-yazma-anahtari', 'arsiv-anahtari'];
export const SERVIS = {                                  // servis -> ihtiyac duydugu sirlar
  'okuma-toplayici': ['veri-deposu-kimligi', 'kuyruk-anahtari'],
  'dogrulayici': ['veri-deposu-kimligi', 'kuyruk-anahtari'],
  'faturalama': ['veri-deposu-kimligi', 'posta-gecidi-belirteci'],
  'is-emri': ['veri-deposu-kimligi', 'kuyruk-anahtari', 'posta-gecidi-belirteci'],
  'gecelik-toplu-is': ['veri-deposu-kimligi', 'arsiv-anahtari'],
  'olcut-toplayici': ['olcut-yazma-anahtari'],
};
export const ORTAM = ['gelistirme', 'hazirlik', 'uretim'];
export const ORNEK = Object.keys(SERVIS).flatMap((s) => ORTAM.map((o) => ({ servis: s, ortam: o })));
export const STATIK_YER = ['yapilandirma-deposu', 'ortam-degiskeni', 'yedek-goruntusu', 'gelistirici-dizustu'];
export const DONEM_DK = 30 * 24 * 60;                    // otuz gunluk donem
export const OMUR = [5, 15, 60, 480, 1440, null];        // dakika; null = statik, omur yok
// Insan ve otomasyon ozneleri; hangi sirlara erisebildikleri.
export const OZNE = {
  'op-a': SIR, 'op-b': ['veri-deposu-kimligi', 'kuyruk-anahtari', 'arsiv-anahtari'],
  'op-c': ['posta-gecidi-belirteci'], 'dagitim': SIR, 'gozlem': ['olcut-yazma-anahtari'],
};
// Her sir dinamik uretilemez; ikinci alan gerekcedir.
export const DINAMIK = {
  'veri-deposu-kimligi': [true, 'depo hesabi istege gore acilip kapatilabilir'],
  'kuyruk-anahtari': [true, 'kuyruk gecici yetki verebiliyor'],
  'olcut-yazma-anahtari': [true, 'yazma yetkisi kisa sureli verilebilir'],
  'posta-gecidi-belirteci': [false, 'dis tarafca veriliyor, bizde uretilemez'],
  'arsiv-anahtari': [false, 'sifreleme anahtari; dondurulurse eski arsiv okunamaz'],
};
export const ornekKalem = () => ORNEK.reduce((a, o) => a + SERVIS[o.servis].length, 0);
export const ozneKalem = () => Object.values(OZNE).reduce((a, s) => a + s.length, 0);
export const dondurmeEtkisi = (s) => ORNEK.filter((o) => SERVIS[o.servis].includes(s)).length;
// Depo kesintisinde her ornegin kalan omru: aralik esit araliklarla bolundu, rastgelelik yok.
export const kalanOmur = (omur, n = ORNEK.length) =>
  Array.from({ length: n }, (_, i) => (omur * (i + 0.5)) / n);
```

```js
// kosum1.mjs — statik sir duzeninde kalemler ve dondurme maliyeti sayilir
import { SIR, SERVIS, ORTAM, ORNEK, STATIK_YER, ornekKalem, dondurmeEtkisi } from './sir.mjs';

for (const [ad, v, not = ''] of [
  ['sir', SIR.length],
  ['servis x ortam = ornek', ORNEK.length, `${Object.keys(SERVIS).length} servis, ${ORTAM.length} ortam`],
  ['(ornek, sir) kalemi', ornekKalem()],
  ['sirrin durdugu ayri yer', STATIK_YER.length, STATIK_YER.join(', ')],
  ['sir kopyasi (sir x yer)', SIR.length * STATIK_YER.length],
  ['sirrin omru', 'yok', 'kurulumdan beri degismedi'],
]) console.log(`${ad.padEnd(26)}${String(v).padStart(4)}  ${not}`.trimEnd());
console.log('\nbir sirri dondurmek kac ornegi yeniden baslatir:');
for (const s of SIR) console.log(`  ${s.padEnd(24)} ${dondurmeEtkisi(s)}`);
```

```
sir                          5
servis x ortam = ornek      18  6 servis, 3 ortam
(ornek, sir) kalemi         36
sirrin durdugu ayri yer      4  yapilandirma-deposu, ortam-degiskeni, yedek-goruntusu, gelistirici-dizustu
sir kopyasi (sir x yer)     20
sirrin omru                yok  kurulumdan beri degismedi

bir sirri dondurmek kac ornegi yeniden baslatir:
  veri-deposu-kimligi      15
  kuyruk-anahtari          9
  posta-gecidi-belirteci   6
  olcut-yazma-anahtari     3
  arsiv-anahtari           3
```

Beş sır, on sekiz servis örneğine dağıldığında otuz altı `(örnek, sır)` kalemi ediyor. Bunun
üstüne sırrın dört ayrı yerde durması geliyor: yapılandırma deposunda, çalışan sürecin ortam
değişkeninde, yedek görüntüsünde ve geliştirici dizüstünde. Beş sır çarpı dört yer, yirmi kopya.
Bu yerlerin ikisi — yedek görüntüsü ve dizüstü — erişim kaydı tutmaz; oradan okunan bir sırrın
okunduğu hiçbir yerde görünmez.

Alt blok döndürmenin neden yapılmadığını sayıyla veriyor. Veri deposu kimliği on beş örnekte
kullanılıyor; onu değiştirmek on beş örneği yeniden başlatmak demek ve bu on beş örnek üç ayrı
ortama yayılmış durumda. Döndürmenin maliyeti tam olarak döndürmemenin nedenidir. Sonuç, tabloda
"ömür: yok" satırıdır — sır kurulumdan beri aynıdır, dolayısıyla sızmışsa sızdığı günden beri
geçerlidir. Sızıntı penceresi burada bir süre değil, bir durumdur: birileri fark edene kadar açık.

## Ömür Taraması

```js
// kosum2.mjs — omur taranir: sizinti penceresi, yenileme yuku ve depo kesintisine dayanma
import { ORNEK, DONEM_DK, OMUR, kalanOmur } from './sir.mjs';

const d1 = (x) => (Math.round(x * 10) / 10).toFixed(1);
console.log('omur      sizinti penceresi  donemde     depo kesintisinde     30 dk kesintide');
console.log('(dk)      (ort. dk)          yenileme    ilk dusme / hepsi(dk) calisamayan ornek');
for (const omur of OMUR) {
  if (omur === null) {
    console.log(`${'statik'.padEnd(9)} ${'sonsuz'.padEnd(18)} ${String(0).padEnd(11)} ` +
      `${'-'.padEnd(21)} 0`);
    continue;
  }
  const kalan = kalanOmur(omur);
  console.log(`${String(omur).padEnd(9)} ${d1(omur / 2).padEnd(18)} ` +
    `${String(ORNEK.length * Math.round(DONEM_DK / omur)).padEnd(11)} ` +
    `${`${d1(kalan[0])} / ${d1(kalan[kalan.length - 1])}`.padEnd(21)} ${kalan.filter((k) => k < 30).length}`);
}
```

```
omur      sizinti penceresi  donemde     depo kesintisinde     30 dk kesintide
(dk)      (ort. dk)          yenileme    ilk dusme / hepsi(dk) calisamayan ornek
5         2.5                155520      0.1 / 4.9             18
15        7.5                51840       0.4 / 14.6            18
60        30.0               12960       1.7 / 58.3            9
480       240.0              1620        13.3 / 466.7          1
1440      720.0              540         40.0 / 1400.0         0
statik    sonsuz             0           -                     0
```

Tablo tek bir kararın üç ayrı sonucunu yan yana koyuyor. Beş dakikalık ömürde sızıntı penceresi
ortalama iki buçuk dakikaya iniyor — sızmış bir kimlik bilgisi neredeyse hiçbir işe yaramaz. Bedeli
sağdaki iki sütunda: dönemde yüz elli beş bin beş yüz yirmi yenileme ve depoda kesinti başladığında
ilk örneğin altı saniye içinde, hepsinin beş dakika içinde çalışamaz hâle gelmesi. Statik satırı
tam tersidir: sıfır yenileme, kesintiden hiç etkilenmeme ve sonsuz pencere.

Aradaki satırlar kararın gerçekten alındığı yerdir. Altmış dakikalık ömürde pencere yarım saate
iniyor, yenileme on iki bin dokuz yüz altmışa düşüyor, ama otuz dakikalık bir depo kesintisinde on
sekiz örneğin dokuzu çalışamaz hâle geliyor. Sekiz saatlik ömürde aynı kesintide yalnız bir örnek
düşüyor ve pencere dört saate çıkıyor. Yirmi dört saatlik ömürde kesinti hiçbir örneği düşürmüyor,
pencere on iki saat.

Sağdan ikinci sütun bu tablonun asıl bulgusudur: ömür, deponun kabul edilebilir kesinti süresini
belirliyor. Kesinti seçilen ömrün altında kaldığı sürece örneklerin çoğu ayakta kalır; kesinti ömrü
aştığında hepsi düşer. Yani "sızıntı penceresini kısaltalım" kararı, farkında olunmadan "deponun
kesintisiz çalışması gerekiyor" kararıdır. Beş dakikalık ömür seçildiğinde depo, on sekiz örneğin
hepsi için beş dakikadan uzun süre kaybolamayan bir bağımlılıktır — ve bu, hiçbir sırrın taşımadığı
yeni bir kullanılabilirlik kalemi getirir.

## Ömrü Kısaltılamayan Sırlar

Ömür taraması bütün sırların ömrünün seçilebildiğini varsayıyor. Beş sırdan kaçının ömrü gerçekten
seçilebilir, ayrı bir sayıdır.

```js
// kosum4.mjs — her sir dinamik uretilemez; omur ekseninin disinda kalan kalemler sayilir
import { SIR, SERVIS, ORNEK, DINAMIK, ornekKalem } from './sir.mjs';

console.log('sir                       dinamik  gerekce');
for (const s of SIR) console.log(`  ${s.padEnd(24)} ${(DINAMIK[s][0] ? 'evet' : 'hayir').padEnd(8)} ${DINAMIK[s][1]}`);
const statik = (s) => !DINAMIK[s][0];
const kalem = ORNEK.reduce((a, o) => a + SERVIS[o.servis].filter(statik).length, 0);
const ornek = ORNEK.filter((o) => SERVIS[o.servis].some(statik));
console.log('');
for (const [ad, v] of [
  ['omru kisaltilabilen sir', `${SIR.filter((s) => !statik(s)).length} / ${SIR.length}`],
  ['statik kalmak zorunda olan sir', `${SIR.filter(statik).length} / ${SIR.length}`],
  ['statik kalan (ornek, sir) kalemi', `${kalem} / ${ornekKalem()}`],
  ['en az bir statik sir tasiyan ornek', `${ornek.length} / ${ORNEK.length}`],
  ['bu orneklerde sizinti penceresi', 'sonsuz'],
]) console.log(`${ad.padEnd(36)}${v}`);
console.log(`\ntasiyan servisler: ${[...new Set(ornek.map((o) => o.servis))].join(', ')}`);
```

```
sir                       dinamik  gerekce
  veri-deposu-kimligi      evet     depo hesabi istege gore acilip kapatilabilir
  kuyruk-anahtari          evet     kuyruk gecici yetki verebiliyor
  posta-gecidi-belirteci   hayir    dis tarafca veriliyor, bizde uretilemez
  olcut-yazma-anahtari     evet     yazma yetkisi kisa sureli verilebilir
  arsiv-anahtari           hayir    sifreleme anahtari; dondurulurse eski arsiv okunamaz

omru kisaltilabilen sir             3 / 5
statik kalmak zorunda olan sir      2 / 5
statik kalan (ornek, sir) kalemi    9 / 36
en az bir statik sir tasiyan ornek  9 / 18
bu orneklerde sizinti penceresi     sonsuz

tasiyan servisler: faturalama, is-emri, gecelik-toplu-is
```

Üç sır için dinamik üretim mümkün: veri deposu hesabı istek üzerine açılıp kapatılabiliyor, kuyruk
geçici yetki verebiliyor, ölçüt yazma yetkisi kısa süreli tanımlanabiliyor. İki sır için mümkün
değil ve gerekçeleri farklı türden. Posta geçidi belirteci dış bir tarafça veriliyor; ömrünü
belirleyen taraf biz değiliz, dolayısıyla ömür ekseninde yapılabilecek bir şey yok. Arşiv anahtarı
ise bir şifreleme anahtarıdır; döndürüldüğünde eski arşiv okunamaz hâle gelir, yani ömrünü kısaltmak
sırrın işlevini bozar.

Sayılar tarama tablosunun kapsamını daraltıyor. Otuz altı `(örnek, sır)` kaleminin dokuzu ömür
ekseninin dışında kalıyor ve on sekiz örneğin dokuzu — faturalama, iş emri ve gecelik toplu iş — en
az bir statik sır taşımaya devam ediyor. Bu dokuz örnek için önceki bölümün bütün sütunları
geçersizdir: sızıntı penceresi ömür kadar değil, sonsuzdur. Beş dakikalık ömür seçilse bile sistemin
yarısı statik sır taşır. Ömür ekseni gerçek bir eksendir ama her sırra uygulanamaz ve
uygulanamayanlar tam olarak dışarıya bakan iki sırdır: posta geçidine giden belirteç ve arşivi açan
anahtar.

## Merkezî Deponun Kendi Yüzeyi

```js
// kosum3.mjs — merkezi deponun kendi yuzeyi: kac ozne kac sirra erisebiliyor
import { SIR, ORNEK, STATIK_YER, OZNE, ornekKalem, ozneKalem } from './sir.mjs';

console.log('ozne         erisebildigi sir');
for (const [o, s] of Object.entries(OZNE))
  console.log(`  ${o.padEnd(10)} ${String(s.length).padEnd(3)} ${s.length === SIR.length ? '(hepsi)' : s.join(', ')}`);
console.log(`  ${'servis'.padEnd(10)} ${ornekKalem()}  (${ORNEK.length} ornek, ortalama ${ornekKalem() / ORNEK.length} sir)`);
const toplam = ozneKalem() + ornekKalem();
console.log(`\nolcu                                 statik   merkezi depo`);
for (const [ad, a, b] of [
  ['sirrin durdugu ayri yer', STATIK_YER.length, 1],
  ['sir kopyasi', SIR.length * STATIK_YER.length, SIR.length],
  ['butun sirlari tasiyan nokta', STATIK_YER.length, 1],
  ['(ozne, sir) kalemi', toplam, toplam],
  ['kaydi tutulan ve iptal edilebilen', 0, toplam],
  ['butun sirlara erisen ozne', Object.values(OZNE).filter((s) => s.length === SIR.length).length,
    Object.values(OZNE).filter((s) => s.length === SIR.length).length],
  ['depo dustugunde yenileyemeyen ornek', 0, ORNEK.length],
]) console.log(`${ad.padEnd(36)} ${String(a).padEnd(8)} ${b}`);
```

```
ozne         erisebildigi sir
  op-a       5   (hepsi)
  op-b       3   veri-deposu-kimligi, kuyruk-anahtari, arsiv-anahtari
  op-c       1   posta-gecidi-belirteci
  dagitim    5   (hepsi)
  gozlem     1   olcut-yazma-anahtari
  servis     36  (18 ornek, ortalama 2 sir)

olcu                                 statik   merkezi depo
sirrin durdugu ayri yer              4        1
sir kopyasi                          20       5
butun sirlari tasiyan nokta          4        1
(ozne, sir) kalemi                   51       51
kaydi tutulan ve iptal edilebilen    0        51
butun sirlara erisen ozne            2        2
depo dustugunde yenileyemeyen ornek  0        18
```

Üst blok deponun kendi erişim yüzeyidir. Beş öznenin ikisi beş sırrın beşine birden erişebiliyor:
bir operatör ve dağıtım otomasyonu. Matris yazılmış, üç özne için gerçekten daraltılmış, ikisi için
hiç daraltılmamış. Servis örnekleri otuz altı kalem ekliyor ve ortalaması iki — servisler dar,
insanlar geniş. Toplam elli bir `(özne, sır)` kalemi var ve her biri, o özne ele geçirilirse açılan
bir sırdır.

Alt tablo iki düzeni yan yana koyuyor ve ilk üç satır merkezî deponun kazancıdır: sırrın durduğu yer
dörtten bire, kopya yirmiden beşe, bütün sırları taşıyan nokta dörtten bire iniyor. Dördüncü satır
ise kazanç değil: `(özne, sır)` kalemi elli birde kalıyor. Merkezî depo erişim sayısını azaltmıyor.
Statik düzende de aynı elli bir erişim vardı; farkı, hiçbirinin bir yerde yazılı olmamasıydı.

Beşinci satır bu dersin gerçek kazancıdır. Statik düzende kaydı tutulan ve iptal edilebilen erişim
sıfırdı — yedek görüntüsünden okunan bir sır için ne kayıt vardı ne de tek tek geri alınabilirdi.
Merkezî depoda elli bir erişimin elli biri hem kaydedilebilir hem iptal edilebilir. Merkezî deponun
verdiği şey daha az erişim değil, sayılabilir ve geri alınabilir erişimdir.

Son satır bedeli tekrarlıyor: depo düştüğünde on sekiz örnek yenileyemez, statik düzende sıfır örnek
etkilenirdi. Kapatılamayan kalem de burada duruyor — bütün sırları taşıyan tek nokta. Statik düzende
bu noktadan dört tane vardı, merkezî depoda bir tane var. Dörtten bire inmek gerçek bir kazançtır,
ama sıfır olmuyor ve o tek nokta artık hem bütün sırları hem bütün servislerin çalışabilirliğini
taşıyor.

## Özet

- Statik düzende 5 sır 18 örneğe dağılıp 36 `(örnek, sır)` kalemi ediyor ve 4 ayrı yerde toplam 20
  kopya hâlinde duruyor; bu yerlerin ikisi erişim kaydı tutmuyor. Döndürme maliyeti döndürmemenin
  nedenidir: en çok paylaşılan sırrı değiştirmek 15 örneği yeniden başlatmayı gerektiriyor, bu
  yüzden sır kurulumdan beri aynı ve sızıntı penceresi bir süre değil bir durum — biri fark edene
  kadar açık.
- Ömür taraması üç sonucu birlikte veriyor: 5 dakikalık ömürde pencere 2,5 dakika ama dönemde
  155.520 yenileme ve kesintide 5 dakika içinde 18 örneğin hepsi düşüyor; statikte pencere sonsuz,
  yenileme 0 ve kesintinin hiç etkisi yok.
- Ömür, deponun kabul edilebilir kesinti süresini belirliyor: 60 dakikalık ömürde 30 dakikalık bir
  kesinti 18 örneğin 9'unu, 480 dakikalık ömürde 1'ini, 1440 dakikalık ömürde hiçbirini düşürüyor.
- Ömür ekseni her sırra uygulanamıyor: 5 sırdan 2'si statik kalmak zorunda (biri dış tarafça
  veriliyor, öteki şifreleme anahtarı) ve 36 kalemin 9'u, 18 örneğin 9'u ömür ekseninin dışında
  kalıp sonsuz pencereyi koruyor.
- Merkezî depo sırrın durduğu yeri 4'ten 1'e, kopyayı 20'den 5'e indiriyor ama `(özne, sır)` kalemi
  51'de kalıyor; 5 öznenin 2'si bütün sırlara erişiyor. Kazanç erişimin azalması değil, 0 olan
  kaydedilebilir ve iptal edilebilir erişimin 51 olmasıdır.
- Kapatılamayan kalem, bütün sırları taşıyan tek noktadır: statik düzende 4 taneydi, merkezî depoda
  1 tane — ama o tek nokta artık 18 örneğin çalışabilirliğini de taşıyor.

## Sonraki Adım

Bu üç ders üç ayrı yoğunlaşma noktası bıraktı: dışarıya bakan yönetim düğümü, bütün erişimin
geçtiği sıçrama sunucusu ve bütün sırları taşıyan depo. Üçünün de ortak bir özelliği var — üçü de
yazılımdır ve üçünün de yazılımı eskiyor. Bir sertleştirme adımı, koştuğu kodun bilinen bir açığı
kalmadığı sürece geçerlidir. Sonraki dersin sorusu bu yüzden yamalardır: bir düzeltme yayımlandığı
anla makinelere uygulandığı an arasında kaç makine ne kadar süre açık kalıyor, yama penceresini
daraltmak kaç yeniden başlatma ve kaç kesinti dakikası istiyor, otomatik uygulanan yama ile
onaylanarak uygulanan yama arasındaki fark kaç gün ve kaç makine ediyor.
