---
title: 'Depolama Maruziyeti'
source: 'https://academia.sh/tr/kurslar/bulut-guvenligi/depolama-maruziyeti'
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'
---

# Depolama Maruziyeti

Genel erişime açık depolama kaleminin iki ayrı ölçüsü: 13 nesne grubunun 7'si açık, 61.697 kayıt ve 7 veri türünden 6'sı okunabilir durumda. Kova düzeyinde genel erişimi kapatmak 9.260 kişisel kaydı kapatır ama yayılma yarıçabını 10'da bırakır; 47 kayıtlık yapılandırma kalemini kapatmak yarıçabı 10'dan 5'e indirir ve günde 9 meşru erişimi durdurur. Tüm genel erişimi kapatmanın bedeli günde 8.655 erişimdir.

Önceki ders ağ yolunu bir önkoşul olarak ele aldı: yol kapalıysa izin işe yaramıyordu. Ama bazı
kalemlerin dış yolu bilerek açıktır — abone portalının varlık deposu günde sekiz bin altı yüz meşru
dış erişim alır ve kapatılamaz. O kalem için soru yol değil, **izin kümesidir**: dışarıdan gelen bir
istek hangi kimlikle karşılanıyor ve hiçbir kimlik sunmayan bir istek ne okuyabiliyor.

Bu ders depolama kalemlerinin izin kümesini tarıyor. Bulutta Depolama ve Veri kursu kova erişimini
ve imzalı bağlantıyı ölçtü; burada mekanik tekrarlanmaz, yalnız **maruziyet** sayılır. İki ayrı
sayı çıkar ve dersin bulgusu ikisinin ayrılmasıdır: açık kalemden okunabilen **kayıt** ile o
kalemden başlayan **yayılma yarıçapı** aynı düzeltmeyle düşmüyor.

- **BG18.** İzin iki düzeyde yazılır: **kova düzeyi** ve **nesne grubu düzeyi**. Nesne düzeyinde bir
  değer yazılıysa etkin izin odur; yazılı değilse kova düzeyi devralınır.
- **BG19.** **Genel erişime açık** kalem, hiçbir kimlik sunmayan bir isteğin okuyabildiği ya da
  listeleyebildiği kalemdir. İmzalı erişim bu derste açık sayılmaz.
- **BG20.** Her nesne grubunun bir **veri türü**, bir kayıt sayısı ve günde kaç meşru genel erişim
  aldığı yazılır. Sayılar kurgudur.
- **BG21.** Bir nesne grubu bir **kimlik referansı** taşıyabilir: içindeki dosya, bir rolün adını ve
  onu kullanan yapılandırmayı içerir. Kimlik bilgisinin kendisi modellenmez, yalnız referansın
  varlığı ve sonucu sayılır.
- **BG22.** **Maruziyet yarıçapı** iki bileşenin birleşimidir: kimliksiz okunan kovalar ve açık bir
  dosyadaki kimlik referansından başlayan yürüyüşün ulaştığı kalemler.

## İzin Kümesi ve Açık Kalem

