---
title: 'En Az Yetki Uygulaması'
source: 'https://academia.sh/tr/kurslar/bulut-yonetisimi/en-az-yetki-uygulamasi'
course: 'Bulut Yönetişimi, Güvenlik ve Maliyet'
language: tr
updated: '2026-08-17T18:06:55+00:00'
license: 'CC BY-SA 4.0'
---

# En Az Yetki Uygulaması

Verilen izin ile kullanılan izin yan yana konur: kullanılmayan izin oranı, daraltılmış politikanın satır sayısı ve daraltmanın durdurduğu meşru iş sayılır. Gözlem penceresi taranır ve güvenli daraltma eşiği sayıyla verilir.

Önceki ders kimliğin nereden geldiğini değiştirdi; ne yapabildiği açık kaldı. Politika belgeleri
yazılırken izinler çoğunlukla tek tek değil aile düzeyinde verilir: bir satır ölçüm ailesinin bütün
izinlerini açar, çünkü satır yazmak pahalı, izin saymak ucuzdur. Bu dersin sorusu o satırların ne
kadarının gerçekten kullanıldığıdır. Verilen izin kümesi ile kullanım geçmişi yan yana konuyor ve
üç şey sayılıyor: **kullanılmayan izin oranı**, daraltılmış politikanın kaç satır ettiği ve
**daraltmanın kaç meşru işi durdurduğu**. Üçüncüsü ilk ikisi kadar önemlidir: geçmişte hiç görünmemiş
bir yol, gerekli olmadığı anlamına gelmez.

- **BI31.** Sekiz iş yükü, sekiz kaynak ailesi ve on sekiz izin kurgusal bölgesel ölçüm ağına
  aittir; ölçülen şey `node` ile yazılan modeldir.
- **BI32.** Gerçek ihtiyaç listesi ölçülmedi, seçildi; her yolun ortalama kullanım aralığı bir model
  kararıdır. Gerçekte bu liste bilinmez — dersin noktası zaten onun bilinmemesidir.
- **BI33.** Kullanım geçmişi kendi yazılan doğrusal eşlemeli üreteçle üretildi. Tohum görünür ve
  sabittir; çıktı koşumdan koşuma aynı kalır.
- **BI34.** Bir izin ya kullanıldı ya kullanılmadı. Koşul ifadesi ve kaynak düzeyinde daraltma
  modellenmiyor; bunlar daraltmayı derinleştirir, yönünü değiştirmez.
- **BI35.** Verilen politika aile düzeyinde yazıldı, daraltılmış politika izin düzeyinde yazılıyor.
  Satır sayısı bu yüzden ayrı bir ölçüdür.
- **BI36.** Sınama dönemi ikinci doksan gündür ve aynı üreteç akışından gelir. Daraltılmış
  politikanın kaç meşru işi durdurduğu orada sayılıyor.

## Verilen İzin ile Gerçek İhtiyaç

Model üç şeyi ayrı tutuyor: aile düzeyinde yazılmış politika, onun açtığı izin kümesi ve her iş
yükünün gerçekten ihtiyaç duyduğu yollar. Üçüncüsü gerçek bir sistemde bilinmez; burada bilinir
kılınıyor ki daraltmanın isabeti ölçülebilsin.

