Kayıt Tutma ve Audit Log
Audit log nedir?
Her hesap işlemi (login, snapshot, restore, share, delete, ödeme, ayar değişikliği) audit_log tablosuna işlenir. Bu kayıt:
- KVKK § 12 veri güvenliği yükümlülüğü için delil
- VUK denetiminde işlem geçmişi
- Olası dava süreçlerinde adli delil
- İç güvenlik (kötüye kullanım tespiti)
Retention süreleri (paket bazlı)
| Paket | Audit retention |
|---|---|
| Başlangıç | 1 yıl |
| Profesyonel | 3 yıl |
| SMMM | 7 yıl (VUK uyumu) |
| Kurumsal | 10 yıl (TTK m.82 uyumu) |
Süre dolduğunda audit log otomatik silinir (KVKK § 12 ihtiyaç süresi geçen veri).
Retention extend
Vergi denetimi veya dava süreci varsa retention_locked bayrağı işaretlenir; süre dolsa bile silme engellenir. Süreç bittiğinde admin paneli üzerinden bayrak kaldırılır.
Audit log içeriği
{
"id": "uuid",
"account_id": "uuid",
"actor_user_id": "uuid",
"action_type": "snapshot.created",
"target_resource": "snapshot/abc123",
"ip_address": "192.168.1.10",
"user_agent": "PratikYedek Desktop 1.0.4 (Windows 11)",
"metadata": { "size_bytes": 8400000 },
"created_at": "2026-05-11T14:32:00Z",
"prev_hash": "ab7f...",
"row_hash": "c9d2..."
}Hash chain integrity
Audit log immutable: admin bile geriye dönük değiştiremez.
- Her row için
row_hash = SHA256(prev_hash + canonical_json(row)) - Bir önceki row'un hash'i mevcut row'a girdi
- Bir row değişirse sonrasındaki tüm hash'ler bozulur → tampering tespit edilir
- Genesis row (account oluşturma) initial hash
Doğrulama: pnpm --filter @pratikyedek/api audit:verify komutu chain'i baştan sona kontrol eder.
Audit görüntüleme (admin panel)
/admin/audit sayfası:
- Tarih + actor + action_type + IP filtreli arama
- CSV export (denetim için)
- KVKK § 12 IP mask seçeneği (
192.168.•.•) - User agent Tooltip ile detay
KVKK § 11/e — Silme talebi
Kullanıcı silme talep ederse:
- Soft delete — Kullanıcı erişimi kapatılır; veriler 30 gün grace
- Hard delete — 30 gün sonra:
- Object storage chunk'ları irreversibly silinir
- Postgres rows DELETE
- Audit log içinde PII fields anonimleşir (ad/e-posta/IP → null veya hash)
- Audit log kayıt olarak kalır (silme delili) — sadece içerik temizlenir
- Audit kanıtı — "user X data deleted at T" işlemi audit_log'a yeni row olarak işlenir
Retention_locked
Vergi denetimi devam ediyorsa silme otomatik ertelenir; denetim bittiğinde tetiklenir. Bu durumda kullanıcıya bilgilendirme e-postası gider.
VUK + TTK denetim hazırlığı
- VUK m.253: 5 yıl saklama → Başlangıç/Profesyonel paket yeterli değil; SMMM paket gerekir
- TTK m.82: 10 yıl saklama → Kurumsal paket
- Audit CSV export GİB e-Denetim formatına yakın (denetim sırasında hızlı sunum)
SuperAdmin denetimi
PratikYedek iç ekibi (Berhan) audit_log'a sadece kendi action'ları ile erişebilir (RLS ile sınırlı). "PratikYedek personeli kullanıcı verilerine baktı" tespit edilebilir:
- SuperAdmin loginleri ayrı log'a yazılır
- Customer support workflow'unda audit + customer consent şart
- Şeffaflık raporu yıllık yayınlanır
Sıkça sorulanlar
Eski audit log gerçekten silinir mi yoksa "soft delete" mi?Gerçekten silinir. Retention süresi dolduğunda DELETE FROM audit_log + storage vacuum. Geri getirilemez. Bu, KVKK § 12 "veri sadece gerekli süre tutulur" ilkesinin uygulanmasıdır.
Hash chain bozulursa ne olur? CI'da otomatik integrity check çalışır; bozulma tespit edilirse:
- Yönetici e-postası uyarı
- İlgili tarih aralığı audit dışı (delil değer kaybı)
- Sebep araştırılır (genelde DB recovery sonrası)
Audit CSV'yi mahkemeye sunabilir miyim? Evet. CSV içinde hash chain de bulunur; bilirkişi audit:verify ile doğrulayabilir.
KVKK İlgili Kişi başvurusu yapan kullanıcının audit log'unu paylaşmam gerekir mi? Evet — KVKK § 11/b "kendisine ait verilerin işlenip işlenmediği ve nasıl işlendiği" bilgisi. Audit log kullanıcıya CSV olarak verilir; başkalarının PII'sı maskelenir.