```js
// bulut/depo.mjs — nesne deposu izin kumesi ve erisim grafigi MODELIDIR. Kurgu bolgesel olcum
// agi; depolama sinifi, imzali baglanti mekanigi ve saglayici adi bu derste yoktur.

// Sutunlar: kova, nesne grubu, kova duzeyi izin, nesne duzeyi izin ('-' = kovadan devralir),
// veri turu, kayit sayisi, gunde mesru genel erisim, gruptaki dosyanin tasidigi kimlik referansi.
export const GRUP = `
  portal-varlik-deposu site-varliklari  genel-oku genel-oku   varlik          1400 8600 -
  portal-varlik-deposu yukleme-onizleme genel-oku -           abone-kisisel   9260    0 -
  olcum-deposu         gunluk-yukleme   ozel      genel-oku   olcum          41800   40 -
  olcum-deposu         ham-okuma        ozel      -           olcum         512000    0 -
  fatura-cikti-deposu  abone-faturasi   ozel      imzali      fatura         24500  120 -
  fatura-cikti-deposu  toplu-cikti      ozel      genel-liste fatura           310    0 -
  ham-arsiv            gecmis-okuma     ozel      -           olcum        1240000    0 -
  ham-arsiv            ortak-cekme      ozel      genel-oku   olcum           8700    6 -
  yedek-deposu         gecelik-yedek    ozel      -           yedek            620    0 -
  yedek-deposu         eski-yedek       ozel      genel-oku   yedek            180    0 -
  sablon-deposu        dagitim-sablonu  ozel      genel-oku   yapilandirma      47    9 rol-dagitim
  rapor-deposu         aylik-rapor      ozel      imzali      fatura            36   30 -
  gunluk-deposu        uygulama-gunlugu ozel      -           gunluk         88000    0 -`
  .trim().split('\n').map((s) => {
    const p = s.trim().split(/\s+/);
    return { kova: p[0], grup: p[1], kovaIzin: p[2], nesneIzin: p[3], tur: p[4],
      kayit: Number(p[5]), mesru: Number(p[6]), kimlik: p[7] === '-' ? null : p[7] };
  });
export const GENEL = ['genel-oku', 'genel-liste'];
// Etkin izin: nesne duzeyi bir deger yaziyorsa o gecerlidir, yoksa kova duzeyi devralinir.
export const etkin = (g, d = {}) => {
  const kova = d.kovaKapali ? 'ozel' : g.kovaIzin;
  const nesne = d.kapali && d.kapali(g) ? 'ozel' : g.nesneIzin;
  return nesne === '-' ? kova : nesne;
};
export const acik = (g, d) => GENEL.includes(etkin(g, d));

// Erisim grafigi (onceki derslerle ayni): acik bir dosyada bulunan kimlik referansindan yuruyus.
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']];
export function yuru(baslangic) {
  const g = new Set([baslangic]), kalem = new Set();
  let sira = [baslangic];
  while (sira.length) {
    const s = [];
    for (const k of sira) {
      for (const r of ERISIM[k].split(' ')) kalem.add(r);
      for (const [a, b] of USTLENME) if (a === k && !g.has(b)) { g.add(b); s.push(b); }
    }
    sira = s;
  }
  return kalem;
}
// Maruziyet yaricabi: kimliksiz okunan kovalar + acik dosyadaki kimlik referansinin yuruyusu.
export function yaricap(d) {
  const y = new Set(GRUP.filter((g) => acik(g, d)).map((g) => g.kova));
  for (const g of GRUP.filter((x) => acik(x, d) && x.kimlik))
    for (const r of yuru(g.kimlik)) y.add(r);
  return y;
}
```

```js
// bulut/kosum1.mjs — kac kalem genel erisime acik, hangi veri turu, kac kayit
import { GRUP, acik, etkin, yaricap } from './depo.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 = [-21, -18, -13, -15, 9, 7];
yaz(A, 'kova', 'nesne grubu', 'etkin izin', 'veri turu', 'kayit', 'mesru');
for (const g of GRUP.filter((x) => acik(x)))
  yaz(A, g.kova, g.grup, etkin(g), g.tur, g.kayit, g.mesru);
const kayit = (f) => GRUP.filter(f).reduce((a, g) => a + g.kayit, 0);
console.log(`\nacik kalem ${GRUP.filter((g) => acik(g)).length}/${GRUP.length}, ` +
  `acik kayit ${kayit((g) => acik(g))} / toplam ${kayit(() => true)} ` +
  `(%${(kayit((g) => acik(g)) / kayit(() => true) * 100).toFixed(1)})`);
const tur = [...new Set(GRUP.map((g) => g.tur))];
console.log(`veri turu ${tur.filter((t) => GRUP.some((g) => g.tur === t && acik(g))).length}/` +
  `${tur.length} acik; kapali kalan tur: ` +
  tur.filter((t) => GRUP.every((g) => g.tur !== t || !acik(g))).join(', '));
const y = yaricap({});
console.log(`\nkimliksiz okunan kova ${new Set(GRUP.filter((g) => acik(g)).map((g) => g.kova)).size}` +
  `; acik dosyadaki kimlik referansi ile yaricap ${y.size}`);
```

```
kova                 nesne grubu       etkin izin   veri turu          kayit  mesru
portal-varlik-deposu site-varliklari   genel-oku    varlik              1400   8600
portal-varlik-deposu yukleme-onizleme  genel-oku    abone-kisisel       9260      0
olcum-deposu         gunluk-yukleme    genel-oku    olcum              41800     40
fatura-cikti-deposu  toplu-cikti       genel-liste  fatura               310      0
ham-arsiv            ortak-cekme       genel-oku    olcum               8700      6
yedek-deposu         eski-yedek        genel-oku    yedek                180      0
sablon-deposu        dagitim-sablonu   genel-oku    yapilandirma          47      9

acik kalem 7/13, acik kayit 61697 / toplam 1926853 (%3.2)
veri turu 6/7 acik; kapali kalan tur: gunluk

kimliksiz okunan kova 6; acik dosyadaki kimlik referansi ile yaricap 10
```