```js
// yetki.mjs — verilen izin, gercek ihtiyac ve kullanim gecmisi modeli
// Kurgusal bolgesel olcum agi; sekiz is yuku, sekiz kaynak ailesi. Olculen sey bu modeldir.
export const AILE = {
  olcum: ['oku', 'yaz', 'sil'], kuyruk: ['oku', 'yaz', 'yonet'], arsiv: ['oku', 'yaz', 'sil'],
  fatura: ['oku', 'yaz'], 'is-emri': ['oku', 'yaz'], gunluk: ['oku', 'yaz'],
  yapilandirma: ['oku', 'yaz'], posta: ['gonder'],
};
export const IZIN = Object.entries(AILE).flatMap(([a, e]) => e.map((x) => `${a}-${x}`));
// Verilen politika aile duzeyinde yazildi: bir satir bir ailenin butun izinlerini veriyor.
export const VERILEN = {
  'okuma-toplayici': ['olcum', 'kuyruk'], 'dogrulayici': ['olcum', 'kuyruk'],
  'gunluk-tasiyici': ['gunluk', 'yapilandirma'], 'faturalama': ['fatura', 'posta', 'arsiv'],
  'is-emri': ['is-emri', 'kuyruk', 'posta'], 'gecelik-toplu-is': ['olcum', 'arsiv', 'fatura'],
  'arsivleyici': ['arsiv'], 'rapor-uretici': ['fatura', 'arsiv', 'gunluk'],
};
export const OZNE = Object.keys(VERILEN);
// Gercek ihtiyac: izin -> ortalama kullanim araligi (gun). Model karari; olculmedi, secildi.
export const GERCEK = {
  'okuma-toplayici': { 'olcum-yaz': 1, 'kuyruk-yaz': 1, 'olcum-oku': 3 },
  'dogrulayici': { 'olcum-oku': 1, 'kuyruk-oku': 1, 'olcum-yaz': 2, 'olcum-sil': 30 },
  'gunluk-tasiyici': { 'gunluk-yaz': 1, 'yapilandirma-oku': 7 },
  'faturalama': { 'fatura-oku': 1, 'fatura-yaz': 1, 'posta-gonder': 2, 'arsiv-oku': 45 },
  'is-emri': { 'is-emri-yaz': 1, 'is-emri-oku': 1, 'kuyruk-oku': 1, 'posta-gonder': 5 },
  'gecelik-toplu-is': { 'olcum-oku': 1, 'arsiv-yaz': 1, 'fatura-oku': 7, 'olcum-sil': 20 },
  'arsivleyici': { 'arsiv-oku': 1, 'arsiv-yaz': 1, 'arsiv-sil': 60 },
  'rapor-uretici': { 'fatura-oku': 1, 'arsiv-oku': 7, 'gunluk-oku': 30 },
};
export const DONEM = 90;                             // gozlenen gun sayisi
export const TOHUM = 20260802;                       // uretecin tohumu; gorunur ve sabit
export const PENCERE = [1, 7, 14, 30, 60, 90];
export const verilenIzin = (o) => VERILEN[o].flatMap((a) => AILE[a].map((x) => `${a}-${x}`));
export const verilenCift = OZNE.flatMap((o) => verilenIzin(o).map((i) => `${o}|${i}`));
export const gercekCift = OZNE.flatMap((o) => Object.keys(GERCEK[o]).map((i) => `${o}|${i}`));
export const araligi = (c) => GERCEK[c.split('|')[0]][c.split('|')[1]];
// Kendi uretecimiz: dogrusal eslesmeli uretec; tohumdan baslar, kosumdan kosuma ayni diziyi verir.
export function uretec(tohum) {
  let s = tohum >>> 0;
  return () => { s = (Math.imul(s, 1664525) + 1013904223) >>> 0; return s / 4294967296; };
}
// Gecmis: her gun her gercek cift 1/aralik olasilikla kullanilir.
export function gecmisUret(gun, tohum) {
  const r = uretec(tohum), g = [];
  for (let d = 0; d < gun; d++)
    for (const c of gercekCift) if (r() < 1 / araligi(c)) g.push([d, c]);
  return g;
}
```

```js
// kosum1.mjs — verilen izin ile gercek ihtiyac yan yana: kullanilmayan izin orani
import { OZNE, VERILEN, GERCEK, IZIN, verilenIzin, verilenCift, gercekCift } from './yetki.mjs';

console.log('ozne              satir  verilen  gercek  kullanilmayan');
let satir = 0;
for (const o of OZNE) {
  const v = verilenIzin(o), g = Object.keys(GERCEK[o]);
  satir += VERILEN[o].length;
  console.log(`${o.padEnd(18)}${String(VERILEN[o].length).padStart(5)}${String(v.length).padStart(9)}` +
    `${String(g.length).padStart(8)}${String(v.length - g.length).padStart(15)}`);
}
const kullanilmayan = verilenCift.length - gercekCift.length;
console.log('');
for (const [ad, v] of [
  ['izin katalogu', IZIN.length],
  ['verilen politika satiri (ozne, aile)', satir],
  ['verilen (ozne, izin) kalemi', verilenCift.length],
  ['gercekten gereken kalem', gercekCift.length],
  ['kullanilmayan izin kalemi', `${kullanilmayan}  (%${Math.round((kullanilmayan / verilenCift.length) * 100)})`],
]) console.log(`${ad.padEnd(38)}${v}`);
```

