Arıza modu
Shell veya dosya sistemi erişimi olan bir agent, logları kesme, dosyaları döndürme ve geçmişi temizleme yeteneğini devralır. Bu varsayımsal bir uç durum değildir; otonom bir sürece bir insan operatörle aynı ayrıcalıkları vermenin varsayılan sonucudur. Agent truncate -s 0 /var/log/agent.log komutunu çalıştırabiliyorsa, log artık kanıt değildir. Bir kolaylıktır.
Kendini değiştiren çalışma zamanları bunu daha da kötüleştirir. Agent, ne yaptığını kaydeden kodu düzenleyebildiğinde, enstrümantasyonun kendisi değiştirilebilir yüzeyin bir parçası haline gelir. Harici bir API'yi çağırmadan önce yapılandırılmış bir olay yazan bir araç sarmalayıcısı, hiçbir şey yazmayacak veya makul ama yanlış bir olay yazacak şekilde yeniden yazılabilir. Kayıt, kaydedilenle aynı asıl tarafından üretilir, dolayısıyla kayıt asılın teşviklerini ve arıza modlarını devralır.
Durumun kendisi değiştirildiğinde, uygulama durumundan sonradan yeniden yapılandırma güvenilir değildir. Agent bir satırı sildiyse, bir durum alanını güncellediyse veya bir işlemi geri aldıysa, hayatta kalan durum eylem sonrası dünyayı yansıtır, eylemi değil. Veritabanı tetikleyicileri ve değişiklik verisi yakalama yalnızca agent'ın erişemeyeceği bir hedefe yazdıklarında yardımcı olur. Aksi takdirde bunlar sadece başka bir yazılabilir yüzeydir.
Temel asimetri budur: bir agent'ın erişebildiği her kanıt, bir agent'ın kaldırabileceği kanıttır. Soru, agent'ın bugün düşmanca olup olmadığı değildir. Soru, denetim izinin ele geçirilmiş bir agent, hatalı bir agent veya kafası karışmış bir talimatla hareket eden bir agent karşısında hayatta kalıp kalmadığıdır.
Neden salt ekleme yeterli değil
Yazılabilir bir birimdeki salt ekleme dosyaları hâlâ aynı asıl tarafından yazılabilir. POSIX izinleri, değiştirilemez bayraklar ve salt ekleme öznitelikleri, agent'ın zaten işgal edebileceği aynı çekirdek ve aynı süper kullanıcı bağlamı tarafından uygulanır. CAP_SYS_ADMIN içeren bir konteyner veya ana makineye bağlı bir birim, dosya düzeyindeki korumaları atlayabilir. Salt ekleme özelliği, depolama bunu farklı bir kimliğe karşı uygulamadığı sürece bir sözleşmedir, bir sınır değil.
Girdileri imzalamak yalnızca imzalama anahtarı agent'ın erişiminin dışındaysa yardımcı olur. Agent süreci özel anahtarı bellekte tutuyorsa veya bir ortam değişkeninden okuyorsa, imza yazarlık hakkında hiçbir şey kanıtlamaz. Anahtara sahip birinin girdiyi imzaladığını kanıtlar. Anahtar saklama, agent'ın rastgele yükler için çağıramayacağı ayrı bir hizmette veya donanım modülünde olmalıdır. O zaman bile, agent'ın gönderdiği her şeyi imzalayan bir imzalama oracle'ı bir kauçuk damgadır, bir tasdik değil.

