İçeriğe geç
ivralo
Bölümler

Dokümantasyon / Incident'lar

Gizlilik ve maskeleme

Production log'ları, kullanıcılarınızın gönderdiği verileri içerir. Bu sayfada ivralo'nun bu log'ları barındırılan bir modele ne zaman göstermediği, maskelemenin host'ları, adresleri ve müşteri id'lerini nasıl yer tutucularla değiştirdiği ve gerçek değerlerin nerede geri konduğu anlatılıyor.

Kanıtlar varsayılan olarak makinede kalır

Kanıtları okuyacak model bu makineden başka bir yerde çalışıyorsa incident aracı bundle'ı reddeder ve izin vermek için hangi ayarın gerektiğini söyler. Hesaba katılan modeller Investigator'ın modeli, bir de liderin ve bellek modelinin modelleridir; çünkü cevap ve oturum onlardan da geçer. Hangi modellerin barındırılan sayıldığı Modeller sayfasında; ivralo doctor da gizlilik notunun yanında barındırılan bir çalıştırmaya izin verilip verilmeyeceğini gösterir.

İzin vermek için:

NasılKapsam
ivralo incident --hostedYalnızca bu çalıştırma.
ivralo pilot run <pack> --hostedYalnızca bu pilot.
Ana dizindeki .env dosyasında IVRALO_INCIDENT_HOSTED_MODEL=trueOturum, yerel API ve alarm alımı dahil bütün çalıştırmalar.

Yalnızca izin vermek yetmez. Barındırılan bir çalıştırma için ayrıca maskelemenin açık olması ve sizin tanımladığınız en az bir kural olması gerekir; yoksa çalıştırma, neyin eksik olduğunu söyleyen bir cümleyle reddedilir.

IVRALO_INCIDENT_HOSTED_MODEL=true
IVRALO_INCIDENT_MASK=true

Yerleşik kurallar yalnızca IP ve e-posta adreslerini kapsar. Sizin bir kuralınız olmadan bütün host ve müşteri adları dışarı çıkardı; bu yüzden ivralo hiç başlamaz.

Bu ret çalışma alanını değil, incident araçlarını korur. Dosya araçları çalışma alanını yine okuyabilir. Bunu, kanıtların normalde izlediği yola konmuş bir korkuluk olarak düşünün.

Maskelemeyi açmak

IVRALO_INCIDENT_MASK=true

Maskeleme varsayılan olarak kapalıdır; açıldığında yerel modelde de aynı şekilde çalışır. Açıkken incident araçlarının modele verdiği her metin önce maskelenir: digest, kayıt aracının cevap olarak döndürdüğü rapor ve çalıştırmadaki diğer bütün araç sonuçları. Her tanımlayıcı <host-1>, <ip-3> ya da <customer-2> gibi bir yer tutucuya dönüşür.

  • Yer tutucu, yerine geçtiği değer hakkında hiçbir şey ele vermez: ne baş harflerini, ne alan adını, ne de uzunluğunu.
  • Aynı değer, repo'daki her çalıştırmada ve her Investigator'da aynı yer tutucuyu alır; bir kez verilen yer tutucu asla yeniden numaralanmaz.
  • Maskeleme satır satır çalışır ve satır sonunu hiçbir zaman aşmaz; böylece maskelenmiş digest'teki app.log:12 yine dosyanızın 12. satırını gösterir.

identifiers.json

Neyin maskeleneceğini identifiers.json dosyasında tanımlarsınız. ivralo iki dosya okur ve türe göre birleştirir:

  • ana dizindeki identifiers.json, bütün çalışma alanları için (yerini IVRALO_IDENTIFIERS ile değiştirebilirsiniz);
  • repo'daki .ivralo/identifiers.json; desenler taramada çalışan kod olduğu için yalnızca klasöre güvendikten sonra okunur.
{
  "patterns": {
    "host": ["[a-z0-9-]+(\\.[a-z0-9-]+)*\\.prod\\.example\\.com"]
  },
  "literals": {
    "customer": ["ACME-0042", "globex"],
    "host": "web1"
  },
  "builtin": true
}
AnahtarAnlamı
patternsTürden Python regex'lerine eşleme (tek bir string ya da liste). Büyük/küçük harf duyarsız eşleşme için (?i) kullanın.
literalsTürden birebir adlara eşleme (tek bir string ya da liste). Harf büyüklüğüne bakmadan ve yalnızca bütün bir ad olarak eşleşir: web1, web1.prod.example.com'u ve WEB1'i maskeler; ama web10'un ya da web1-canary'nin bir parçasını asla maskelemez.
builtinVarsayılanı true. false, yerleşik ip ve email türlerini kapatır.