```
ozne              satir  verilen  gercek  kullanilmayan
okuma-toplayici       2        6       3              3
dogrulayici           2        6       4              2
gunluk-tasiyici       2        4       2              2
faturalama            3        6       4              2
is-emri               3        6       4              2
gecelik-toplu-is      3        8       4              4
arsivleyici           1        3       3              0
rapor-uretici         3        7       3              4

izin katalogu                         18
verilen politika satiri (ozne, aile)  19
verilen (ozne, izin) kalemi           46
gercekten gereken kalem               27
kullanilmayan izin kalemi             19  (%41)
```

On dokuz satırlık politika kırk altı `(özne, izin)` kalemi açıyor; gerçekten gereken yirmi yedi.
On dokuz kalem, yani verilen iznin yüzde kırk biri hiç kullanılmıyor. Bu kalemler yanlışlıkla
eklenmedi — hiçbiri tek tek yazılmadı. Aile düzeyinde yazılan bir satır, ailenin bütün izinlerini
birlikte getirdi.

Satır sütunu farkın nereden geldiğini gösteriyor. Arşivleyici tek satırla üç izin alıyor ve üçünü
de kullanıyor; kullanılmayan izni sıfır. Rapor üretici üç satırla yedi izin alıyor ve üçünü
kullanıyor; dördü boşta. Gecelik toplu iş üç satırla sekiz izin alıyor, dördü boşta. Bir satır ne
kadar geniş bir aileye dokunuyorsa fazlalık o kadar büyüyor; ölçüm ve arşiv aileleri üçer izin
taşıyor ve fazlalığın çoğu bu iki ailenin silme izninde birikiyor.

## Kullanım Geçmişi

Kullanılmayan izni gerçek bir sistemde bulmanın tek yolu geçmişe bakmaktır. Model doksan günlük bir
kullanım geçmişi üretiyor; ardından gelen doksan gün sınama dönemi olarak ayrılıyor.

```js
// kosum2.mjs — 90 gunluk kullanim gecmisi uretilir; nadir yollar ayri sayilir
import { DONEM, TOHUM, gercekCift, araligi, gecmisUret } from './yetki.mjs';

const tam = gecmisUret(2 * DONEM, TOHUM);            // ilk donem gozlem, ikincisi sinama
const gecmis = tam.filter(([d]) => d < DONEM);
const sayim = new Map(gercekCift.map((c) => [c, 0]));
for (const [, c] of gecmis) sayim.set(c, sayim.get(c) + 1);
console.log(`tohum ${TOHUM}, donem ${DONEM} gun, olay ${gecmis.length}, sinama donemi ${tam.length - gecmis.length} olay\n`);
console.log('araligi 7 gun ve uzeri olan gercek yollar:');
console.log('cift                              aralik  90 gunde  ilk gorulme');
for (const c of gercekCift.filter((x) => araligi(x) >= 7)) {
  const ilk = gecmis.find(([, x]) => x === c);
  console.log(`${c.padEnd(34)}${String(araligi(c)).padStart(6)}${String(sayim.get(c)).padStart(10)}` +
    `${(ilk ? `${ilk[0] + 1}. gun` : 'gorulmedi').padStart(13)}`);
}
const gorulen = new Set(gecmis.map(([, c]) => c));
console.log('');
for (const [ad, v] of [
  ['gercek yol', gercekCift.length],
  ['90 gunde en az bir kez gorulen', gorulen.size],
  ['90 gunde hic gorulmeyen gercek yol', gercekCift.filter((c) => !gorulen.has(c)).join(', ') || 'yok'],
]) console.log(`${ad.padEnd(36)}${v}`);
```

```
tohum 20260802, donem 90 gun, olay 1545, sinama donemi 1521 olay

araligi 7 gun ve uzeri olan gercek yollar:
cift                              aralik  90 gunde  ilk gorulme
dogrulayici|olcum-sil                 30         1       8. gun
gunluk-tasiyici|yapilandirma-oku       7        12       1. gun
faturalama|arsiv-oku                  45         2      25. gun
gecelik-toplu-is|fatura-oku            7        15       3. gun
gecelik-toplu-is|olcum-sil            20         7       5. gun
arsivleyici|arsiv-sil                 60         0    gorulmedi
rapor-uretici|arsiv-oku                7         9       6. gun
rapor-uretici|gunluk-oku              30         3      25. gun

gercek yol                          27
90 gunde en az bir kez gorulen      26
90 gunde hic gorulmeyen gercek yol  arsivleyici|arsiv-sil
```