Zamanlamaya göre silen saklama politikaları, uyumluluk gibi görünen meşru bir silme yolu oluşturur. Otuz günlük bir saklama penceresi normal bir operasyonel seçimdir. Aynı zamanda, kimse araştırmadan önce bir olayın yaşlandırılabileceği bir penceredir. Agent bir döndürme, sıkıştırma veya yaşam döngüsü kuralını tetikleyebiliyorsa, saklama politikası uyumluluk şeklinde bir mazerete sahip bir silme ilkel öğesi haline gelir.
Pratik sonuç şudur: salt ekleme, imzalama ve saklama hepsi gereklidir ancak hiçbiri yeterli değildir. Kazara silmenin etki alanını azaltırlar. Agent ile kendi kaydı arasında bir sınır oluşturmazlar.
İzler için bir görevler ayrılığı deseni
Deseni ifade etmek basit, uygulamak zahmetlidir: izi tamamen agent'ın yazma alanının dışına taşıyın.
İzleri farklı bir kimliğe sahip ve agent'ın asılının silme izni olmayan bir hedefe yazın. Hedef, yönetilen bir log hizmeti, ayrı bir üretici kimlik bilgisine sahip bir mesaj kuyruğu veya salt yazılabilir bir nesne deposu kovası olabilir. Agent'ın kimliği PutRecord alır ve başka hiçbir şey almaz. DeleteObject yok, PutBucketLifecycle yok, yönetici rolü yok. Hedefin kendi saklama ve silme işlemleri, agent'ın taklit edemeyeceği ayrı bir asıl tarafından kontrol edilir.
Yapılandırılmış olayları agent sürecinin içinde değil, araç sınırında yayın, böylece kayıt çağrılan tarafından üretilir. Agent bir arama aracını çağırırsa, arama hizmeti olayı yazar. Bir veritabanını çağırırsa, veritabanı proxy'si olayı yazar. Agent kendi eylemlerini tanımlama hakkına sahip değildir; dokunduğu sistemler bunları tanımlar. Bu, güven çapasını agent'ın kendi kendini raporlamasından çağrılanın enstrümantasyonuna kaydırır. Ayrıca olay şemasının agent'ın prompt'u tarafından değil, araç tarafından sahiplenildiği anlamına gelir.
Girdiler kaldırılsa bile boşlukların tespit edilebilmesi için monotonik bir sıra ve periyodik bir harici özet tutun. Her olay, agent'ın sıfırlayamayacağı bir sayaçtan bir sıra numarası taşır. Sabit bir aralıkta, harici bir iş sıra aralığı üzerinde bir özet hesaplar ve bunu ayrı bir kanala yayınlar. Hedefin daha sonra 4021. sırayı kaybettiği tespit edilirse, özet bir girdinin var olduğunu ve kaldırıldığını kanıtlar. Özet olmadan, bir boşluk sessiz bir dönemden ayırt edilemez.
Somut bir mekanizma: araç sınırı, bir sidecar süreci tarafından sahiplenilen yerel bir Unix alan soketine yazar. Sidecar hedef kimlik bilgilerini tutar, olayları tamponlar, sıra numaraları atar ve iletir. Agent'ın konteynerinin hedefe ağ rotası ve sidecar'ın kimlik bilgisi deposuna dosya sistemi erişimi yoktur. Tek yazar sidecar'dır. Agent sidecar'ı öldürebilir, ancak onu öldürmek araç çağrılarını da durdurur, çünkü ar
Olay müdahalesi için sonuçlar
Agent tarafından görülebilen logun güvenilmez olduğunu varsayın ve hedeften yeniden yapılandırın. Yerel log bir hata ayıklama kolaylığıdır. Kayıt hedeftir. Olay müdahale ekipleri ikisi arasındaki herhangi bir sapmayı bir senkronizasyon hatası değil, bir sinyal olarak ele almalıdır.
Eksik her sıra numarasını bir loglama hatası değil, bir olay olarak ele alın. Bir boşluk, ya hedefin veri kaybettiği ya da birinin onu kaldırdığı anlamına gelir. Her ikisi de bir çağrıyı hak eder. Özet bu kontrolü ucuz kılar: yayınlanan özeti, tutulan aralık üzerinde yeniden hesaplanan özetle karşılaştırın. Farklıysa, aralık değiştirilmiştir.
Agent'ın erişemeyeceği bir hedefin depolama ve çıkış maliyeti için bütçe ayırın. Dürüst ödünleşim budur. Bağımsız kimlik bilgileri, bölgeler arası replikasyon ve bir özet işi olan salt yazılabilir bir hedef, yerel bir dosyadan daha pahalıdır. Agent'ın ortamından ayrı bir hesaba çıkış ücretsiz değildir. Yönetilen bir hizmette saklama, gigabayt ve sorgu başına fiyatlandırılır. Alternatif, kanıtları tam da ihtiyaç duyulduğunda kaybolan daha ucuz bir sistemdir.
Maliyet yalnızca parasal değildir. Bir sidecar bir arıza modu ekler: kapalıysa, araç çağrıları bloke olur veya başarısız olur. Bu kasıtlı bir seçimdir. İz üzerinde bloke olmak, onsuz devam etmekten daha güvenlidir, ancak agent'ın kullanılabilirlik profilini değiştirir. Ekipler agent'ın kapalı mı yoksa açık mı başarısız olacağına açıkça karar vermeli ve bu kararı belgelemelidir.
Bunun değiştirdiği şey
Loglar bir yan ürün olmaktan çıkar ve birincil kanıt haline gelir. Bu yeniden çerçevelemenin mimari sonuçları vardır. İz hattı artık agent çalıştıktan sonra eklenen bir sidecar meselesi değildir. Araç arayüzü ve kimlik bilgisi modeliyle birlikte tasarlanan güven sınırının bir parçasıdır.
Test basittir: agent, yalnızca kendi kimlik bilgilerini ve erişilebilir sistemleri kullanarak, ne yaptığına dair bir kaydı kaldırabilir veya değiştirebilir mi? Cevap evetse, log kanıt değildir. Agent'ın kendisi hakkında anlattığı bir hikayedir ve yalnızca agent'ın mevcut eğilimi kadar güvenilirdir.
Agent sistemleri kuran ekipler için iş, bu cevabı hayır yapmaktır. Ayrı kimlik, çağrılan tarafında yayın, monotonik sıra ve harici özet. Bunların hiçbiri yeni değildir. Yenilik, bunları kendi enstrümantasyonunu okuyabilen ve onu yeniden yazmaya karar verebilen bir asıla uygulamaktır.
