Ana içeriğe geç

Bölüm 14: PII Koruması

PII Korumasına Genel Bakış

PII (Personally Identifiable Information) koruması, Arceris'in en temel güvenlik işlevlerinden biridir. Hassas veya kişisel verilerin yapay zeka servislerine kontrolsüz biçimde gönderilmesini önler veya kurum politikasına uygun şekilde işler. Bu yalnızca teknik bir maskeleme özelliği değil; veri koruma ve uyumluluk yaklaşımının ürün içindeki karşılığıdır.

Denetim yalnızca prompt metniyle sınırlı değildir: kullanıcının yazdığı metin, modelin döndürdüğü yanıt (Yanıt Taraması açıkken) ve yüklenen/ekli dosyaların metni aynı kural setiyle yargılanır.

PII Kuralları sayfası üç sekmeden oluşur: Kurallar (kural yönetimi), Kural Grupları (kuralları atama birimlerinde paketleme) ve Deneme Alanı (test aracı).

Kurallar Sekmesi — Kural Yönetimi

Kurallar sekmesi, tüm PII algılama kurallarının listelendiği, aranabildiği ve yönetildiği ana görünümdür. Liste ad, desen veya eylem ile aranabilir; sayfa başına 8 kural gösterilir ve sayfalanır. Sayfanın üstündeki bilgi bandı, operatörlerin en sık karıştırdığı noktayı hatırlatır: global kurallar proxy'lenen her istekte çalışır; ACL-bağlı kurallar yalnızca eşleşen bir Model ACL kuralı tetiklendiğinde etkinleşir.

Kural tablosu sütunları:

  • Ad: Kuralın görünen adı (ör. "E-posta Adresi", "IBAN", "Telefon Numarası").
  • Desen: Kuralın kullandığı regex (düzenli ifade) deseni.
  • Eylem: Eşleşme bulunduğunda uygulanacak eylem (renkli badge ile gösterilir).
  • Kapsam: Global veya ACL-bağlı.
  • İşlemler: Düzenle ve Sil butonları.

Kural Oluşturma ve Düzenleme

"Kural Ekle" butonu veya bir kuralın "Düzenle" butonu ile açılan modal şu alanları içerir:

  • Ad: Kuralın görünen adı (ör. "E-posta Adresi"). Kural ID'si bu addan otomatik oluşturulur ve düzenleme sırasında sabit kalır.
  • Desen (Regex): Hassas veriyi yakalamak için kullanılan Go uyumlu düzenli ifade. Örnek: \b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b.
  • Eylem: Eşleşme bulunduğunda uygulanacak eylem (Maskele, Engelle veya Kaydet — aşağıda).
  • Değiştirme: Maskele eyleminde eşleşen içeriğin yerine yazılacak metin. Varsayılan: [REDACTED].
  • Global Uygula: İşaretlendiğinde kural tüm proxy isteklerinde otomatik olarak çalışır. İşaretlenmezse kural yalnızca Access Management üzerinden bir Model ACL kuralına bağlandığında etkinleşir (ACL-bağlı).
  • Kaçırma toleransı: Yalnızca sunucunun "toleranslı biçimi var" dediği kurallarda görünen seçim listesi (aşağıda, ayrı bölümde).

Kuralın formda yazılan eylemi varsayılandır; atama sırasında Access Management üzerinde hedef bazında override edilebilir (Bölüm 11).

Kural Eylemleri

PII eşleşmesinde uygulanacak üç eylem vardır:

Eylem Davranış
Engelle (block) İsteği tamamen reddeder. En sert eylemdir; kritik veri sınıfları (kredi kartı, TCKN) için uygundur.
Maskele (mask) Eşleşen değeri [REDACTED] (veya özel Değiştirme metni) ile değiştirerek isteği iletir. Güvenlik ile kullanılabilirlik arasındaki dengeyi kuran en yaygın eylemdir.
Kaydet (log) İsteği değiştirmeden iletir ve eşleşmeyi denetim kaydına yazar. İzleme ve denetim amaçlıdır; ancak veri sağlayıcıya gider.

