PII/Sensitive Data Cache'leme: KVKK/GDPR Riski
Kullanıcı verilerini (TCKN, email, kart no) cache'lemek hukuki tehlikeler doğurur. Compliance pattern'leri ve PII redaction stratejileri.
Şükrü Yusuf KAYA
12 dakikalık okuma
OrtaAnti-Pattern 1: PII'yi Cache'lemek
Cache provider'da saklanır (Anthropic, OpenAI, Gemini). Yani:
- Anthropic'in sunucularında senin user verilerin var
- TTL boyunca o veriler "in transit / at rest" durumda
- KVKK madde 5/6: hassas veri işlenmesi için açık rıza şart
Hukuki Risk
Türk şirketleri: Bir müşteri TCKN'sini chatbot'a verdi, asistan cache'ledi. KVKK uyumlu mu? Kanunen veri merkezinin nerede olduğu (Anthropic US-based) ek izin gerektirir.
Tehdit Senaryoları#
Müşteri "TCKN'im 12345678901" yazdı, system + KB + this message cache'lendi. Cache 5dk-1h dayanır. Bu süre içinde provider tarafında bu veri persist eder.
Risk: Veri leak (provider breach), audit trail eksikliği, KVKK 4/5 ihlali.
Çözüm 1: PII Redaction Pre-LLM#
python
import re PII_PATTERNS = [ (r'\b\d{11}\b', '[TCKN]'), # TCKN (r'\b\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}\b', '[CARD]'), # Kart (r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', '[EMAIL]'), (r'\b(05|5)\d{9}\b', '[PHONE]'), # TR cep (r'\bTR\d{2}[\d ]{20,30}\b', '[IBAN]'),] def redact_pii(text: str) -> str: """PII'yi placeholder ile değiştir.""" for pattern, replacement in PII_PATTERNS: text = re.sub(pattern, replacement, text) return text # Önce redact, sonra LLM'e gönderclean_query = redact_pii(user_query)response = client.messages.create( messages=[{"role": "user", "content": clean_query}])PII redaction
Avantaj: Cache'te PII yok, compliance garantili.
Dezavantaj: LLM redacted veriyi anlamlandıramayabilir. Use case'e göre değerlendir.
Çözüm 2: PII İçeren İstekleri Cache'leme#
python
def has_pii(text: str) -> bool: for pattern, _ in PII_PATTERNS: if re.search(pattern, text): return True return False def make_request(user_query): if has_pii(user_query): # PII içerir → cache YAPMA (system prompt'a cache_control koyma) return client.messages.create( system=SYSTEM, # plain string, cache yok messages=[{"role": "user", "content": user_query}], ) else: # Normal cache'li request return client.messages.create( system=[{"text": SYSTEM, "cache_control": {"type": "ephemeral"}}], messages=[{"role": "user", "content": user_query}], )Conditional caching
Çözüm 3: Self-Hosted (on-prem)#
Modül 10'da self-hosted gördük. vLLM/SGLang ile data tamamen senin altyapında. KVKK için en güvenli yol.
Tradeoff: Setup ve operasyon maliyeti.
Audit ve Veri Sahipliği#
KVKK uyumu için:
- Kullanıcı rızası — cache'te veri tutulacağına dair açık onay
- Audit log — hangi user'ın hangi veriyi cache'lediği
- Delete request — user "verimi sil" derse cache invalidation prosedürü
- Data residency — provider'ın veri merkezi nerede (Anthropic US-only)
✓ Pekiştir#
Bir Sonraki Derste#
Invisible regression — cache hit rate'in farkına vardırmadan düşmesi.
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
1. Temeller — Context Penceresi Ekonomisi
Bu Eğitim Hakkında ve Prompt Caching Neden Önemli?
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Token Ekonomisi 101: Input vs Output Cost Asimetrisi
Öğrenmeye Başla1. Temeller — Context Penceresi Ekonomisi
Context Window Evrimi: 4K'dan 1M'a 5 Yılda Ne Oldu?
Öğrenmeye BaşlaBağlantılı Pillar Konular