On üç nesne grubunun yedisi genel erişime açık. Açık kayıt altmış bir bin altı yüz doksan yedidir
ve toplamın yalnız yüzde üç virgül ikisidir — hacim ölçüsü küçük görünüyor. Veri türü ölçüsü aynı
şeyi söylemiyor: yedi türden altısı açıktır, kapalı kalan tek tür uygulama günlüğüdür.

Dört satır ayrı ayrı okunmalıdır. `site-varliklari` bilerek açıktır ve günde sekiz bin altı yüz
meşru erişim alır. `yukleme-onizleme` aynı kovada durur, kova düzeyi iznini devralır ve dokuz bin
iki yüz altmış **abone kişisel kaydı** taşır; günde sıfır meşru genel erişim alır. İki grup arasında
tek fark, ikincisinin kendi iznini yazmamış olmasıdır.

`gunluk-yukleme` ile `ortak-cekme` ise ters durumdadır: kovaları özeldir, açıklık nesne düzeyinde
tek tek yazılmıştır ve ikisinin de meşru bir gerekçesi vardır. `eski-yedek` ve `toplu-cikti` de
nesne düzeyinde açıktır ama hiçbir meşru erişim almaz — yani bir zamanlar bir gerekçesi vardı ve
gerekçe düştüğünde izin düşmedi.

Son satır dersin ikinci ölçüsünü veriyor. Kimliksiz bir istek altı kovaya ulaşıyor. `sablon-deposu`
içindeki dağıtım şablonu bir kimlik referansı taşıyor ve o referanstan başlayan yürüyüş yarıçabı
ona çıkarıyor. Dört kalem — dağıtım yapılandırması, örnek yönetimi, anahtar yönetimi ve sır deposu
— hiçbir depolama izniyle açılmamıştır; kırk yedi kayıtlık bir yapılandırma dosyasından gelirler.

## Beş Düzeltme

```js
// bulut/kosum2.mjs — bes duzeltme: acik kalem, acik kayit, yaricap ve durdurulan mesru erisim
import { GRUP, acik, yaricap } from './depo.mjs';

const DUZELTME = [
  ['denetim yok', {}],
  ['kova duzeyinde genel erisim kapanir', { kovaKapali: true }],
  ['mesru genel erisimi 0 olan kalem kapanir', { kapali: (g) => g.mesru === 0 }],
  ['yapilandirma turundeki acik kalem kapanir', { kapali: (g) => g.tur === 'yapilandirma' }],
  ['tum genel erisim kapanir', { kovaKapali: true, kapali: () => true }],
];
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 = [-43, 7, 9, 9, 11];
yaz(A, 'duzeltme', 'acik', 'acik', 'yaricap', 'duran is');
yaz(A, '', 'kalem', 'kayit', '', 'gunde');
for (const [ad, d] of DUZELTME) {
  const a = GRUP.filter((g) => acik(g, d));
  yaz(A, ad, a.length, a.reduce((x, g) => x + g.kayit, 0), yaricap(d).size,
    GRUP.filter((g) => acik(g) && !acik(g, d)).reduce((x, g) => x + g.mesru, 0));
}
console.log('\nyaricabin iki bileseni (kimliksiz okunan kova / referanstan eklenen kalem):');
for (const [ad, d] of DUZELTME) {
  const kova = new Set(GRUP.filter((g) => acik(g, d)).map((g) => g.kova)).size;
  console.log(`  ${ad.padEnd(43)}${String(kova).padStart(2)} / ${yaricap(d).size - kova}`);
}
const cikan = [...yaricap({})].filter((r) => !yaricap(DUZELTME[3][1]).has(r)).sort();
console.log(`\nyapilandirma turu kapatilinca yaricaptan cikan ${cikan.length} kalem:`);
console.log('  ' + cikan.join(', '));
```

