Güvenlik & KVKK Uyum Notları (Faz 3)¶
Bu belge, Etki'nin veri koruma ve denetlenebilirlik tasarımını özetler. Konsept aşamasıdır; üretim dağıtımında hukuk/uyum ekibiyle doğrulanmalıdır.
Veri ikametgâhı (data residency)¶
- LLM varsayılan kapalıdır — anahtar yoksa sistem deterministik/sezgisel çalışır ve hiçbir veri dışa gitmez (sözleşme, kod ve efor verisi kurum içinde kalır). LLM açıkken (Anthropic Claude API) triyaj/sohbet için ilgili veri LLM sağlayıcısına gider; bu bir bulut LLM olduğundan veri sınır-ötesi aktarımı KVKK m.9 kapsamında değerlendirilmeli ve gerekli aydınlatma/onam/aktarım şartları sağlanmalıdır.
- Proje özelinde LLM profili / dil / pivot: triyaj LLM yolunda talep + ilgili kapsam maddeleri + kod modül kimlikleri yapılandırılmış LLM sağlayıcısına gönderilir; proje çıktı dili ve alan profili istemi şekillendirir. Pivot çeviri açıksa girdi/çıktı ek bir çeviri çağrısıyla da işlenir (daha fazla LLM teması) — bulut LLM'de bu da sınır-ötesi aktarım sayılır.
- Arayüz dili (TR/EN/DE) salt sunum metnidir; veri işleme/aktarımı değiştirmez.
- Kalıcılık (Postgres) kurum içi ağda tutulur.
VERBİS & DPIA¶
- VERBİS: Kişisel veri işleniyorsa (ör. ticket atayan/atanan kullanıcı adları) veri sorumlusu sicil kaydı gerekebilir.
- DPIA (etki değerlendirmesi): Sistem profilleme/otomatik karar önerisi ürettiğinden GDPR-tarzı DPIA önerilir. Ancak karar otomatik DEĞİLDİR — nihai karar PMO'dadır (insan-yetkilendirmesi), bu da otomatik-karar riskini azaltır.
Denetlenebilirlik (audit)¶
- Her triyaj + insan aksiyonu
audit_eventstablosuna tutarlı kimlik, aktör, zaman damgası, model/prompt sürümü ve kanıtla yazılır → her karar sözleşmesel ihtilaf için yeniden kurgulanabilir (GET /casefiles/{id}/audit). - Model/prompt sürümü ve indeks tazeliği her kararda saklanır.
- Aktif plugin seti de her kararda saklanır (
plugin_set:ad@versiyon[+gcommit], git kurulumlarında commit hash'i dahil) — hangi adaptör kodunun kanıtı ürettiği sonradan kanıtlanabilir. Plugin'siz kurulumda boş listedir.
Plugin envanteri (üçüncü-taraf adaptörler)¶
- Kurulu plugin'ler, sürümleri ve durumları
python -m etki.plugin list --jsonile makine-okunur alınır — VERBİS/DPIA envanterine bu çıktı eklenmelidir. - Her plugin, manifest'inde (
etki-plugin.toml) güvenlik yetenek beyanı taşır: ağ erişimi, dosya-sistemi erişimi, dış-sisteme-yazma (external_write) ve beyan edilen dış uçlar (endpoints). Bir plugin sözleşme/talep verisine adaptör olarak erişebilir → kuruma alınmadan önce bu beyan incelenmeli, beyan edilen dış uçların veri ikametgâhı kurallarına uygunluğu doğrulanmalıdır. (Beyanın teknik olarak zorlanması — sandbox — plan Faz 6'dadır; bugünkü kontrol kurulum onayı + envanterdir.) - Talep alma / geri yazma (
RequestIntakeProvider/ResponseChannel, etki-api 0.1.2): bir intake adaptörü dış tracker'dan talep metni çeker (kişisel veri içerebilir — triyaj girdisiyle aynı kurallara tabidir) veexternal_writebeyan eden bir yanıt kanalı, karar özetini (karar, efor bandı, madde referansları) sınır DIŞINA, tracker'a yorum olarak gönderir; yorumun görünürlüğü tracker'ın kendi erişim kontrollerine tabidir. Her geri yazma vakanın audit zincirineRESPONSE_POSTED(kullanıcı=system, trigger, ok/hata, gönderilen metin) olarak, süreç günlüğüne deintake/intake_responseolayı olarak işlenir. - Tedarik zinciri: varsayılan politika
verified_only— yalnızca imzalı marketplace index'inden doğrulanan plugin'ler kurulur/yüklenir (uzak index'te sigstore imzası zorunlu, artifact SHA-256 kurulumdan ÖNCE doğrulanır; lockfile girdisiverified = trueişaretlenir). Hava-boşluklu ortamda imza çevrimiçi tarafta mirror anında doğrulanır, içeride karma doğrulaması zorunlu kalır (docs/RUNBOOK.md§Plugins). Git/wheel kurulumu bilinçli operatör kararıdır (ETKI_PLUGIN_POLICYenv — UI'dan değiştirilemez). Arayüzden kurulum varsayılan kapalıdır; operatörETKI_PLUGIN_UI_INSTALL=true(yalnızca ortam değişkeni) ile açarsa pmo kullanıcısı SADECE imzalı index yolundan kurabilir — kaynak env-pinli, her kurulum süreç günlüğüneplugin_installolayı olarak (kullanıcı + plugin + SHA-256) yazılır. - Süreç günlüğü (
.etki/process-log.jsonl, gitignore'da): Sor ekranı soruları (soru → strateji → eşleşen düğümler → asistan yanıtı), indeksleme koşuları ve talep alma olayları (intake= çekilen talep,intake_response= geri yazma) buraya eklenir. Sorular ve talep metinleri serbest metin olduğundan kişisel veri içerebilir — dosya veritabanıyla aynı ikametgâh/erişim kurallarına tabidir; KVKK silme talebinde dosyadan ilgili satırlar ayıklanmalıdır.
Karar wiki'si (dosya-tabanlı karar hafızası)¶
- Her triyaj kararı
.etki/wiki-{proje}/decisions/altına markdown olarak projeksiyon edilir (tek doğruluk kaynağı veritabanıdır; wikipython -m etki.wiki rebuildile her an yeniden üretilebilir). - Bu dosyalar talep metnini ve karar gerekçesini içerir → talep metinlerinde kişisel veri geçiyorsa wiki dizini de kişisel veri barındırır. Dizin veritabanıyla aynı ikametgâh/erişim kurallarına tabi tutulmalıdır: kurum içi disk, git'e gönderilecekse yalnız kurum içi depo.
- Proje silindiğinde wiki dizini (DB'deki vaka geçmişi gibi) korunur — denetim izinin okunur projeksiyonudur. KVKK silme talebi (m.7) gelirse ilgili vaka DB'den silindikten sonra
rebuildçalıştırmak wiki'den de düşürür.
Erişim kontrolü (RBAC)¶
- Kimlik doğrulama gerçek login (pbkdf2-hash'li parola + imzalı session cookie); eski self-asserted
X-Roleheader kaldırıldı → rol artık doğrulanmış oturumdan okunur. - Roller:
pmo(onaylar + kullanıcı/ayar yönetimi),engineer(triyaj/analiz çalıştırır),viewer(salt-okur — tüm yazma uçları 403 döner). Onay endpoint'leri yalnızcapmo. - Proje izolasyonu: kullanıcı yalnız grant verilen projeleri görür (
user_projectstablosu); erişimsiz proje 404 döner (projenin varlığı sızdırılmaz); portföy sayacı yalnızpmo'ya görünür. Kullanıcı/grant yönetimi arayüzden yapılır (Ayarlar → Kullanıcılar, pmo; kendini silme ve son PMO'yu silme/düşürme engellidir). - Oturum güvenliği: login denemesi sınırlı (IP+kullanıcı başına 15 dk'da 5 hata → 15 dk kilit); login sonrası yönlendirme yalnız site-içi yollara izinli (open-redirect koruması); oturumlar parola hash'ine token ile bağlıdır — parola sıfırlama/kullanıcı silme açık oturumları bir sonraki istekte düşürür, rol değişikliği anında etkir; "beni hatırla" sunucu tarafında zorlanır (işaretli 30 gün / işaretsiz 8 saat).
- LLM anahtarları: arayüzden (Ayarlar → Yapay Zekâ Asistanı) kaydedilirse
.etki/llm.jsondosyasında tutulur (yalnız dosya sahibi okur, git dışıdır) ve forma asla geri yazılmaz; üretimde önerilen yol ortam değişkenidir. - Plugin adaptör anahtarları: eklenti detay sayfasından (Ayarlar → Eklentiler → eklenti) girilen varsayılan seçenekler
.etki/plugin-options.jsondosyasında tutulur (0600, git dışı); api_key/token gibi gizli alanlar forma asla geri yazılmaz ve boş bırakılan gizli alan kayıtlı değeri korur. Değerlerenv:DEĞİŞKENreferansı olarak da girilebilir — üretimde önerilen yol budur. - Üretim sertleştirmesi (yapılacak): uygulama önüne kimlik-doğrulamalı reverse-proxy + iç ağ izolasyonu + merkezi kimlik (OAuth/SSO). Uygulama-katmanı RBAC bunun sınırıdır.
Aşırı-güven (over-reliance) kontrolü¶
- PMO'nun önerileri yalnızca "onaylamadığını" (rubber-stamping) ölçmek için override/düzeltme oranı izlenir (proje Raporlar ekranı,
GET /projeler/{id}/raporlar). Yüksek oran → eşik kalibrasyonu (geri besleme döngüsü).
İdari para cezaları¶
- KVKK idari para cezaları yıllık yeniden değerlenir; veri güvenliği ihlali bandı yüksektir → "by-design" uyum (LLM varsayılan kapalı, audit, RBAC) zorunludur.