Skip to content

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ı)

PaketAudit retention
Başlangıç1 yıl
Profesyonel3 yıl
SMMM7 yıl (VUK uyumu)
Kurumsal10 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.

  1. Her row için row_hash = SHA256(prev_hash + canonical_json(row))
  2. Bir önceki row'un hash'i mevcut row'a girdi
  3. Bir row değişirse sonrasındaki tüm hash'ler bozulur → tampering tespit edilir
  4. 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:

  1. Soft delete — Kullanıcı erişimi kapatılır; veriler 30 gün grace
  2. 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
  3. 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.

KVKK + TTK + VUK uyumlu yedekleme platformu