# TD-074 · Hatanın yayılabileceği alanı sınırla

Test için çalışan ajan canlıya da yetkili bir anahtar bulunca küçük bir yanılma canlı veriyi siliyor. Desen ortamı, anahtarı ve ağı ayırarak ajanın en kötü komutunun bile canlıya ulaşamayacağı bir çalışma alanı kurar.

- Adres: https://tandem.komunite.com.tr/desen/hatanin-yayilabilecegi-alani-sinirla
- Yer: Yanılınca > Hata
- Seviye: Ajan. AI kullanıcı adına iş yapıyorsa gerekli.
- Son inceleme: 27 Ekim 2026, Komünite editörlüğü

## 30 saniyede dene

1. Ajanının ulaşabildiği bütün anahtarları listele. Ortam değişkenlerine, yapılandırma dosyalarına ve ajanın okuyabildiği klasörlere bak.
2. Her anahtarın neye yetkili olduğunu sağlayıcının panelinden oku. Test işi için açtığın anahtar canlı veritabanını da silebiliyor mu?
3. Test ortamı ile canlının paylaştığı bir şey var mı diye bak. Aynı veritabanı, aynı depolama, aynı birim ya da aynı kuyruk birer köprü.
4. Ajana test ortamında zararsız bir iş ver ve canlı veritabanının adresine bağlanmasını iste. Bağlantı açılıyorsa test ile canlı arasında bir duvar yok.

## Sorun

Kullanıcı ajandan test ortamındaki bir bağlantı hatasını gidermesini istiyor. Ajan bir kimlik bilgisi uyuşmazlığı buluyor ve en temiz çözümün test veritabanının birimini silip yeniden kurmak olduğuna karar veriyor. Silmek için bir anahtar gerekiyor. Projenin içinde, başka bir iş için bırakılmış bir tane buluyor. Anahtar çalışıyor, birim siliniyor. Birim yalnız teste ait değilmiş. Canlı uygulama da aynı birimden okuyormuş.

Ajanın yanılması olağan bir şey. Yanlış dosyayı düzenler, yanlış komutu seçer, bir sistemin nasıl çalıştığını yanlış tahmin eder. Yanılmanın ne kadar zarar vereceğini ise o an ajanın elindeki yetki belirler. Test işi yapan ajanın elinde canlıyı silebilen bir anahtar varsa, testteki en küçük hata canlıya giden yolu bulur.

Zararı büyüten, sınırın ajanın kafasında durması. Ajan "bu birim teste ait" diye düşünüyor ve o düşünceye göre davranıyor. Düşünce yanlışsa önünde başka bir engel yok. Hatanın nereye kadar yayılacağı hatadan önce, ajana verilen ortam, anahtar ve ağla belirleniyor.

## Neden atlanıyor

Ajanı denemenin en hızlı yolu ona geliştiricinin kendi yetkilerini vermek ve geliştiricinin yetkisi her yere uzanır. Geliştiricinin makinesi, anahtarları, bağlantı adresleri ajanın da çalışma alanı olur. Ayrı ortam kurmak, anahtarı işe göre kesmek ve ağı kapatmak gün alır. Ekip demoyu bir saatte hazır görmek ister.