```
duzeltme                                      acik     acik  yaricap   duran is
                                             kalem    kayit               gunde
denetim yok                                      7    61697       10          0
kova duzeyinde genel erisim kapanir              6    52437       10          0
mesru genel erisimi 0 olan kalem kapanir         4    51947        8          0
yapilandirma turundeki acik kalem kapanir        6    61650        5          9
tum genel erisim kapanir                         0        0        0       8655

yaricabin iki bileseni (kimliksiz okunan kova / referanstan eklenen kalem):
  denetim yok                                 6 / 4
  kova duzeyinde genel erisim kapanir         6 / 4
  mesru genel erisimi 0 olan kalem kapanir    4 / 4
  yapilandirma turundeki acik kalem kapanir   5 / 0
  tum genel erisim kapanir                    0 / 0

yapilandirma turu kapatilinca yaricaptan cikan 5 kalem:
  anahtar-yonetimi, dagitim-yapilandirmasi, ornek-yonetimi, sablon-deposu, sir-deposu
```

İkinci satır bu dersin karar taşıyan bulgusudur. Kova düzeyinde genel erişimi kapatmak dokuz bin
iki yüz altmış kişisel kaydı kapatır — açık kaydın yüzde on beşi — ve günde tek bir meşru işi
durdurmaz. Buna karşılık **yayılma yarıçabı onda kalır**. Kapatılan tek kalem, kova düzeyi iznini
devralan gruptur; nesne düzeyinde açıkça yazılmış beş izin yerinde durur ve kimlik referansını
taşıyan grup onlardan biridir.

Dördüncü satır tersini gösteriyor. Yapılandırma türündeki tek açık kalemi kapatmak kırk yedi kayıt
kapatır — açık kaydın binde birinden azı — ve yarıçabı ondan beşe indirir. Bedeli günde dokuz meşru
erişimdir. Kova düzeyi düzeltmesi bu düzeltmenin yüz doksan altı katı kayıt kapatır ve yarıçabı
sıfır kalem düşürür.

Alt blok nedenini ayırıyor. Yarıçap iki bileşenden oluşur: kimliksiz okunan kova sayısı ve kimlik
referansından eklenen kalem sayısı. İlk üç düzeltme ikinci bileşene hiç dokunmaz — dört kalem her
üçünde de yerinde durur. Dördüncü düzeltme ikinci bileşeni sıfırlar ve birinci bileşeni yalnız bir
azaltır. **Kayıt hacmini düşüren düzeltme ile yarıçabı düşüren düzeltme aynı düzeltme değildir.**

## Açık Grupların Tek Tek Payı

Yedi açık grup toplu bir sayı verir; hangisinin ne taşıdığı ayrı ölçülür.

```js
// bulut/kosum3.mjs — acik gruplar tek tek: her biri tek basina kac kalemlik yaricap tasiyor
import { GRUP, acik, yaricap, yuru } from './depo.mjs';

const tek = (g) => {                               // yalniz bu grup acik olsaydi yaricap
  const y = new Set([g.kova]);
  if (g.kimlik) for (const r of yuru(g.kimlik)) y.add(r);
  return y.size;
};
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 = [-21, -15, 9, 10, 8, 15];
yaz(A, 'tek basina acik grup', 'veri turu', 'kayit', 'yaricap', 'mesru', 'kayit / kalem');
const acikGrup = GRUP.filter((g) => acik(g));
for (const g of acikGrup) yaz(A, g.grup, g.tur, g.kayit, tek(g), g.mesru, Math.round(g.kayit / tek(g)));
const toplam = acikGrup.reduce((a, g) => a + tek(g), 0);
console.log(`\ntek tek yaricaplarin toplami ${toplam}, birlikte olculen yaricap ` +
  `${yaricap({}).size}: ${toplam - yaricap({}).size} kalem iki gruptan birden geliyor`);
```

```
tek basina acik grup veri turu          kayit   yaricap   mesru  kayit / kalem
site-varliklari      varlik              1400         1    8600           1400
yukleme-onizleme     abone-kisisel       9260         1       0           9260
gunluk-yukleme       olcum              41800         1      40          41800
toplu-cikti          fatura               310         1       0            310
ortak-cekme          olcum               8700         1       6           8700
eski-yedek           yedek                180         1       0            180
dagitim-sablonu      yapilandirma          47         5       9              9

tek tek yaricaplarin toplami 11, birlikte olculen yaricap 10: 1 kalem iki gruptan birden geliyor
```