Doksan günde bin beş yüz kırk beş olay birikiyor ama bu sayı yanıltıcıdır: olayların ezici çoğunluğu
günlük koşan on beş yoldan geliyor. Tablo yalnız aralığı bir haftadan uzun olanları listeliyor.
Doğrulayıcının silme izni doksan günde bir kez kullanıldı, sekizinci gün; faturalama arşivi iki kez
okudu, ilki yirmi beşinci gün.

Son satır bu dersin sert bulgusudur. Arşivleyicinin silme izni doksan günün hiçbir gününde
kullanılmadı. Yirmi yedi gerçek yoldan yirmi altısı görüldü, biri görülmedi — ve görülmeyen o yol
gerçek bir yoldur. Geçmişe bakan bir daraltma onu kullanılmayan izin sayar ve keser. Kesildikten
sonra ne olacağı, o yolun ne zaman koşacağına bağlıdır; altmış günde bir koşan bir yol için bu,
kesmeden sonraki herhangi bir gün olabilir.

## Gözlem Penceresi Taraması

Gözlem penceresi bir seçimdir: kısa pencere daha çok keser, uzun pencere daha az yanılır. İkisi
arasındaki değiş tokuş sayıyla çıkarılabilir.

```js
// kosum3.mjs — gozlem penceresi taranir: ne kadar kesiyor, ne kadar yanlis kesiyor
import { DONEM, TOHUM, PENCERE, verilenCift, gercekCift, gecmisUret } from './yetki.mjs';

const tam = gecmisUret(2 * DONEM, TOHUM);
const gecmis = tam.filter(([d]) => d < DONEM), sinama = tam.filter(([d]) => d >= DONEM);
console.log('pencere  daraltilmis  kullanilmayan  yanlis   sinamada    engellenen');
console.log('(gun)    satir        izin orani     kesme    engellenen  is yuku');
for (const p of PENCERE) {
  const gor = new Set(gecmis.filter(([d]) => d >= DONEM - p).map(([, c]) => c));
  const yanlis = gercekCift.filter((c) => !gor.has(c));
  const engel = sinama.filter(([, c]) => !gor.has(c));
  const oran = Math.round(((verilenCift.length - gor.size) / verilenCift.length) * 100);
  console.log(`${String(p).padEnd(9)}${String(gor.size).padEnd(13)}${`%${oran}`.padEnd(15)}` +
    `${String(yanlis.length).padEnd(9)}${String(engel.length).padEnd(12)}` +
    `${new Set(engel.map(([, c]) => c.split('|')[0])).size}`);
}
console.log('\npencere daraldikca hangi gercek yollar kesiliyor:');
for (const p of PENCERE) {
  const gor = new Set(gecmis.filter(([d]) => d >= DONEM - p).map(([, c]) => c));
  const y = gercekCift.filter((c) => !gor.has(c));
  console.log(`  ${String(p).padStart(2)} gun  ${y.length ? y.slice(0, 4).join(', ') + (y.length > 4 ? ` (+${y.length - 4})` : '') : 'yok'}`);
}
```

```
pencere  daraltilmis  kullanilmayan  yanlis   sinamada    engellenen
(gun)    satir        izin orani     kesme    engellenen  is yuku
1        19           %59            8        69          7
7        22           %52            5        12          4
14       23           %50            4        10          3
30       24           %48            3        5           2
60       25           %46            2        4           1
90       26           %43            1        0           0

pencere daraldikca hangi gercek yollar kesiliyor:
   1 gun  okuma-toplayici|olcum-oku, dogrulayici|olcum-sil, gunluk-tasiyici|yapilandirma-oku, faturalama|arsiv-oku (+4)
   7 gun  dogrulayici|olcum-sil, faturalama|arsiv-oku, gecelik-toplu-is|olcum-sil, arsivleyici|arsiv-sil (+1)
  14 gun  dogrulayici|olcum-sil, faturalama|arsiv-oku, gecelik-toplu-is|olcum-sil, arsivleyici|arsiv-sil
  30 gun  dogrulayici|olcum-sil, faturalama|arsiv-oku, arsivleyici|arsiv-sil
  60 gun  dogrulayici|olcum-sil, arsivleyici|arsiv-sil
  90 gun  arsivleyici|arsiv-sil
```

