> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mmmytics.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Güvenlik & KVKK

> Veri lokasyonu, encryption, audit log, RBAC, KVKK Madde 12, GDPR right to erasure.

# Güvenlik & KVKK Uyumluluğu

MMMytics tamamen **KVKK (6698 sayılı Kanun)** uyumlu olarak tasarlanmıştır.

## Veri Lokasyonu

<Note>
  **Tüm Türk müşteri verileri AB bölgesinde (Frankfurt, eu-central-1)** tutulur. ABD bölgesi transferi YASAK'tır.
</Note>

| Servis                  | Region                                                 |
| ----------------------- | ------------------------------------------------------ |
| Frontend (Vercel)       | Global Edge + Frankfurt origin                         |
| Backend API (Cloud Run) | europe-west1 (Frankfurt)                               |
| Engine (ML, GPU)        | europe-west1 (Frankfurt)                               |
| Database (Supabase)     | eu-central-1 (Frankfurt)                               |
| Storage (Supabase)      | eu-central-1 (Frankfurt)                               |
| Sentry (error tracking) | US (KVKK riskli — enterprise için EU SaaS planlanıyor) |

## Encryption

### At Rest

* **Supabase Postgres:** AES-256 native encryption
* **Supabase Storage:** AES-256
* **Vercel env vars:** Encrypted, **Sensitive** flag aktif (dashboard reveal kapalı)

### In Transit

* **HTTPS/TLS 1.3** zorunlu (HTTP yönlendirme + HSTS)
* **API to backend:** TLS 1.3
* **Database connections:** TLS 1.3

## Audit Log (KVKK Madde 12)

Tüm kritik aksiyonlar otomatik kayıt altına alınır:

| Aksiyon Tipi        | Örnek                                      |
| ------------------- | ------------------------------------------ |
| **Veri girişi**     | upload (CSV upload)                        |
| **Veri silme**      | delete dataset, account deletion           |
| **Veri güncelleme** | edit week, edit blueprint                  |
| **Model run**       | model\_run\_started, model\_run\_completed |
| **Org yönetimi**    | organisation\_created, user\_invited       |
| **Veri export**     | data\_export\_requested                    |

### Audit Log Schema

```sql theme={null}
audit_logs (
  id UUID,
  action TEXT,             -- "model_run_started"
  entity_type TEXT,        -- "model_run"
  entity_id UUID,          -- run UUID
  actor_id UUID,           -- user UUID
  org_id UUID,             -- isolation
  ip_address INET,         -- IPv4 last-octet masked
  user_agent TEXT,
  metadata JSONB,
  created_at TIMESTAMPTZ
)
```

**Retention:** 90 gün (KVKK + güvenlik meşru menfaat). 90 gün sonra hard delete.

**IP masking:** Last octet masked (`192.168.1.X` → `192.168.1.XXX`) — KVKK Madde 5/2-f minimization principle.

## Role-Based Access Control (RBAC)

4 rol mevcut:

| Rol           | Yetki                                                                   |
| ------------- | ----------------------------------------------------------------------- |
| **CEO**       | View only (dashboard + reports) — silme/edit yok                        |
| **CMO**       | Tam erişim — tüm L1-L7 + budget optimizer + senaryo                     |
| **Analytics** | Tam erişim (CMO ile aynı)                                               |
| **Agency**    | Brand-scoped — sadece atandığı brand'ler, cross-brand isolation zorunlu |

### Cross-Brand Isolation (Critical)

**Agency rolündeki kullanıcılar diğer müşterilerin verisine erişemez.**

App-level RLS (Row Level Security):

```python theme={null}
def assert_brand_access(brand_id, current_user):
    if current_user.role == "agency":
        if brand_id not in current_user.assigned_brands:
            raise HTTPException(403, "Forbidden")
```

12+ critical IDOR kapatıldı (Sprint R1). Multi-tenant battle test (Faz E3-7) 4 RBAC senaryo + RLS isolation valid.

## KVKK Hakları

Müşteri olarak şu haklarınız var (KVKK Madde 11):

### 1. Bilgi Talebi

* Hangi verileriniz işleniyor?
* Hangi amaçla işleniyor?
* Hangi 3rd party'lere paylaşılıyor?

→ `destek@mmmytics.com` — 30 gün içinde cevap (KVKK Madde 13).

### 2. Düzeltme Talebi

* Verileriniz yanlış mı? Düzeltme talebi.
* Self-service: L1 Data Hub → veri yönetimi
* Veya `destek@mmmytics.com`

### 3. Silme Talebi (Right to Erasure / GDPR Article 17)