Altı grubun yarıçabı birdir: açık olan kova okunur ve orada biter. Yedincisi beştir. Son sütun bunu
tek bir orana çeviriyor — kalem başına düşen kayıt sayısı. `gunluk-yukleme` kalem başına kırk bir
bin sekiz yüz kayıt taşır; `dagitim-sablonu` dokuz. İki bin kat fark, iki grubun aynı listede
neden farklı işlem gördüğünü açıklıyor: biri okunacak veri, öteki açılacak kapıdır.

Son satır ölçünün toplanabilirliğini sınıyor. Tek tek yarıçapların toplamı on birdir, birlikte
ölçülen yarıçap ondur. Fark bir kalemdir: iki açık grup aynı kovada durduğu için kova iki kez
sayılmıştır. Yayılma yarıçapı bir küme büyüklüğüdür ve grup grup toplanamaz.

## İki Ölçünün Ayrılması

Maruziyeti tek bir sayıyla vermek mümkün değildir, çünkü iki ayrı zarar biçimi vardır. Kişisel
kayıtların okunması doğrudan bir zarardır ve büyüklüğü kayıt sayısıyla ölçülür: dokuz bin iki yüz
altmış abone kaydı, hiçbir yürüyüş gerektirmeden okunur. Yapılandırma dosyasının okunması ise
kendi başına küçüktür — kırk yedi kayıt — ama başka beş kaleme açılan bir kapıdır.

İki ölçü farklı önceliklendirme üretir. Kayıt hacmine göre sıralandığında ilk düzeltme
`yukleme-onizleme`dir; yarıçapa göre sıralandığında ilk düzeltme `dagitim-sablonu`dur. Doğru sıra
ikisinin de bedelsize yakın olmasıdır: birincisi günde sıfır, ikincisi günde dokuz meşru erişim
durdurur. Üçüncü satırdaki düzeltme — meşru erişimi hiç olmayan kalemleri kapatmak — dört açık
kaleme iner ve bedeli sıfırdır, ama yapılandırma kalemini kapsamaz çünkü o kalemin günde dokuz
meşru erişimi vardır.

Son satır sınırı çiziyor. Tüm genel erişimi kapatmak yarıçabı sıfırlar; bedeli günde sekiz bin
altı yüz elli beş erişimdir ve bunun sekiz bin altı yüzü abone portalının varlıklarıdır. Bu, bir
depolama kararı değil, portalın çalışma biçimine ilişkin bir karardır — ve o kalemin açık olması
yarıçapa hiçbir katkı yapmaz, çünkü içinde kimlik referansı yoktur.

## Özet

- 13 nesne grubunun 7'si genel erişime açıktır; açık kayıt 61.697, toplamın %3,2'sidir. Veri
  türünde ölçü başkadır: 7 türden 6'sı açıktır, kapalı kalan tek tür uygulama günlüğüdür.
- Etkin izin nesne düzeyinden gelir: aynı kovada duran iki gruptan biri kendi iznini yazmadığı için
  9.260 abone kişisel kaydı, günde 0 meşru erişim alarak açık durur.
- Maruziyet yarıçapı iki bileşenlidir: kimliksiz okunan 6 kova ve açık bir yapılandırma dosyasındaki
  kimlik referansından eklenen 4 kalem — toplam 10.
- Kova düzeyinde genel erişimi kapatmak 9.260 kaydı kapatır, günde 0 iş durdurur ve yarıçabı 10'da
  bırakır. Kayıt hacmini düşüren düzeltme yarıçabı düşürmeyebilir.
- 47 kayıtlık yapılandırma kalemini kapatmak yarıçabı 10'dan 5'e indirir ve günde 9 meşru erişimi
  durdurur; kova düzeyi düzeltmesinin 196 katı az kayıt kapatır, yarıçabı 5 kalem düşürür.
- Tüm genel erişimi kapatmak yarıçabı sıfırlar; bedeli günde 8.655 erişimdir ve 8.600'ü yarıçapa
  hiç katkı yapmayan tek bir kalemden gelir.

## Sonraki Adım

Bu derste açık bir dosyanın içeriği okunabilir kabul edildi. Kayıtlar diskte şifreliydi, ama
okuyabilen özne için bu bir engel olmadı — çünkü çö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? Sonraki ders anahtar sahipliğini üç kipte koşturuyor ve tek bir şeyi ölçüyor: sızan kimliğin
**okuyabildiği** kalem sayısı, anahtar sağlayıcıda iken ve müşteride iken kaç.