Maskenin gerçekten uygulandığından emin olmak için iki güvence vardır:

  • Span tabanlı redaksiyon (#1210): Normalizasyonlu taramada bulunan bir eşleşme orijinal metindeki gerçek aralığında maskelenir; eşleşme bulunup metin değiştirilemeden "maskelendi" sanılarak iletilme ihtimali kalmaz.
  • Sağlayıcı API hostlarında mask (#1228, v1.1.0): Daha önce çok mesajlı konuşmalarda gövde yeniden yazılamadığı için mask kuralı fiilen block'a dönüşüyordu (istemci 403'ü kimlik hatası sanıp kullanıcıyı sürekli yeniden oturum açmaya sürükliyordu). Artık toplama ve yeniden yazma tek bir yürüyüşte yapılır ve hizalanamayan maskeli segment iletilmek yerine reddedilir. Kodlama ajanı (explicit proxy) yolunda giden gövdeye uygulanamayan bir mask, sessizce iletmek yerine blokla sonuçlanır (#1550).

Dosya eklerinde Maskele eyleminin anlamı farklıdır: dosya yeniden yazılmaz, bu nedenle mask kuralı dosyayı reddeder (aşağıda, "Yüklenen ve Ekli Dosyaların Metni").

Eylemi Kaydet olan bir kural, Yanıt Taraması Mask veya Engelle konumundayken artık yanıt tarafında da maskeler/reddeder (#1644, v1.3.0 davranış değişikliği — ayrıntı "Yanıt Taraması" bölümünde).

Kaçırma Toleransı: Araya Karakter Sokma Artık Atlatmıyor (#1210)

v1.1.0 davranış değişikliği. Önceki sürümde bir müşteri ölçümünde, eylemi Engelle olan bir e-posta kuralı [email protected] isteğini reddediyor ama test @example.com isteğini iletiyordu; 26 kaçınma varyantının 20'si ve 14 anahtar kelime varyantının 14'ü geçiyordu. v1.1.0 bu boşluğu üç katmanla kapattı:

  1. Span tabanlı redaksiyon. Tarama sonucu, orijinal metnin bayt aralıklarını (span) taşır. Normalize metinde bulunan bir eşleşme, orijinal metinde gerçekten maskelanır.
  2. Kayıpsız Fold normalizasyonu. Zero-width karakterler, bidi işaretleri, NFKC ve homoglyph harfler ofset bozmadan normalize edilir (base64/ROT13 gibi kod çözme yapılmaz). Aynı yazı şeklindeki varyantlar tek biçime iner, ama kaynak konumlar korunur.
  3. Sınırlı (bounded) toleranslı desenler. Biçimi bilinen her yerleşik kural, araya ayraç sokulmuş yazımları yakalayan toleranslı bir desen kazanır: test @example.com, t e s t @ e x a m p l e . c o m, 100 000 001 46 gibi aralıklı rakamlar, [at]/(dot)/[@] yazımları, noktalı rakam dizileri. Bu desen, kuralın kendi sağlama toplamıyla frenlenir — TCKN, kredi kartı (Luhn) ve IBAN (mod-97) geçmeyen aralıklı rakam dizileri yanlış pozitif üretmez — ve bir yalıtım (isolation) kuralıyla sınırlanır.

Anahtar kelime bazlı kurallar (Prompt Guard blok listeleri, custom desenler, OCR ifadeleri) kelime-sınırı ankrajlı toleranslı desene derlenir: ayraçlar, Türkçe aksan ikizleri (ör. "sıstem" ↔ "system") ve leetspeak yazımları yakalanır.

Skorlama ve denetim: Toleranslı bir isabet tam puan (1.0) değil 0.85 puanlar; yükseltilmiş bir Engelle eşiğine sahip kural bunu bloklamak yerine işaretler. Her toleranslı isabet denetim satırına evasion etiketiyle yazılır (Bölüm 25) ve Deneme Alanı'nın "Kaçırma" sütununda görünür.

Kural başına geri dönüş: Kural formundaki "Kaçırma toleransı" alanı yalnızca toleranslı biçimi bulunan kurallarda görünür. Strict — yalnız desen seçimi, tam olarak v1.1.0 öncesi eşleştiriciyi geri getirir (yalnız kuralın kendi regex'i). Varsayılan, toleranslı biçimi olan yerleşik kurallarda Normal, diğer kurallarda Strict'tir.

Bu değişiklik tespiti kesinlikle genişlettiği için v1.0.0'da geçen içerik v1.1.0'da engellenebilir; etkili kurallara alınan yeni davranışın ardından denetim kaydının gözden geçirilmesi önerilir (Bölüm 25).

Kodlama Hileleri (#1550)

v1.3.0, içerik kontrollerini kodlama hileleriyle atlatma girişimlerini de kapattı. Rakamların arasına NUL baytı konmuş bir TCKN, yüzde-kodlanmış (%31%30…, hatta iki kez kodlanmış), Arap-İndik rakamlarıyla yazılmış veya tek API iletisinin iki metin parçasına bölünmüş bir değer artık yakalanır — ve değerini taşıyan tam karakterler üzerinde maskelanır ya da engellenir. Denetim kaydı hileyi adıyla anar: control_chars, url_encoding, unicode_digits, split_across_parts vb. Dosya kuralları da DATA: biçimli, satır sarmalı ve URL-safe data URI'leri ile eksik/hatalı multipart sınırlarına kadar görür; dosya tarafındaki bu katman Bölüm 18'de anlatılıyor.

Global ve ACL-Bağlı Kapsam

Her PII kuralı iki kapsamdan birinde çalışır:

  • Global: Her proxy isteğinde otomatik olarak çalışır. Kuralın bir Model ACL kuralına bağlanması gerekmez. Tüm trafikte kesinlikle korunması gereken veri sınıfları için uygundur.
  • ACL-bağlı: Yalnızca bir Model ACL kuralına bağlandığında çalışır. Bu sayede belirli model veya kapsam koşullarında seçici PII koruması sağlanır. Yeni kurulumlarda yerleşik kurallar varsayılan olarak ACL-bağlıdır.

Bu ayrım, aşırı geniş koruma ile hedefe yönelik koruma arasındaki dengeyi kurmak için kullanılır.

Yerleşik ve Custom Kurallar

Arceris, yaygın veri sınıfları için hazır yerleşik kurallarla gelir (e-posta, telefon, IBAN, TCKN, kredi kartı vb.). Bu kurallar hızlı başlangıç sağlar ve ACL-bağlı kapsamındadır.

Kurumlar kendi veri sınıflarını (çalışan ID, proje kodu, özel kimlik numarası) tanımlamak için custom kural oluşturabilir. En iyi operasyon modeli, hazır kuralları temel almak ve kurum özelindeki veri risklerini custom kurallarla genişletmektir.

Yerleşik kuralların yanlış pozitif yükü de düşürüldü (#1551, v1.3.0): bir UUID artık kredi kartı olarak bildirilmez; [email protected] ve [email protected]:org/repo e-posta sayılmaz; 999.999.999.999 IP olarak bildirilmez; uçuş ve ürün kodları pasaport sanılmaz. Gerçek bir değerle veya saldırıyla aynı biçimde olduğu için bilerek hâlâ bildirilen benzerler de vardır (ör. 1.2.3.4 görünümlü bir sürüm numarası IP deseniyle eşleşebilir).

Yüklenen ve Ekli Dosyaların Metni (#1546)

v1.3.0 davranış değişikliği: PII kuralları artık yüklenen ve ekli dosyaların metnini de yargılar. Daha önce bir .txt, .csv, .docx, .pdf veya .xlsx ekinin içindeki TCKN, ChatGPT, claude.ai ve Gemini'de ve explicit proxy üzerinden modele hiçbir PII kaydı olmadan ulaşıyordu.

Dosyanın metni okunur (PDF ve Word için OCR taramasıyla) ve prompt'un kendisine uygulanan kurallarla denetlenir. İki önemli davranış:

  • Dosya yeniden yazılmaz; reddedilir. Bu nedenle eylemi Maskele olan bir kural, dosyada eşleşme bulursa dosyayı engeller. Eylemi Kaydet olan kural bulguyu kaydeder.
  • Metni okunamayan bir dosya "taranmadı" olarak kayda geçer; sessizce temiz sayılmaz.

Dosyanın türünü yargılamak MIME kurallarının işidir (Bölüm 18); kurumsal DLP (ICAP) entegrasyonu Bölüm 20'de anlatılıyor. PII kuralları burada metin katmanını üstlenir.

Kural Grupları Sekmesi

Tek tek kuralların ötesinde Arceris, kuralları yeniden kullanılabilir gruplar halinde paketlemenizi sağlar. Bir PII Kural Grubu, birden fazla PII kuralını tek başlık altında birleştirir ve her kural için ayrı bir varsayılan eylem (Engelle, Maskele veya Kaydet) taşır — aynı grupta bir kural Maskele ile, diğeri Engelle ile çalışabilir.

Grup sekmesi, grupları listeler: ad (yerleşik gruplarda "yerleşik" işareti ve Salt okunur etiketi), gruptaki kurallar ve işlemler.

  • Yerleşik gruplar (ör. kişisel kimliklendirici bilgiler, ağ/erişim kimlik bilgileri) salt okunurdur; düzenlenemez ve silinemez.
  • Custom grup formu: Grup Adı, Açıklama ve aranabilir kural listesi. Listeden kurallar işaretlenir; işaretlenen her kural için varsayılan eylem seçilir (Engelle / Maskele / Kaydet).

Gruplar daha sonra Access Management atamalarında tek bir birim olarak referans alınır (Bölüm 11). Bu, özellikle çok sayıda PII kuralının olduğu kurumlarda yönetilebilirliği artırır: "masrelenecek kişisel bilgiler", "engellenecek finansal veriler" gibi benzer kuralları gruplamak atama hatalarını azaltır.

Deneme Alanı Sekmesi — Test Aracı

Deneme Alanı, tanımlanan PII kurallarının gerçek metin üzerinde nasıl çalıştığını test etmek için kullanılır. Canlı kullanıma geçmeden önce kural davranışını kontrollü biçimde gözlemlemeyi sağlar.

Kullanım akışı:

  1. Giriş Metni alanına taranacak metin yapıştırılır (varsayılan örnek bir e-posta ve IBAN metniyle başlar).
  2. Kullanıcı olarak test et alanına bir kullanıcı adı girilebilir. Boş bırakılırsa tarama, aşağıdaki kural filtresiyle yapılır. Kullanıcı girilirse tarama, gateway'in o kullanıcı için gerçekten seçtiği çalışma zamanı kural setiyle yapılır: global kurallar ve seçilen kanalda kullanıcıya atanmış PII kuralları — her atamanın kendi eylemiyle. Yanındaki kanal seçimi (Tüm kanallar / Tarayıcı (transparent proxy) / API, ajanlar ve gateway) atamaların kanal bağlamını belirler. IP adresine yapılan atamalar ve Model Access bu testte değerlendirilmez.
  3. Kuralları Filtrele ile yalnızca belirli kurallar seçilebilir (kural kitaplığı uzun olduğu için liste aranabilir ve katlanmıştır). Hiçbir kural seçilmezse tüm kurallar çalıştırılır.
  4. Taramayı Çalıştır düğmesine tıklanır.

Sonuçlar:

  • Kullanıcıyla test edildiğinde çalışma zamanı kural seti kartı: kullanıcının atanmış ve global kural ID'leri ile gateway'in uygulayacağı aksiyon.
  • Vurgulanan Eşleşmeler: Orijinal metin üzerinde eşleşen kısımlar kırmızıyla vurgulanır; eşleşme sayısı badge ile gösterilir.
  • Temizlenmiş Çıktı: Maskele eylemi uygulandıktan sonraki temiz metin.
  • Eşleşme tablosu: Her isabet için kural ID'si, eşleşen değer ve Kaçırma sütunu — toleranslı eşleşmelerde kullanılan kaçınma biçiminin etiketi (düz eşleşme etiketi = tolerans uygulanmadan bulunmuş).

Bu araç yanlış pozitif ve yanlış negatif risklerini azaltır; yeni bir kural eklenince canlıya alınmadan önce burada denenmesi önerilir. Özellikle "Kullanıcı olarak test et" modu, kuralın kâğıt üzerinde değil fiilen o kullanıcı için uygulanacak kümede nasıl davrandığını gösterir.

PII Kurallarının Access Management ile Bağlanması

Kuralın tanımlanması ile bir kullanıcı veya grup üzerinde etkili olması aynı şey değildir. ACL-bağlı kurallar, Access Management üzerinden bir hedefe (kullanıcı/grup) ve bir Model ACL kuralına bağlanarak etkinleşir. Bu bağlama sırasında kuralın varsayılan eylemi hedef bazında da override edilebilir (ör. globalde Maskele olan bir kuralı belirli bir grupta Engelle olarak zorlamak). Global kurallar ise herhangi bir bağlama gerektirmez; tüm trafikte otomatik çalışır.

İki sınır bilinmelidir:

  • PII ve PII Grubu bağlantıları model erişimi vermez (#1277). Bağlantının bir model kapsamı yoktur; hangi modellere erişilebileceğini yalnızca Model Access belirler. PII bağlantısı, erişilen model üzerindeki taramayı tanımlar (Bölüm 11).
  • Kural sayfası yalnızca kuralı yazar; kimin hangi kurallara tabi olacağı Access Management'ta belirlenir.

Yanıt Taraması (Response Scanning)

PII denetimi varsayılan olarak istek tarafında çalışır. Modelin döndürdüğü içeriğin de kurumsal politikaya göre değerlendirilmesi isteniyorsa Ayarlar → Yanıt Taraması bölümü kullanılır: PII İçin Tara (ve istenirse Injection İçin Tara) anahtarı etkinleştirilir ve Yanıt Protokolü'nden eylem seçilir: Engelle, Maskele veya Kaydet.

Kapsam (v1.3.0 davranış değişikliği, #1040): Yanıt Taraması artık tüm kanallarda geçerlidir — tarayıcı (transparent proxy), kodlama ajanları (explicit proxy), unified gateway ve yerel LLM proxy'si. Daha önce bu ayar son iki kanal için "açık" görünürken cevaplar taranmadan iletiliyordu. Sıkıştırılmış bir cevap çözülüp taranır; okunamayan bir cevap Maskele/Engelle altında "temiz" sayılıp iletilmez. Ayar sayfası anahtarın hangi kanalları kapsadığını belirtir.

Akış davranışı: Kodlama ajanlarında, gateway'de ve yerel proxy'de Maskele veya Engelle seçiliyken akışlı cevap, model bitirince taranmış olarak gelir (tarayıcı sohbetleri akmaya devam eder); Kaydet her akışı canlı tutar.

Kural eylemi ile Yanıt Taraması eyleminin ilişkisi (#1644, v1.3.0 davranış değişikliği): Eylemi Kaydet olan bir PII kuralının model cevabındaki eşleşmesi artık her istemcide görülür (önceden hiçbir kayıt yazılmadan yok sayılıyordu). Cevabın başına ne geleceğine Yanıt Taraması'nın eylemi karar verir: Maskele ise değer maskelenir, Engelle ise cevap reddedilir, Kaydet ise iletilir ve kaydedilir. Kuralın kendi mask/block ayarı Yanıt Taraması eylemini yükseltmez. Dikkat: yalnızca gözlem için Kaydet'e alınmış kurallar (bir IP adresi, telefon numarası), Yanıt Taraması Mask/Engelle iken artık cevapları maskeler/reddeder; gateway bu kuralları başlangıçta ve Yanıt Taraması mask/block'a her geçişte bir uyarıyla isimlendirir — bu kurallar gözden geçirilmelidir.

Büyük cevaplar (#1642): Engelle modunda, inceleme limitini aşan (taranamayacak kadar büyük) bir cevap artık reddedilir ve not_scanned_response_too_large_refused olarak kaydedilir; Request Events reddin sebebini ("hassas içerik" değil "boyut") doğru gösterir. Maskele ve Kaydet altında böyle bir cevap yine bütün iletilir ve not_scanned_response_too_large satırı yazılır — tipik büyük cevap meşru bir cevaptır; taranmamış cevabın asla çıkmaması isteniyorsa Engelle seçilmelidir.

Temiz cevaplarda isabet (#1645): Engelle modunda tarayıcı proxy'si artık temiz bir JSON cevabını reddetmez. Daha önce Gemini web cevapları, akışsız claude.ai/API cevapları ve hatta sağlayıcının kendi JSON hatası (ör. bir 429) "hassas içerik" gerekçesiyle reddediliyordu; artık yalnız bir kuralla eşleşen cevap reddedilir.

Çok bloklu cevaplarda maske (#1631): Maskeleme, akışlı bir cevabın blokları arasında metin taşımaz. Birden çok metin bloğu olan bir cevapta her blok kendi içinde maskelenir; iki bloğa bölünmüş bir değer yine bulunur ve maskesi değerin başladığı bloğa yazılır. n>1 ile istenen paralel cevaplar da ayrı ayrı maskelenir.

Yanıt tarafındaki tüm bulgular Denetim Kayıtları'nın Yanıt Taraması sekmesinde izlenir (Bölüm 25).

Presidio (NLP) Ayarları ve Erişilemezliği

Regex tabanlı desen kuralları gateway'in kendisinde çalışır; isim ve konum gibi yalnız doğal dil işlemeyle bulunabilen varlıklar için harici Presidio analiz motoru kullanılabilir. Yapılandırma Ayarlar → PII → NLP bölümündedir: motor seçimi, Presidio Analiz Motoru URL'si ve dil ayarı.

Presidio erişilemezse ne olacağı (#1458, v1.3.0): Daha önce Presidio'ya ulaşılamadığında yalnız-NLP varlıkları sessizce atlanıyor ve istek "temiz tarandı" görünüyor; operatör bunu hiçbir yerde göremiyordu. Artık:

  • "Presidio erişilemediğinde" ayarı (pii_nlp_failure_mode) iki mod sunar:
  • İlet (yalnız desen kuralları) — fail_open, varsayılan. İstekler yalnız desen kurallarıyla iletilir; isim, konum gibi yalnız NLP ile bulunan varlıklar bu sırada tespit edilmez. Her böyle istek denetim kaydına nlp_unavailable outcome'uyla yazılır.
  • İsteği engelle — fail_closed. PII taraması Presidio'ya ulaşamayan her istek, motor yeniden erişilebilir olana kadar engellenir; blok mesajı kullanıcının metnini değil, tarayıcıyı (Presidio) adlandırır.
  • Görünürlük: Sağlık sayfasında "PII NLP motoru (Presidio)" denetimi, NLP olmadan geçen taramaların sayısını gösterir; gateway dakikada birden fazla olmamak üzere bir WARN yazar. Denetim kaydındaki nlp_error detayı hatayı adlandırır.
  • NLP_LANGUAGE=tr uyarısı: Hazır (stock) Presidio imajında Türkçe model yoktur; NLP_LANGUAGE=tr varsayılanıyla Presidio'un kendi /health uç noktası "OK" derken her çağrı başarısız olabilir. Yeni sağlık denetimi bu durumu gösterir — "motor ayakta" ile "Türkçe tarama çalışıyor" aynı şey değildir.

Bu görünür kılma, NLP katmanının sessiz devre dışı kalmasının fark edilmemesi riskini ortadan kaldırır: fail_open seçilse bile NLP'siz geçen her tarama kayıttadır.