Tablo tek bir seçimin iki sonucunu yan yana koyuyor. Tek günlük pencere kırk altı kalemin yüzde
elli dokuzunu kesiyor ve daraltılmış politika on dokuz satıra iniyor — verilen politikayla aynı
sayı, ama bu kez izin düzeyinde ve çok daha dar. Bedeli sağdaki iki sütunda: sekiz meşru yol
kesiliyor ve sınama döneminde altmış dokuz iş yedi ayrı iş yükünde duruyor.

Pencere büyüdükçe her iki taraf da yumuşuyor. Otuz günlük pencerede kesme oranı yüzde kırk sekize
düşüyor, yanlış kesme üçe, engellenen iş beşe iniyor. Doksan günlük pencerede yanlış kesme bire,
engellenen iş sıfıra iniyor. Kesilen izin oranı yüzde elli dokuzdan yüzde kırk üçe geriledi; yani
uzun pencerenin bedeli, kesilebilecek on altı puanlık izni kesmemektir.

Son iki satır arasındaki fark dikkat ister. Doksan günlük pencerede yanlış kesme bir, engellenen iş
sıfır. Kesilen yol arşivleyicinin silme iznidir ve sınama döneminde de hiç koşmamıştır. Yanlış
kesmenin faturası kesildiği gün gelmiyor — yol koştuğu gün geliyor. Alt blok sırayı veriyor: pencere
daraldıkça önce nadir yollar, sonra haftalık yollar, en sonunda günlük olmayan her şey
kesiliyor.

## Güvenli Daraltma Eşiği

Gözlenen doksan gün bir yolu kaçırmaya yetiyorsa, kaç gün yetmez? Bu soru geçmişe değil aralığa
bakarak yanıtlanır: aralığı `d` gün olan bir yolun `p` günlük pencerede hiç görünmeme olasılığı
`(1 − 1/d)^p` değeridir.

```js
// kosum4.mjs — guvenli daraltma esigi: bir yolun kacirilma olasiligi pencereyle nasil dusuyor
import { DONEM, gercekCift, araligi } from './yetki.mjs';

const RISK = 0.01;                                   // kabul edilen kacirma olasiligi
const kacirma = (d, p) => Math.pow(1 - 1 / d, p);
const gereken = (d) => (d === 1 ? 1 : Math.ceil(Math.log(RISK) / Math.log(1 - 1 / d)));
const araliklar = [...new Set(gercekCift.map(araligi))].sort((a, b) => a - b);
console.log('aralik  yol  90 gunde kacirma  %1 risk icin pencere');
for (const d of araliklar) {
  const n = gercekCift.filter((c) => araligi(c) === d).length;
  console.log(`${String(d).padStart(6)}${String(n).padStart(5)}` +
    `${`%${(kacirma(d, DONEM) * 100).toFixed(1)}`.padStart(18)}${String(gereken(d)).padStart(18)} gun`);
}
console.log('');
for (const [ad, v] of [
  ['en nadir gercek yolun araligi', `${Math.max(...araliklar)} gun`],
  ['guvenli daraltma esigi (%1 risk)', `${Math.max(...araliklar.map(gereken))} gun`],
  ['gozlenen pencere', `${DONEM} gun`],
  ['90 gunde beklenen yanlis kesme', gercekCift.reduce((a, c) => a + kacirma(araligi(c), DONEM), 0).toFixed(2)],
]) console.log(`${ad.padEnd(34)}${v}`);
```

```
aralik  yol  90 gunde kacirma  %1 risk icin pencere
     1   15              %0.0                 1 gun
     2    2              %0.0                 7 gun
     3    1              %0.0                12 gun
     5    1              %0.0                21 gun
     7    3              %0.0                30 gun
    20    1              %1.0                90 gun
    30    2              %4.7               136 gun
    45    1             %13.2               205 gun
    60    1             %22.0               275 gun

en nadir gercek yolun araligi     60 gun
guvenli daraltma esigi (%1 risk)  275 gun
gozlenen pencere                  90 gun
90 gunde beklenen yanlis kesme    0.46
```

