Microsoft AGT: Policy-as-Code ile ajan güvenliği

Yapay zeka ekosisteminde büyük bir paradigma değişimi yaşıyoruz: metin veya kod üreten “Üretken YZ”den, bizim adımıza aksiyon alan, dış sistemlerle etkileşen ve otonom karar veren Ajan Tabanlı YZye geçtik. Ama bu otonomi, beraberinde bir yönetişim krizi getiriyor: bir ajanın hatası artık ekranda yanlış bir cümle değil, yetkisiz bir veritabanı sorgusu ya da bir KVKK/GDPR ihlali olabilir. Microsoft’un açık kaynaklı Agent Governance Toolkit (AGT) tam da bu noktada, “tasarım gereği yönetişim” sunuyor.
Çözülmesi gereken üç yapısal problem
- Yetki aşımı (confused deputy): yalnızca sipariş durumu sorgulamaya yetkili bir destek ajanı, bir jailbreak veya halüsinasyon sonucu CRM’deki tüm müşteri verisini dışa aktarma aracını tetikleyebilir.
- Deterministik olmayan güvenlik: güvenliği prompt’a bırakmak hukuki bir zayıflıktır; kural, modelin inisiyatifinde değil eylem kapısında uygulanmalıdır.
- Hesap verebilirlik eksikliği: ISO 42001 ve KVKK, kararların denetlenebilirliğini şart koşar — hangi eylemin hangi yetkiyle, ne zaman, hangi veriyle yapıldığı kaydedilmelidir.
AGT’nin çözüm mimarisi
AGT, güvenliği prompt’lardan alıp deterministik bir ara katmana (middleware) taşır. Ajanın düşünme (reasoning) ile eyleme geçme (execution) süreci arasına girer: ajan bir aracı çağırmaya karar verdiğinde istek AGT’nin politika motoruna düşer; kural uygunsa izin verilir, değilse işlem durdurulup ajana “yetkisiz erişim” hatası döner. Bu, kitaptaki çalışma zamanı korkuluğu (runtime guardrail) kavramının birebir uygulamasıdır.
1. Adım: Policy-as-Code
Uyum kurallarını — veri minimizasyonu, sınır ötesi aktarım yasağı — bir YAML dosyasında tanımlarız:
compliance_policy.yamlpolicy_id: "kvkk_strict_compliance_v1"
description: "Müşteri verisine erişimi ve dışa aktarımı kısıtlayan ana politika"
rules:
# KURAL 1: Veritabanı sorgularında PII (kişisel veri) çıkarımını engelle
- tool_name: "query_customer_db"
parameters_schema:
allow_pii_extraction: false
action: "deny"
log_level: "critical"
# KURAL 2: Sadece yerel sunuculara API isteğine izin ver
- tool_name: "send_data_to_endpoint"
allowed_domains:
- "*.sirket-ici-domain.com.tr"
action: "allow" 2. Adım: Araçların AGT ile sarmalanması
Ajanın kullanacağı Python fonksiyonlarını motorla sarmalarız; böylece fonksiyon çağrıldığında kontrol otomatik olarak AGT’ye geçer:
Pythonfrom agt import GovernanceEngine, GovernanceException
# Yönetişim motorunu başlat ve KVKK politikasını yükle
engine = GovernanceEngine(config_path="compliance_policy.yaml")
# Ajanın kullanacağı aracı AGT ile sarmala
@engine.secure_tool(tool_id="query_customer_db")
def query_customer_db(customer_id: str, extract_pii: bool = False):
if extract_pii:
return db.get_full_profile(customer_id)
return db.get_basic_status(customer_id)
# Ajan, halüsinasyon sebebiyle PII verisini de çekmeye çalışıyor!
try:
result = query_customer_db(customer_id="12345", extract_pii=True)
except GovernanceException as e:
# AGT araya girer ve işlemi çalışma zamanında reddeder.
print("GÜVENLİK İHLALİ ENGELLENDİ:", e.violation_details) 3. Adım: Değiştirilemez denetim izi
Engelleme yaşandığında AGT’nin denetim bileşeni devreye girer ve ihlal girişimini, ajanın kriptografik kimliğiyle birlikte değiştirilemez (immutable) bir log olarak kaydeder. Bir regülatör denetiminde “Sisteminizin güvenlik sınırları nedir ve nasıl çalıştığını ispatlayabilir misiniz?” sorusunun teknik cevabı tam olarak budur.
Nereden başlamalı? AGT’yi kullanmasanız bile mimari ders evrensel: kritik yasakları prompt’tan alıp araç çağrısı sınırına, tablo/kural biçiminde taşıyın ve her engellemeyi değiştirilemez şekilde loglayın.
Korkuluklarınız kâğıtta mı, sistemde mi?
15 soruda olgunluk karnenizi alın; “Güvenli” ve “Hesap Verebilir” ilkelerinde nerede olduğunuzu görün.