AI Atlas
EN TR
Orta · ~4 dk okuma #privacy #gdpr #kvkk

AI ve Veri Gizliliği

KVKK ve GDPR'ı yapay zekaya uygulamak

Yapay zeka sistemlerinde kişisel verinin eğitimde, prompt'ta, loglarda ve yurt dışındaki API'lere gönderilirken KVKK ve GDPR'a uygun, en az veriyle ve belirli bir amaçla işlenmesini sağlama pratiği.

KİŞİSEL VERİ API'YE GİTMEDEN ÖNCEHAM METİNAyşe Yılmazayse@example.comTCKN 10000000146…iadem geciktiREDAKSİYONNER + regexPresidioTEMİZ PROMPT<PERSON><PII>TCKN <TCKN>…iadem geciktiLLM APIeğitim kapalı · saklama sözleşmedeYURT DIŞI · KVKK MD. 9LOGticket=48213 text="<PERSON> …"ham metin yok · 90 gün sonra siliniramaç için gerekmeyen veri modele hiç ulaşmasın
Tanım

Bir LLM uygulamasında kişisel veri tek bir yerde durmaz; eğitim verisine, prompt'a, RAG belgelerine, loglara ve sağlayıcının sunucularına dağılır. Veri koruma hukuku bu noktaların her birine ayrı ayrı uygulanır.

Temel ilkeler iki rejimde de benzer: hukuka uygunluk, belirli ve meşru amaç (amaçla sınırlılık), amaç için gerekli olanla yetinme (veri minimizasyonu), doğruluk ve sınırlı saklama. GDPR'da Madde 5, KVKK'da (6698 sayılı Kanun) Madde 4. Pratik anlamı: destek botunu eğitmek için müşterinin TC kimlik numarasına ihtiyacın yoksa, o numara modele hiç ulaşmamalı.

Hukuki dayanak: GDPR Madde 6 altı dayanak sayar (sözleşme, hukuki yükümlülük, meşru menfaat, rıza...). KVKK Madde 5 açık rızayı esas alır ama sözleşmenin ifası, hukuki yükümlülük ya da meşru menfaat gibi rıza gerektirmeyen şartlar da tanır. Avrupa Veri Koruma Kurulu'nun 17 Aralık 2024 tarihli 28/2024 sayılı görüşü, AI modellerinde meşru menfaatin nasıl gösterileceğini ve kişisel veriyle eğitilmiş bir modelin her durumda anonim sayılamayacağını ele alır.

Otomatik karar: GDPR Madde 22, yalnızca otomatik işlemeye dayanan ve kişi üzerinde hukuki ya da benzer ölçüde önemli etki doğuran kararlara tabi olmama hakkı tanır; istisnalarda bile insan müdahalesi isteme ve karara itiraz hakkı korunur. KVKK'da bunun karşılığı daha dardır: Madde 11(1)(g), verilerin münhasıran otomatik sistemlerle analiz edilmesi sonucu kişinin aleyhine çıkan sonuca itiraz etme hakkıdır.

Etki değerlendirmesi: GDPR Madde 35, yüksek risk taşıyan işlemelerde (ör. profil çıkarmaya dayanan, kişiler hakkında önemli sonuç doğuran sistematik değerlendirmelerde) DPIA'yı zorunlu kılar. 6698 sayılı Kanun'da genel bir DPIA yükümlülüğü yok; yine de yüksek riskli AI projelerinde benzer bir değerlendirme yapmak iyi pratiktir.