Tablo eşiği aralık aralık veriyor. Günlük koşan on beş yol için bir gün yetiyor; haftalık koşan üç
yol için otuz gün. Yirmi günlük aralıkta gereken pencere doksan güne çıkıyor — gözlenen dönemin
tamamı, tek bir yol için. Altmış günlük aralıkta gereken pencere iki yüz yetmiş beş gün, yani
gözlenenin üç katı.

Sağdan ikinci sütun doksan günlük pencerede kalan riski veriyor. Altmış günlük yolun kaçırılma
olasılığı yüzde yirmi iki, kırk beş günlük yolun yüzde on üç, otuz günlük iki yolun her biri için
yüzde beş. Toplandığında doksan günde beklenen yanlış kesme sayısı sıfır virgül kırk altı yol;
koşumda gerçekleşen bir yol. Model ile koşum aynı büyüklük mertebesindedir.

Güvenli daraltma eşiği bu tablonun tek satırlık cevabıdır: iki yüz yetmiş beş gün. Bu sayı bir
sistem özelliği değil, en nadir meşru yolun aralığının bir fonksiyonudur; aralığı bilinmeyen bir
sistemde eşik de bilinmez. Doksan günlük pencereyle daraltmak yüzde kırk üç kesme ve yarım yanlış
kesme demektir — kabul edilebilir olup olmadığı, o yarımın hangi iş yükünde çıkacağına bağlıdır.

## Özet

- Aile düzeyinde yazılmış 19 satırlık politika 46 `(özne, izin)` kalemi açıyor; gerçekten gereken
  27. Kullanılmayan izin 19 kalem, verilen iznin %41'i — ve hiçbiri tek tek yazılmadı, hepsi
  satırın genişliğinden geldi.
- 90 günlük geçmişte 1.545 olay birikiyor ama 27 gerçek yoldan yalnız 26'sı görünüyor. Görünmeyen
  yol arşivleyicinin silme iznidir; aralığı 60 gün ve geçmişe bakan bir daraltma onu keser.
- Pencere taraması değiş tokuşu veriyor: 1 günlük pencere %59 kesiyor ama 8 meşru yolu durduruyor
  ve sınama döneminde 7 iş yükünde 69 iş engelleniyor; 90 günlük pencere %43 kesiyor, 1 yanlış
  kesme yapıyor, 0 iş engelliyor.
- Yanlış kesmenin faturası kesildiği gün gelmiyor: 90 günlük pencerede kesilen tek yol sınama
  döneminde de koşmadı, engellenen iş 0 göründü.
- Daraltma satır sayısını düşürmüyor: 19 satırlık aile düzeyi politika, 90 günlük pencerede 26
  satırlık izin düzeyi politikaya dönüşüyor. Dar politika daha uzun politikadır.
- Güvenli daraltma eşiği %1 kaçırma riski için 275 gündür — en nadir yolun 60 günlük aralığının
  yaklaşık 4,6 katı. Gözlenen 90 günde o yolun kaçırılma olasılığı %22 ve beklenen yanlış kesme
  0,46 yoldur.

## Sonraki Adım

Bu ders bir politika kümesini daraltmayı ölçtü ve daraltmanın nerede durduğunu gösterdi. Ama
tabloların hepsi tek bir varsayım üzerinde duruyor: bütün bu iş yükleri aynı yerde, aynı sınırın
içinde. Kırk altı kalemin hepsi tek bir hesapta yazılıysa bir kimliğin ele geçirilmesi o hesabın
tamamına açılan bir kapıdır ve daraltma yalnız anahtarın şeklini değiştirir, kapının genişliğini
değil. Sonraki dersin sorusu bu yüzden sınırın kendisidir: aynı iş yükü kümesi tek hesapta,
ortama göre ayrılmış hesaplarda ve iş yüküne göre ayrılmış hesaplarda kurulduğunda patlama yarıçapı
kaç kaynak ediyor, kota nasıl paylaşılıyor, fatura ayrışıyor mu ve kaç hesap ile kaç politika
kopyası yönetmek gerekiyor.