Tür (kind), en fazla 32 karakterlik, küçük harfli bir addır: bir harfle başlar, ardından harf, rakam ya da _ gelir. Yer tutucunun adını belirler: host türü <host-1> üretir.

Yerleşik ip türü IPv4'ü, IPv6'yı tam ve kısaltılmış biçimleriyle (::1, fe80::) ve bir adresi içinde taşıyan bulut host adlarını (ip-10-0-0-5) tanır. Yerleşik email türü e-posta adreslerini yakalar.

İki kural çakıştığında, örneğin db-1.prod.example.com üzerinde hem bir host deseni hem bir alan adı deseni eşleştiğinde, parçanın tamamı daha uzun eşleşmenin adını taşıyan tek bir yer tutucuya dönüşür; böylece bir adın hiçbir parçası açıkta kalmaz.

Dosyada bir sorun varsa, örneğin derlenmeyen bir desen ya da büyük harfli bir tür, okuma durur ve sorun belirtilir. Bozuk bir kural tanımlayıcıları dışarı sızdırırdı; bu yüzden ivralo yarım maskelemektense hiç çalışmamayı seçer.

mask.json: eşleme tablosu

Bir çalışma alanında verilen bütün yer tutucular tek bir dosyada tutulur:

.ivralo/incidents/mask.json
{
  "placeholders": {
    "<host-1>": "db-1.prod.example.com",
    "<ip-1>": "10.0.4.17",
    "<customer-1>": "ACME-0042"
  }
}

Bu dosyaya yalnızca kayıt eklenir. Yeni bir yer tutucu, dosya yeniden okunduktan sonra bir kilit altında seçilir; böylece aynı anda çalışan iki inceleme aynı değere hiçbir zaman iki farklı yer tutucu vermez. Dosya gerçek değerleri içerdiği için git'in yok saydığı .ivralo/ altında durur. Bir oturumdaki ya da bir trace'teki yer tutucunun neyin yerine geçtiğini öğrenmeniz gerektiğinde bu dosyaya bakın.

Windows'ta kilit yalnızca tek bir süreç içinde geçerlidir; orada aynı çalışma alanında aynı anda iki inceleme çalıştırmayın.

Neler, nerede geri konur

Yerİçeriği
report.md, report.jsonGerçek değerler. Investigator'ın yazdıkları (neden, referanslar, karara bağlayamadıkları) rapor kontrol edilip yazılmadan önce gerçek değerlere çevrilir. Alıntılanan satırlar her zamanki gibi bundle'dan kopyalanır.
Oturumdaki cevapYer tutucular.
Saklanan oturum, bir trace, kaydedilmiş bir cassetteModelin yazdığı haliyle yer tutucular.
ivralo whyİster raporu ister cevabı alıntılayın, mask.json üzerinden gerçek satıra ulaşır.

Dışarıya erişen araçlar

Maskelenmiş bir çalıştırmada Investigator bir yer tutucuyu arayabilir. Yalnızca repo'yu okuyan bir araç, örneğin grep ya da dosya okuma, argümanında gerçek değeri alır; çünkü makineden hiçbir şey çıkmaz. Dışarıya erişebilen her araç ise (shell, Python, web, mesaj gönderme, bir MCP sunucusunun aracı ya da hiçbir contract bildirmeyen bir araç) yer tutucuyu alır.

ivralo buna bir araç listesine bakarak değil, her aracın ne yaptığını bildirdiği contract'a bakarak karar verir; böylece dışarıya erişen yeni bir araç eklendiğinde o da otomatik olarak kapsanır.

Maskeleme incident araçlarını korur. ivralo'nun kendi kimlik bilgileri ise, maskeleme açık olsun ya da olmasın, bütün araç sonuçlarından zaten gizlenir.