Yurt dışına aktarım: Çoğu LLM API'si yurt dışındadır. KVKK Madde 9, 7499 sayılı Kanunla değişti (1 Haziran 2024'ten beri yürürlükte): önce yeterlilik kararı; yoksa uygun güvenceler (Kurul'un ilan ettiği standart sözleşme, bağlayıcı şirket kuralları ya da Kurul izniyle yazılı taahhütname); bunlar da yoksa yalnızca arızi aktarımlar. Standart sözleşme imzadan itibaren beş iş günü içinde Kurum'a bildirilmeli. GDPR'da aynı mantık Bölüm V'te (Madde 44-49) işler.

Sağlayıcı tarafı: Örneğin OpenAI, 1 Mart 2023'ten beri API verisini (opt-in olmadıkça) model eğitiminde kullanmadığını, kötüye kullanım izleme loglarını ise varsayılan olarak 30 güne kadar sakladığını belirtiyor; Zero Data Retention ön onaya tabi. Her sağlayıcının koşulu farklıdır, sözleşmeyi kendin oku.

KVKK, Kasım 2025'te "Üretken Yapay Zekâ ve Kişisel Verilerin Korunması Rehberi (15 Soruda)" yayımladı; Türkiye'deki projeler için ilk okunacak kaynaktır. (Ekim 2026 itibarıyla; hukuki tavsiye değildir.)

Benzetme

Bir muhasebe bürosuna evrak göndermek gibi. Bürodan beyanname hazırlamasını istiyorsan gelir belgelerini yollarsın; sağlık raporlarını, aile fotoğraflarını klasöre koymazsın. Büro yurt dışındaysa önce sözleşmeye bakarsın: evrak ne kadar saklanacak, başka iş için kullanılacak mı, kim erişebilecek? LLM API'si de o büro; prompt da gönderdiğin klasör.

Gerçek dünyadan örnek

Bir e-ticaret şirketi, müşteri şikâyetlerini özetleyen bir LLM asistanı kuruyor. Şikâyet metinlerinde isim, telefon, e-posta, TC kimlik ve kart numarası geçiyor. Kurulan akış:

1. Amaç ve dayanak: Amaç "şikâyeti özetleyip doğru ekibe yönlendirmek". Bu amaç için kimlik bilgisine gerek yok. 2. Redaksiyon: Metin API'ye gitmeden önce Presidio ile taranıyor; isim, e-posta, telefon, TCKN ve kart numarası yer tutucularla değiştiriliyor. 3. Sağlayıcı: Veri işleyen sözleşmesi imzalanmış, eğitimde kullanım kapalı, saklama süresi sözleşmede yazılı; yurt dışı aktarım için standart sözleşme Kurum'a beş iş günü içinde bildirilmiş. 4. Loglar: Uygulama logunda sadece redakte edilmiş metin ve bilet numarası var; 90 gün sonra siliniyor. 5. Karar: Asistan iade kararı vermiyor, sadece özet çıkarıyor; otomatik karar hükümleri devreye girmiyor.

Böylece model işini yapıyor ama sağlayıcının sunucusuna hiçbir TC kimlik numarası ulaşmıyor.

Kod örnekleri
Presidio ile LLM çağrısından önce PII redaksiyonu python
import os
from presidio_analyzer import AnalyzerEngine
from presidio_analyzer.predefined_recognizers import TrNationalIdRecognizer
from presidio_anonymizer import AnonymizerEngine
from presidio_anonymizer.entities import OperatorConfig

# Varsayılan motor spaCy en_core_web_lg modelini kullanır.
analyzer = AnalyzerEngine()
# TCKN tanıyıcısı varsayılan olarak yüklü değil; elle ekle
# (kontrol hanelerini doğrular, rastgele 11 haneyi yakalamaz)
analyzer.registry.add_recognizer(TrNationalIdRecognizer(supported_language="en"))
anonymizer = AnonymizerEngine()

ENTITIES = ["PERSON", "EMAIL_ADDRESS", "PHONE_NUMBER", "TR_NATIONAL_ID",
            "CREDIT_CARD", "IBAN_CODE"]

def redact(text: str) -> str:
    findings = analyzer.analyze(text=text, language="en",
                                entities=ENTITIES, score_threshold=0.4)
    return anonymizer.anonymize(
        text=text,
        analyzer_results=findings,
        operators={
            "DEFAULT": OperatorConfig("replace", {"new_value": "<PII>"}),
            "PERSON": OperatorConfig("replace", {"new_value": "<PERSON>"}),
            "TR_NATIONAL_ID": OperatorConfig("replace", {"new_value": "<TCKN>"}),
        },
    ).text

ticket = ("Ayse Yilmaz (ayse.yilmaz@example.com, +90 532 123 45 67, "
          "TCKN 10000000146) says her refund for card 4111 1111 1111 1111 is late.")
safe = redact(ticket)
# <PERSON> (<PII>, <PII>, TCKN <TCKN>) says her refund for card <PII> is late.

# Yalnızca redakte edilmiş metin sağlayıcıya gider
# (call_llm: kullandığın sağlayıcının SDK çağrısı)
summary = call_llm(model=os.environ["LLM_MODEL"], prompt=f"Özetle: {safe}")
Ne zaman kullan
  • Kişisel veri içeren herhangi bir metni, belgeyi ya da görseli bir LLM'e gönderirken
  • Müşteri ya da çalışan verisiyle model eğitirken veya fine-tune ederken
  • RAG sistemine kişisel veri içeren belgeler indekslenirken
  • AI kişiler hakkında karar veriyor ya da kararı etkiliyorsa
Ne zaman kullanma
  • Kişisel veri içermeyen, tamamen sentetik ya da gerçekten anonim veriyle çalışırken ağır süreç kurmak
  • Redaksiyonu tek güvenlik önlemi sanmak; sözleşme, erişim kontrolü ve saklama politikası da gerekir
  • Bu sayfayı hukuki görüş yerine koymak; sınırdaki vakalar veri koruma uzmanına gitmeli
Sık yapılan hatalar

'Anonim' ile 'takma adlı' veriyi karıştırmak

İsmi silinmiş ama müşteri numarası, adres ve sipariş geçmişi duran kayıt hâlâ kişisel veridir. Yeniden tanımlanabiliyorsa veri koruma hukuku uygulanmaya devam eder.

Redaksiyonun her şeyi yakaladığını varsaymak

NER modelleri Türkçe isimleri, adresleri ve serbest metne gömülü kimlikleri kaçırabilir. Presidio'nun varsayılan NLP modeli İngilizcedir; Türkçe için ek tanıyıcılar ve kendi test setinle ölçülmüş bir yakalama oranı gerekir.

Logları unutmak

Prompt'u redakte edip ham metni uygulama loguna, hata izleme aracına ya da observability platformuna yazmak sık görülen bir sızıntıdır. Loglar da aynı saklama ve erişim kurallarına tabi olmalı.

Yurt dışı aktarımı sözleşmeye gömmek

KVKK Madde 9 uyarınca standart sözleşmenin beş iş günü içinde Kurum'a bildirilmemesi ayrı bir idari para cezası sebebidir. Sağlayıcının hangi ülkede işlediğini ve alt işleyenlerini sözleşmeden doğrula.