* **Self-service:** Settings → "Tehlikeli Bölge" → "Hesabımı Sil"
* 48 saatlik onay penceresi + 8-char confirmation code
* Onaylandıktan sonra 48 saat içinde tüm copy'ler silinir
* Audit log bırakılır (KVKK Madde 12)

### 4. Veri Taşınabilirliği (GDPR Article 20)

* **Self-service:** Settings → "Veri Export"
* 3 format: CSV / XLSX / JSON
* 1 saat içinde signed URL email'inize
* 8 tablo brand-scoped (organizasyon + brand + dataset + audit log dahil)

## Güvenlik Audit & Compliance

### Mevcut Kontroller

* ✅ KVKK Madde 12 audit log otomatik
* ✅ Multi-tenant battle test (1k brand simülasyon, RLS isolation)
* ✅ Audit log AST guard test (her mutating endpoint'te `log_action(` zorunlu)
* ✅ PII detection (CSV upload pre-process)
* ✅ Rate limiting (slowapi — 100 req/min per IP)
* ✅ JWT validation (Clerk JWKS)
* ✅ HTTPS/TLS 1.3 zorunlu
* ✅ Sentry runtime error tracking (Sentry.setUser correlation)
* ✅ Cookie banner KVKK aydınlatma + Consent Mode V2

### Henüz Yok (Planlı)

* ⚠️ Pentest raporu — enterprise müşteri talebinde post-launch (B2B yıllık sözleşme context'i)
* ⚠️ SOC 2 Type II — Faz E5+ (büyük enterprise müşteri için)
* ⚠️ ISO 27001 — Faz E5+

## Veri İşleyici (DPA — Data Processing Agreement)

Sözleşme imzasında **DPA ek olarak** verilir ([docs/legal/03-veri-isleyici-sozlesmesi.md](https://github.com/sarmancanavari/mmmytics/blob/main/docs/legal/03-veri-isleyici-sozlesmesi.md)):

* Veri kategorileri (medya agregat, bağlam değişkenleri)
* İşleme amaçları (MMM modelleme, reporting)
* Saklama süresi (sözleşme + 1 yıl)
* 3rd party sub-processors (Supabase, Vercel, Google Cloud, Sentry)
* Müşteri hakları (KVKK Madde 11)

## Sub-Processors

3rd party servisler ve KVKK uyum durumu:

| Vendor       | Hizmet              | Region                         | KVKK                                                 |
| ------------ | ------------------- | ------------------------------ | ---------------------------------------------------- |
| Vercel       | Frontend hosting    | Global edge + Frankfurt origin | ✅ DPA imzalı                                         |
| Supabase     | DB + storage + auth | eu-central-1 (Frankfurt)       | ✅ DPA imzalı                                         |
| Google Cloud | Backend + ML engine | europe-west1 (Frankfurt)       | ✅ DPA imzalı                                         |
| Clerk        | Authentication      | US (encrypted at rest)         | ⚠️ KVKK riskli — enterprise için EU IDP planlanıyor  |
| Sentry       | Error tracking      | US                             | ⚠️ KVKK riskli — enterprise için EU SaaS planlanıyor |
| Resend       | Transactional email | EU                             | ✅ DPA imzalı                                         |

> **Not:** Clerk + Sentry US-based. Sub-processor değişikliği için 30 gün önce email bildirimi yapılır (KVKK Madde 8/2).

## Veri İhlali Bildirimi

KVKK Madde 12 + GDPR Article 33: 72 saat içinde KVKK Kurum'una bildirim + müşteriye notification.

**MMMytics tarafından:**

* Sentry alert + audit log review
* Etkilenen müşteri tespit
* 72 saat içinde Resend email bildirim
* KVKK Kurum'a yazılı bildirim
* Status page incident publish (etkilenen kullanıcılar görür)

## Bilgi & İletişim

* 🇹🇷 KVKK sorumlu: CTO Serkan Arı (`destek@mmmytics.com`)
* 📜 KVKK belge seti: kontratınızın Ek-1 (Aydınlatma) + Ek-3 (Açık Rıza) + Ek-4 (Saklama-İmha) + Ek-5 (DPA)
* 🇪🇺 GDPR Data Protection Officer (DPO): yok (KVKK kapsamında DPO zorunlu değil; CTO sorumlu)
* 📞 KEP adresi: kontrat'ta belirtilmiştir

***

**Yasal:** Bu sayfa bilgilendirme amaçlıdır. Bağlayıcı olan kontratınızla birlikte imzalanan KVKK dokümanlarıdır.