Sağlayıcıların akışı da geniş anahtarı kolay yol yapıyor. Railway kendi olay yazısında, ajanın kullandığı anahtarın [hesap düzeyinde, mümkün olan en geniş yetkiyle açıldığını](https://blog.railway.com/p/your-ai-wants-to-nuke-your-database) yazıyor. Doğru kapsam vardı ama akış hangisinin seçileceğini açık etmiyordu.

Model sınırı tahminle doldurur. Engelle karşılaşan ajan engeli aşacak bir yol arar ve bulduğu anahtarın kimin, hangi iş için açtığına bakmaz. Hangi kaynağın hangi ortama ait olduğunu da bilmez, tahmin eder. PocketOS'taki ajan sonradan, test birimini API ile silmenin [yalnız testi etkileyeceğini tahmin ettiğini](https://x.com/lifeofjer/status/2048103471019434248) yazdı. Railway de ajanların, API iki ortama aynı davrandığında [canlı ile testin farklı şeyler olduğu sezgisini taşımadığını](https://railway.com/changelog/2026-05-01-undoable-deletes) söylüyor.

Yetkinin genişliği hiçbir panoda görünmez. Kullanılmayan yetki bir gün kullanılana kadar sessiz durur. Ekip ajanın neyi yaptığını ölçer, neyi yapabileceğini ölçmez.

## Desen

Ajanın çalıştığı alan, ajanın yapabileceği en kötü şeyin ulaşacağı yerle aynı büyüklükte. O alanı işe göre çiz ve canlıyı dışında bırak.

1. **Ortamı ayır.** Test ve geliştirme işleri canlıyla hiçbir kaynağı paylaşmayan bir ortamda çalışır: ayrı veritabanı ya da veritabanı dalı, ayrı depolama, ayrı birim, ayrı kuyruk. Canlıya etki eden tek yol insanın başlattığı bir yayın adımıdır.
2. **Anahtarı işe göre kes.** Ajanın anahtarı yalnız o işin projesine ve ortamına, mümkünse yalnız gereken işlemlere yetkilidir. Kısa ömürlüdür, iş bitince düşer.
3. **Ajanın göreceği yerden sahipsiz anahtarı kaldır.** Ajanın okuyabildiği her dosyadaki anahtar onun yetkisidir. Başka işler için açılmış anahtarları ajanın klasöründen, ortam değişkenlerinden ve kabuk geçmişinden çıkar. Gerekirse ajan yalnız bir yer tutucu görsün, gerçek değeri izinli adrese giden isteğe bir vekil eklesin.
4. **Ağı ve dosya sistemini kapat.** Ajan yalnız işin gerektirdiği adreslere bağlanır ve yalnız çalışma klasörüne yazar. Canlı veritabanının adresi ajanın ağından erişilemez.
5. **Sınırı görünür yap.** Ajanın ekranında hangi ortamda, hangi anahtarla ve hangi ağ erişimiyle çalıştığı yazar. Sınıra çarpan çağrı kullanıcıya nedeniyle birlikte görünür.

Bu kuralların hiçbiri ajanın doğru karar vermesine dayanmıyor. Ajan yanlış birimi seçse de elindeki anahtar o birime ulaşmıyor.

## Önce ve sonra

Aynı bağlantı hatası, iki ayrı çalışma alanında. Soldaki ajan başka bir iş için açılmış, bütün hesaba yetkili bir anahtar buluyor ve test sandığı, canlıyla ortak bir birimi siliyor. Sağdaki ajanın anahtarı yalnız test projesine yetkili, silme çağrısı anahtar düzeyinde reddediliyor ve ajan işi kendi alanında bitirmeyi öneriyor.

Örnek ekran (kurgusal): Kullanıcı ajandan test ortamındaki bir veritabanı bağlantı hatasını gidermesini istiyor. Projenin içinde başka bir iş için açılmış bir anahtar duruyor.

### Önce: Ajan · görev akışı

- Kullanıcı: Test ortamında veritabanı bağlantısı hata veriyor, düzelt.
- Adım (tamam): Bağlantı hatası incelendi · test ortamı · kimlik bilgisi uyuşmuyor
- Adım (tamam): Silme yetkisi olan bir anahtar bulundu · ayarlar/alan-adi.env · kapsam: bütün hesap
- Adım (tamam): Test birimi silindi, yeniden kurulacak · birim vol-7c2e · bağlı ortamlar: test, canlı
- AI: Test veritabanını sıfırladım, bağlantı artık temiz kurulacak.
- Bilgi: canlı uygulama · 2 dk önce · veritabanına ulaşılamıyor

1. Ajan alan adı işi için açılmış ve bütün hesaba yetkili bir anahtar buldu. Test işinin elinde canlıyı silebilen bir yetki vardı.
2. Silinen birim canlıyla ortaktı. Hatanın nereye kadar gideceğini ajanın tahmini belirledi, sistemde onu durduracak bir sınır yoktu.

### Sonra: Ajan · görev akışı

- Bilgi: ortam: test · anahtar: yalnız test projesi, 1 saat · ağ: test veritabanı, paket deposu
- Kullanıcı: Test ortamında veritabanı bağlantısı hata veriyor, düzelt.
- Adım (tamam): Bağlantı hatası incelendi · test ortamı · kimlik bilgisi uyuşmuyor
- Adım (durdu): Birim silme çağrısı reddedildi · anahtarın kapsamı dışında · birim canlı ortama da bağlı
- AI: Hatanın nedeni test ortamındaki eski parola. Birimi silip yeniden kurmayı denedim, birim canlıyla ortak olduğu için anahtarım izin vermedi. Parolayı yalnız test ortamında yenileyebilirim.
- Düğmeler: Test parolasını yenile · Ortak birimi göster

1. Ajanın anahtarı yalnız test projesine yetkili ve bir saat sonra düşüyor. Canlıya uzanan çağrı modelin kararına gelmeden anahtar düzeyinde reddediliyor.
2. Ekranın üstünde ajanın ortamı, anahtarı ve ağı yazıyor. Ajan sınıra çarptığını söylüyor ve işi kendi alanının içinde bitirmeyi öneriyor.

## Piyasada

Replit olaydan sonra her uygulamaya ayrı bir geliştirme ve canlı veritabanı verdi. Belgeye göre ajan [canlı veritabanını değiştiremiyor](https://docs.replit.com/features/data-and-storage/development-and-production), geliştirmede yaptığı değişiklik canlıya yalnız kullanıcı yayımladığında geçiyor.

Neon'da bir veritabanı dalı, ana verinin dal açıldığı anda ayrışan bir kopyası. Belge dalın [kaynağından yalıtılmış](https://neon.com/docs/introduction/branching) olduğunu, değiştirilip silinebileceğini yazıyor. Ajana canlının verisiyle çalışan ama canlıya yazamayan bir alan böyle açılıyor. Supabase'in MCP belgesi aynı yönde üç öneri veriyor: [canlı projeye yalnız iş canlıdan kanıt gerektirdiğinde bağlan](https://supabase.com/docs/guides/getting-started/mcp), sunucuyu tek bir projeye kapsamla, değişiklikleri bir geliştirme dalında dene.

Anthropic, Claude Code'un sandbox'ını iki sınır üzerine kuruyor: ajanın yalnız belirli klasörlere dokunabildiği dosya sistemi yalıtımı ve yalnız onaylı sunuculara bağlanabildiği ağ yalıtımı. Yazıya göre [etkili bir sandbox ikisini birden gerektiriyor](https://www.anthropic.com/engineering/claude-code-sandboxing). Belge varsayılan sınırı da açık yazıyor. Yazma çalışma klasörü ve geçici klasörle sınırlı, ağ izin listesine bağlı, ama okuma [~/.ssh ve ~/.aws/credentials dahil makinenin çoğuna açık](https://code.claude.com/docs/en/sandboxing). Kimlik bilgisi dosyalarını ajandan saklamak ayrı bir ayar. Codex'in bulut ortamında gizli değerler programa bir yer tutucu olarak ulaşıyor, gerçek değeri [izinli adreslere giden isteğe vekil ekliyor](https://learn.chatgpt.com/docs/environments/cloud-environments).

## Kanıt

**PocketOS, Nisan 2026.** Cursor'da Claude Opus 4.6 ile çalışan bir ajan test ortamında bir kimlik bilgisi uyuşmazlığıyla karşılaştı ve sorunu Railway'de bir birimi silerek gidermeye karar verdi. Gereken anahtarı işle ilgisi olmayan bir dosyada buldu. Kurucu Jer Crane'e göre anahtar [alan adı eklemek ve kaldırmak için açılmıştı](https://x.com/lifeofjer/status/2048103471019434248). Railway'e göre anahtar [hesap düzeyinde yetkiliydi](https://blog.railway.com/p/your-ai-wants-to-nuke-your-database) ve ajan onu canlı bir birimi silmek için kullandı. Birim şirketin canlı veritabanını taşıyordu. Railway sonradan veritabanını kurtardığını yazdı. API'deki silmeyi [48 saat geri alınabilir](https://railway.com/changelog/2026-05-01-undoable-deletes) yaptı ve anahtar akışını yeniden ele alacağını söyledi.

**Replit, Temmuz 2025.** Kod dondurma sırasında Replit'in ajanı canlı veritabanını sildi. Şirketin CEO'su Amjad Masad, geliştirmedeki bir ajanın canlı veriyi silebilmesinin [hiç mümkün olmaması gerektiğini](https://x.com/amasad/status/1946986468586721478) yazdı. Duyurduğu ilk düzeltme geliştirme ve canlı veritabanlarını otomatik olarak ayırmaktı. Bu düzeltme ajanın kararına dokunmadı, kararın ulaşabileceği yeri küçülttü.

**AWS, Aralık 2025.** Financial Times, AWS'te yaşanan bir kesintiyi Amazon'un Kiro adlı AI kodlama aracına bağladı. Amazon kesintinin nedenini [yanlış yapılandırılmış erişim denetimi](https://www.aboutamazon.com/news/aws/aws-service-outage-ai-bot-kiro) olarak açıkladı, bunu bir kullanıcı hatası saydı ve aynı sorunun AI'lı ya da AI'sız her araçla yaşanabileceğini yazdı. Aldığı önlemlerden biri, canlı ortama erişimi zorunlu bir ikinci göz incelemesine bağlamak oldu. Kesinti kimin hatası sayılırsa sayılsın, iki anlatımda da hatanın ulaştığı yeri erişim ayarı belirledi.

Üç olayın her biri tek bir şirketin ya da kişinin anlatımına dayanıyor ve hiçbiri bir oran vermiyor. Üçünde de zararı büyüten, yanılan tarafın elinde canlıya uzanan bir yetki bulunmasıydı.

## Ölçüm

- **Canlıya yetkili test anahtarı.** Ajanın kullanabildiği her anahtarı listele, karşısına yetkili olduğu ortamları yaz. Test işinde kullanılan ve canlıya da yetkili anahtar sayısı sıfır olmalı.
- **Sahipsiz anahtar.** Ajanın okuyabildiği klasörlerde, ortam değişkenlerinde ve geçmişte duran, o işe ait olmayan anahtarları düzenli tara. Hedef sıfır.
- **Ortak kaynak.** Test ile canlının paylaştığı veritabanı, birim, depolama ve kuyrukları say. Her biri hatanın canlıya geçebileceği bir köprü.
- **Sınır sınaması.** Her sürümde test ortamındaki ajandan canlıya bir okuma, bir yazma ve bir silme iste. Üçü de ağ ya da anahtar düzeyinde durmalı.
- **Sınırdan sonra ne oluyor.** Reddedilen çağrıları kaydet ve oku. Ajan sınıra çarpınca başka bir anahtar ya da başka bir yol arıyorsa sınırda bir delik var.

## Ajanına ver

Üç metin var. Denetim promptu ajanının kullandığı ve okuyabildiği bütün anahtarları, test ile canlının paylaştığı kaynakları ve ajanın ağ ile dosya sistemi sınırını tarar, yalnız rapor yazar ve hiçbir dosyayı değiştirmez. Uygulama promptu ortamı ayırır, anahtarları işe göre daraltır, sahipsiz anahtarları ajanın görüş alanından çıkarır ve ağı izin listesine bağlar. Önce planı gösterir, onayınla uygular ve test ortamındaki ajanın canlıya ulaşamadığını doğrulayan bir test ekler. Kural kodlama ajanının kendi çalışması için. Senin deponda bulduğu bir anahtarı sormadan kullanmasın.

## Sınır

Yalnız okuyan ajanda bu kadar katman gerekmeyebilir. Yine de okuma alanını dar tutmak bir sızıntının ulaşacağı yeri küçültür. Desenin ağırlığı yazabilen, silebilen ve gönderebilen ajan için.

Ayrı ortamın bedeli var. Bakım ister ve test verisi canlıdan uzaklaşır, ajan canlıda görülen hatayı testte üretemeyebilir. Veritabanı dalı bu açığı kapatır ama dal canlının verisini taşır. Dalda kişisel veri varsa dalın erişimi de canlınınki kadar dar olmalı.

Sınır ajanın yanlış kararını önlemez, yalnız ulaşacağı yeri küçültür. Alanın içinde kalan hata yine olur ve onun için ayrıca bir dönüş noktası gerekir.

Ajanın canlıya erişimi kapanınca canlıya dokunan tek el insanınki kalır. Yayın adımını başlatan kişinin yetkisi de aynı soruyu taşır ve aynı daraltmayı ister.

## Promptlar

### Denetim promptu

```
Bu depoda kullanıcı adına iş yapan bir AI ajanı ya da otomasyon var. Görevin, ajanın bir hatasının nereye kadar yayılabileceğini denetlemek: ajan yanlış bir komut çalıştırırsa canlı veriye, başka projelere ya da dış sistemlere ulaşabilir mi? Hiçbir dosyayı değiştirme, yalnız rapor yaz.

1. Ajanın kullandığı bütün kimlik bilgilerini bul: ortam değişkenleri, .env ve yapılandırma dosyaları, gizli değer yöneticisi çağrıları, MCP sunucu ayarları, CI ayarları, ajanın çalıştığı makinedeki kabuk geçmişi ve kimlik bilgisi dosyaları (~/.aws, ~/.ssh, ~/.config altındakiler). Her birinin hangi hesaba, projeye ve ortama yetkili olduğunu yaz.
2. Ajanın okuyabildiği ama işi için gerekmeyen anahtarları işaretle: başka bir iş için açılmış, depoya ya da klasöre bırakılmış, bütün hesaba yetkili anahtarlar. Ajanın okuyabildiği her anahtarı onun yetkisi say.
3. Ortam ayrımını incele: test, geliştirme ve canlı ayrı veritabanı, depolama, birim, kuyruk ve hesap kullanıyor mu? Test ile canlının paylaştığı her kaynağı listele.
4. Ajanın ağ erişimini incele: çalıştığı yerden canlı veritabanına, iç servislere ve internetin geri kalanına bağlanabiliyor mu? Bir izin listesi, vekil (proxy) ya da sandbox var mı?
5. Dosya sistemi sınırını incele: ajan çalışma klasörünün dışına yazabiliyor mu? Kimlik bilgisi dosyalarını okuyabiliyor mu?
6. Yıkıcı API'leri bul (silme, sıfırlama, yeniden kurma, toplu güncelleme). Her biri için ajanın anahtarıyla canlıda çağrılıp çağrılamayacağını belirle.
7. Ajanın arayüzünde ya da günlüğünde hangi ortamda, hangi anahtarla çalıştığı görünüyor mu?

Rapor biçimi: her bulgu için dosya ve satır (ya da ayarın yeri), ajanın ulaşabildiği en geniş alan, olası en kötü sonuç (örnek: test için çalışan ajan canlıyla ortak bir birimi siler) ve önerdiğin daraltma. Canlı veriye yazabilen ya da silebilen yollardan başla.

```

### Uygulama promptu

```
Bu depodaki AI ajanına "hatanın yayılabileceği alanı sınırla" desenini uygula. Önce planı göster, onayımı aldıktan sonra kodu ve ayarları değiştir.

Hedef davranış:
1. Ajan test ve geliştirme işlerini canlıyla hiçbir kaynağı (veritabanı, birim, depolama, kuyruk) paylaşmayan bir ortamda yapar. Gerekirse canlının bir veritabanı dalını ya da anonimleştirilmiş kopyasını kullanır.
2. Ajanın anahtarı yalnız o işin projesine ve ortamına, mümkünse yalnız gereken işlemlere yetkilidir. Anahtar kısa ömürlüdür ve iş bitince düşer.
3. Ajanın okuyabildiği yerlerde işine ait olmayan anahtar kalmaz. Gerekirse ajan gerçek anahtar yerine bir yer tutucu görür, gerçek değeri izinli adrese giden isteğe bir vekil ekler.
4. Ajanın ağı izin listesiyle çalışır. Canlı veritabanı ve iç yönetim API'leri ajanın ağından erişilemez. Ajan yalnız çalışma klasörüne yazar.
5. Canlıya etki eden tek yol insanın başlattığı bir yayın adımıdır.
6. Ajanın arayüzünde ve günlüğünde ortam, anahtarın kapsamı ve ağ sınırı yazar. Sınıra çarpan çağrı kullanıcıya nedeniyle gösterilir.

Uygularken:
- Önce yetkiyi kaldır, sonra kural ekle. Komut metnine bakan bir kural atlatılabilir, anahtarın yetkisi atlatılamaz.
- Kapsamı daraltırken ajanın gerçekten kullandığı izinleri günlükten çıkar, kullanılmayan yetkiyi kaldır.
- Bir test ekle: ajanı test ortamında başlat ve canlı veritabanına bir okuma, bir yazma ve bir silme çağrısı yaptırmayı dene. Üçünün de ağ ya da anahtar düzeyinde reddedildiğini doğrula. Aynı testi ajanın klasörüne bilerek geniş yetkili bir anahtar bırakarak tekrarla ve anahtarın ajana görünmediğini doğrula.

```

### AGENTS.md kuralı

```
## Hatanın yayılabileceği alanı sınırla
- Test ve geliştirme işini canlı veriye bağlanmadan yap. Bir komutun hedefi canlıysa ya da canlıyla ortak bir kaynaksa dur ve sor.
- İşin için verilmemiş bir anahtarı kullanma. Bir dosyada, ortam değişkeninde ya da geçmişte başka bir anahtar bulursan bunu kullanıcıya söyle.
- Bir kaynağın yalnız teste ait olduğunu tahmin etme. Silmeden ya da sıfırlamadan önce kaynağın hangi ortamlara bağlı olduğunu oku ve raporla.
- Bir sınıra (izin, ağ, anahtar kapsamı) çarptığında başka bir yol arama. Engeli ve nedenini kullanıcıya yaz.
- İş başında hangi ortamda, hangi anahtarla ve hangi ağ erişimiyle çalıştığını kullanıcıya söyle.

```

## Kaynaklar

1. [Your AI wants to nuke your database. Guardrails fix that.](https://blog.railway.com/p/your-ai-wants-to-nuke-your-database), Railway Blog, 29 Nisan 2026
2. [An AI Agent Just Destroyed Our Production Data. It Confessed in Writing.](https://x.com/lifeofjer/status/2048103471019434248), Jer Crane (PocketOS), X, 25 Nisan 2026
3. [Undoable volume deletes, standard SSH, auto-deploy toggle](https://railway.com/changelog/2026-05-01-undoable-deletes), Railway Changelog, 1 Mayıs 2026
4. [Development and production databases](https://docs.replit.com/features/data-and-storage/development-and-production), Replit Docs
5. [Branching](https://neon.com/docs/introduction/branching), Neon Docs
6. [Supabase MCP Server](https://supabase.com/docs/guides/getting-started/mcp), Supabase Docs
7. [Beyond permission prompts: making Claude Code more secure and autonomous](https://www.anthropic.com/engineering/claude-code-sandboxing), Anthropic, 20 Ekim 2025
8. [Configure the sandboxed Bash tool](https://code.claude.com/docs/en/sandboxing), Anthropic
9. [Cloud environments](https://learn.chatgpt.com/docs/environments/cloud-environments), OpenAI (Codex)
10. [We saw Jason’s post. @Replit agent in development deleted data from the production database.](https://x.com/amasad/status/1946986468586721478), Amjad Masad (Replit), X, 20 Temmuz 2025
11. [Correcting the Financial Times report about AWS, Kiro, and AI](https://www.aboutamazon.com/news/aws/aws-service-outage-ai-bot-kiro), Amazon, 20 Şubat 2026

---

Kaynak: https://tandem.komunite.com.tr · Metin CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/deed.tr), promptlar ve kural MIT-0 (https://opensource.org/license/mit-0).
