1. Giriş
Bu Codelab'de, Agent Runtime'da barındırılan yapay zeka aracıları için Agent Gateway giriş yönetimi ele alınmaktadır.
Giriş (istemciden ajana) modunda çalışan Agent Gateway, istemciler (insan son kullanıcılar, masaüstü temsilcileri, kodlama IDE'leri, eş temsilciler vb.) ile Agent Runtime'da barındırılan temsilciler arasındaki iletişimi yönetmeyi destekler. Bu mod, aracıları gelen istem enjeksiyonu saldırılarına veya istemciler tarafından gönderilen zararlı içeriklere karşı korumak için kullanılır. Tüm gelen trafik, tüm aracı etkileşimleri için ağ giriş noktasını güvence altına almak amacıyla yetkilendirme uzantıları ve Model Armor kullanılarak işlenir.
Ne oluşturacaksınız?
- Girişteki (istemciden aracıya) Agent Gateway
- Model Armor yetkilendirme uzantısı
- Ajan kimliğine sahip Agent Runtime ADK aracısı
- MCP kullanılarak aracı tarafından sorgulanan Cloud Storage dosya verileri
- LLM istemlerini ve yanıtlarını taramak için Model Armor şablonları
- Verilerin kimliğini gizlemek için Hassas Verilerin Korunması şablonları
Şek. 1. Codelab mimarisi
Öğrenecekleriniz
- Bir aracıya gelen trafiği taramak için Agent Gateway'i dağıtma
- Model Armor yetkilendirme uzantılarını ve temsilini yapılandırma
- Özel Model Armor şablonları oluşturma ve dağıtma
- Özel hassas veri koruma şablonları oluşturma ve dağıtma
- LLM tarama politikalarını test etme ve doğrulama
İhtiyacınız olanlar
- Faturalandırmanın etkin olduğu bir Google Cloud projesi
- Ağ hizmetleri, BigQuery veri kümeleri ve Agent Platform kaynaklarını sağlama için IAM izinleri
- Google Cloud KSA'nın (
gcloudbileşeni) yüklü olduğu, POSIX uyumlu bir kabuk (bashveyazsh) - Komut satırı araçları:
git,curl,jq(JSON işlemcisi), Python 3 veuv(Python paket yöneticisi)
2. Kavramlar
Trafik yönü ve ağ geçidi rolleri
Agent Gateway, ajandan haberdar bir ağ proxy'si olarak işlev görür ancak operasyonel rolü, trafiğin yönüne bağlı olarak değişir:
- Aracıdan her yere (çıkış) modu: Giden proxy olarak işlev görür. Bir aracı, harici veritabanı araçlarını, üçüncü taraf MCP sunucularını veya API'leri çağırdığında çıkış ağ geçidi; hizmet keşfi, yönlendirme, karşılıklı TLS (
mTLS), OAuth kimlik bilgilerinin dinamik olarak eklenmesi ve uç noktalara erişim denetimini yönetir. - İstemciden aracıya (giriş) modu: Ön uç güvenlik ağ geçidi olarak işlev görür. Birincil amacı, gelen doğal dil istemlerini aracılı koda veya yapay zeka modellerine ulaşmadan önce yakalayıp temizleyerek aracı yürütme çalışma zamanına girişi korumaktır.
Agent Runtime'a gelen istek yolu
Agent Runtime'da barındırılan bir aracıya yönelik istemci istekleri, aiplatform.googleapis.com API uç noktasına yönlendirilir.
POST https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:query
API uç noktasına gelen bu iletişim akışı, istemciden aracıya giriş yolunu temsil eder.
Bu Google tarafından yönetilen giriş yolunun güvenliğini sağlamak için Agent Gateway, API sunma altyapısı katmanında doğrudan Google Front End (GFE) ile entegre olur. Google, yönetilen bir aracı Agent Runtime'a dağıtırken giriş ağ geçidi yetkilendirme politikasını ağın kenarındaki gelen istemci isteklerine yerel olarak bağlar.
Şekil 2. Agent Gateway ile Agent Runtime'a giriş yönetimi
İnceleme, istekler Agent Runtime'a girmeden önce ön uç katmanında gerçekleştiğinden bu mimari, ek ağ yükü veya dahili atlama gecikmesi oluşturmaz. Ölçeklendirme, ön uç altyapısı tarafından otomatik olarak gerçekleştirilir. Bu sayede dahili IP aralıklarını, yük dengeleyicileri veya özel DNS rotalarını yönetme ihtiyacı ortadan kalkar.
Model Armor ile satır içi tehdit temizleme
Arayan kimlik bilgilerini değerlendirme ve IAM erişim denetimini zorunlu kılma (roles/aiplatform.user) işlemleri, aiplatform API barındırma katmanı tarafından yerel olarak gerçekleştirilir. Giriş ağ geçidi kendisi kimlik yetkilendirmesi yapmaz. Bunun yerine, CONTENT_AUTHZ profiliyle yapılandırılmış yetkilendirme uzantılarını kullanarak içerik güvenliğine odaklanır. Ağ geçidi, politika uygulama noktası olarak satır içi çalışır ve doğal dil istemlerini, yapay zeka aracısı muhakeme döngüsüne veya temel LLM'ye ulaşmadan önce iletim sırasında yakalar.
Kullanıcıdan gelen bir istem, ön uç hizmetine ulaştığında ağ geçidi, bölgesel Model Armor yetkilendirme uzantısı hizmetine bir ext_proc (harici işleme) çağrısı başlatır. Bu çağrı, Model Armor veri düzlemine aktarılır. Model Armor, doğal dil güvenlik duvarı gibi davranarak metni etkin şablonlara göre değerlendirir ve güvenlik ile emniyet risklerini tarar:
- Dolaylı istem enjeksiyonları ve jailbreak girişimleri
- Kötü amaçlı URL'ler, zararlı dil veya güvenli olmayan içerik
- Kimliği tanımlayabilecek bilgiler (
PII) ve hassas veri sızıntısı
Şablon Sensitive Data Protection (SDP) filtreleri içeriyorsa Model Armor, Cloud SDP hizmetine ek bir gRPC çağrısı yapar. Cloud SDP, belirtilen şablonu kullanarak yükü inceler, istenen kimliksizleştirme veya karartma işlemlerini gerçekleştirir ve güvenli bir şekilde iletilmek üzere temizlenmiş sonucu zincir boyunca geri döndürür.
Politika ihlali veya düzeltilmemiş hassas veri eşleşmesi algılanırsa ağ geçidi, çalışma zamanına girmeden önce yükü uçta engeller veya düzeltir. Bu sayede, çalışan yapay zeka aracısı uygulaması korunmaya devam eder ve hiçbir zaman kötü amaçlı veya düzenlenmemiş yükleri işlemez.
Kavramlar bölümünü tamamladık. Şimdi Kurulum bölümüne geçiyoruz.
3. Kurulum
Gerekli IAM rolleri
Bu Codelab'deki kaynakları oluşturmak için aşağıdaki roller gereklidir:
Kategori | Gerekli IAM rolü (kimlik) | Açıklama |
API yönetimi |
| Google Cloud API hizmetlerini etkinleştirme |
Ağ ve ağ geçidi |
| Agent Gateway'in temel hazırlığını yapma |
Hizmet uzantıları |
| Yönlendirme uzantılarını yapılandırma |
Ağ güvenliği |
| Yetkilendirme politikalarını dağıtma |
Hassas Verilerin Korunması |
| SDP inceleme ve kimlik gizleme şablonlarını yönetme |
Model Armor |
| Güvenlik şablonları oluşturma ve yönetme |
Agent Platform |
| Agent Runtime iş yüklerini dağıtma |
Cloud Storage |
| Dağıtımı ve müşteri verileri paketlerini yönetme |
IAM Yönetimi |
| Aracı kimliği için proje düzeyinde izinleri bağlama |
Günlükler ve denetleme |
| İzleri ve denetleme günlüklerini inceleme |
Alternatif olarak, roles/admin gibi geniş kapsamlı bir temel rol veya roles/owner gibi eski bir rol kullanın.
Projenize erişme
Bu Codelab'de tek bir Google Cloud projesi kullanılır. Yapılandırma adımlarında gcloud KSA'sı ve Linux kabuk komutları kullanılır.
Google Cloud projenizin komut satırına erişerek başlayın:
shell.cloud.google.comadresindeki Cloud Shell veyagcloudKSA'nın yüklü olduğu yerel bir terminal
Proje kimliğinizi ayarlama
gcloud config set project SET_YOUR_PROJECT_ID_HERE
Oturumun kimliğini doğrulama
# login to gcloud cli
gcloud auth login
# login for gcloud api
gcloud auth application-default login
Kabuk ortamı değişkenlerini ayarlama
# set custom var for slug (eg, "foo") and region preference
export SLUG="foo"
export REGION="us-central1"
echo ${SLUG}
echo ${REGION}
# create project vars (automatic)
export PROJ_ID=$(gcloud config list --format="value(core.project)")
export PROJ_NO=$(gcloud projects describe ${PROJ_ID} --format="value(projectNumber)")
export ORG_ID=$(gcloud projects get-ancestors ${PROJ_ID} --format="value(id)" | tail -n 1)
export USER_IDENTITY=$(gcloud config get-value account)
echo ${PROJ_ID}
echo ${PROJ_NO}
echo ${ORG_ID}
echo ${USER_IDENTITY}
# create resource vars (automatic)
export AGW_NAME="agw-${SLUG}-${REGION}-cta"
export AGW_URI="projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
export RE_AGENT_NAME="agent-crm"
export RE_AGENT_ID_SET="principalSet://agents.global.org-${ORG_ID}.system.id.goog/attribute.platformContainer/aiplatform/projects/${PROJ_NO}"
export STAGING_BUCKET="agent-staging-${PROJ_NO}"
export DATA_BUCKET="customer-data-${PROJ_NO}"
export MCP_URL="https://storage.mtls.googleapis.com/storage/mcp"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
echo ${DATA_BUCKET}
echo ${MCP_URL}
# create local dir for config files
mkdir -p cfg
gcloud cli uygulamasını güncelleyin (önerilen)
Google Cloud SDK'nın kendi kendine yönetilen bir yüklemesini (ör. Cloud Shell dışında) çalıştırıyorsanız bileşenleri en son sürüme güncelleyin.
# update gcloud cli
gcloud components update
API hizmetlerini etkinleştirme
# enable google apis (agent platform bundle, part 1)
gcloud services enable \
agentregistry.googleapis.com \
aiplatform.googleapis.com \
apphub.googleapis.com \
apptopology.googleapis.com \
cloudapiregistry.googleapis.com \
cloudtrace.googleapis.com \
compute.googleapis.com \
dataform.googleapis.com \
iam.googleapis.com \
iamconnectors.googleapis.com \
iap.googleapis.com \
logging.googleapis.com \
modelarmor.googleapis.com \
monitoring.googleapis.com \
networksecurity.googleapis.com \
networkservices.googleapis.com \
notebooks.googleapis.com \
observability.googleapis.com
# enable google apis (agent platform bundle, part 2)
gcloud services enable \
securitycenter.googleapis.com \
saasservicemgmt.googleapis.com \
storage.googleapis.com \
telemetry.googleapis.com \
texttospeech.googleapis.com
# enable google apis (all the rest)
gcloud services enable \
dlp.googleapis.com
Kurulum bölümü sona erdi. Şimdi Ağ Geçidi bölümüne geçiyoruz.
4. Ağ geçidi
İstemciden aracıya (CLIENT_TO_AGENT) modunda çalışan, Google tarafından yönetilen bir aracı ağ geçidi dağıtın. Giden aramaları yönlendirmek için Agent Registry ilişkilendirmeleri gerektiren çıkış ağ geçitlerinin aksine, giriş ağ geçidi, Agent Runtime'ı hedefleyen gelen istemler için satır içi zorlama noktası olarak hizmet vermek üzere doğrudan ön uç katmanında bağlanır.
Çıkış politikaları genellikle ağ geçidi katmanında DRY_RUN modunda başlarken giriş içeriği yönetimi (CONTENT_AUTHZ) doğrudan zorunlu kılınan modda dağıtılır. Yalnızca denetim için ayrıntılı günlük kaydı veya etkin engelleme, bunun yerine tek tek Model Armor şablonlarında yukarı akışta kontrol edilir.
Ağ geçidi oluştur
# create agent gateway config file
cat > cfg/${AGW_NAME}.yaml <<EOF
name: ${AGW_NAME}
protocols:
- MCP
googleManaged:
governedAccessPath: CLIENT_TO_AGENT
EOF
# import agent gateway config file (create gateway)
gcloud network-services agent-gateways import ${AGW_NAME} \
--source="cfg/${AGW_NAME}.yaml" \
--location=${REGION}
Ağ geçidini doğrulama
# list agent gateways (in region)
gcloud network-services agent-gateways list --location=${REGION}
# show agent gateway details (verify deployment state)
gcloud network-services agent-gateways describe ${AGW_NAME} --location=${REGION}
Ağ geçidi bölümünü tamamladık. Şimdi Model Armor bölümüne geçiyoruz.
5. Model Armor
SDP şablonları
Model Armor yanıt şablonunda kullanılacak bir Sensitive Data Protection (SDP) inceleme ve kimliksizleştirme şablonu oluşturun. Bu yapılandırma, ABD vatandaşlık numaralarını (SSN) redaksiyon için işaretler.
İnceleme şablonu oluşturma
İnceleme şablonu, verilerdeki hassas bilgileri (US_SOCIAL_SECURITY_NUMBER) tanımlar.
# create inspect template
curl -fsS -X POST "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" \
-d @- << EOF
{
"templateId": "agw-ssn-inspect-template",
"inspectTemplate": {
"displayName": "ssn inspect template",
"inspectConfig": {
"infoTypes": [
{ "name": "US_SOCIAL_SECURITY_NUMBER" }
],
"minLikelihood": "POSSIBLE"
}
}
}
EOF
Kimliği gizleme şablonu oluşturma
Kimliği gizleme şablonu, inceleme şablonu tarafından bulunan sosyal güvenlik numaralarına uygulanacak dönüşümü belirtir. Bu durumda, dönüştürme işlemi SSN'nin bilgi türüyle değiştirilmesidir.
# create de-identify template
curl -fsS -X POST "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" \
-d @- << EOF
{
"templateId": "agw-ssn-redaction-template",
"deidentifyTemplate": {
"displayName": "SSN Redaction Template",
"deidentifyConfig": {
"infoTypeTransformations": {
"transformations": [{
"primitiveTransformation": { "replaceWithInfoTypeConfig": {} }
}]
}
}
}
}
EOF
SDP şablonlarını doğrulama
# get (describe) inspect template
curl -fsS -X GET "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" | jq
# get (describe) de-identify template
curl -fsS -X GET "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "x-goog-user-project: ${PROJ_ID}" | jq
Model Armor şablonları
Model Armor API'nin varsayılan uç noktası küreseldir (modelarmor.googleapis.com). Ancak şablonlar ve değerlendirme motorları için Model Armor kaynakları belirli coğrafi bölgelere yerelleştirilmiştir. Model Armor için Google Cloud Bölgesel Uç Nokta Proxy'si (REP) veya bölgesel API uç noktası https://modelarmor.${LOCATION}.rep.googleapis.com/'dır.
CLI, gcloud model-armor ... komutunu çalıştırırken varsayılan olarak API isteklerini standart genel uç noktaya (https://modelarmor.googleapis.com/) göndermeye çalışır. API uç noktası geçersiz kılma, Model Armor için tüm SDK/CLI HTTP isteklerini doğrudan bu konuma bağlı şablonların oluşturulduğu, depolandığı ve sorgulandığı bölgesel rep.googleapis.com API katmanına yönlendirmek için kullanılır.
API geçersiz kılma ayarını yapma
# set api endpoint override per location
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.${REGION}.rep.googleapis.com/"
API geçersiz kılma işlemini doğrulama
# view api overrides on active gcloud config
gcloud config list api_endpoint_overrides/
İstek filtresi şablonu oluşturma
Nefret söylemi, taciz, müstehcen içerik ve URI ekleme saldırılarını engellemek için bir istek filtresi şablonu oluşturun. Politika zorunlu kılma hakkında ayrıntılı etkinlik bilgilerini yakalamak için günlük kaydı etkinleştirilir. İstek engellendiğinde özel hata kodları ve mesajları da yapılandırılır.
# create model armor template (request)
gcloud beta model-armor templates create ${AGW_NAME}-modar-req-template \
--project=${PROJ_ID} \
--location=${REGION} \
--rai-settings-filters='[
{ "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "HARASSMENT", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "MEDIUM_AND_ABOVE" }
]' \
--pi-and-jailbreak-filter-settings-enforcement=enabled \
--pi-and-jailbreak-filter-settings-confidence-level=medium-and-above \
--template-metadata-enforcement-type=INSPECT_AND_BLOCK \
--malicious-uri-filter-settings-enforcement=enabled \
--template-metadata-custom-llm-response-safety-error-code=798 \
--template-metadata-custom-llm-response-safety-error-message="ahoy! model response blocked by content filter :(" \
--template-metadata-custom-prompt-safety-error-code=799 \
--template-metadata-custom-prompt-safety-error-message="ahoy! the request was blocked by ye content filter... so rephrase the prompt and try again!" \
--template-metadata-ignore-partial-invocation-failures \
--template-metadata-log-operations \
--template-metadata-log-sanitize-operations
Yanıt filtresi şablonu oluşturma
İstek filtresi şablonuyla aynı içeriği engelleyen bir yanıt filtresi şablonu oluşturun. DLP, yanıtta yapılandırılır. Böylece, ajandan istemciye dönen iletilerdeki sosyal güvenlik numaraları tanımlanamaz hale getirilir.
# create model armor template (response)
gcloud beta model-armor templates create ${AGW_NAME}-modar-resp-template \
--project=${PROJ_ID} \
--location=${REGION} \
--rai-settings-filters='[
{ "filterType": "HATE_SPEECH", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "HARASSMENT", "confidenceLevel": "MEDIUM_AND_ABOVE" },
{ "filterType": "SEXUALLY_EXPLICIT", "confidenceLevel": "MEDIUM_AND_ABOVE" }
]' \
--malicious-uri-filter-settings-enforcement=enabled \
--advanced-config-inspect-template=projects/${PROJ_ID}/locations/${REGION}/inspectTemplates/agw-ssn-inspect-template \
--advanced-config-deidentify-template=projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates/agw-ssn-redaction-template \
--template-metadata-enforcement-type=INSPECT_AND_BLOCK \
--template-metadata-custom-llm-response-safety-error-code=798 \
--template-metadata-custom-llm-response-safety-error-message="ahoy! model response blocked by content filter :(" \
--template-metadata-custom-prompt-safety-error-code=799 \
--template-metadata-custom-prompt-safety-error-message="ahoy! the request was blocked by ye content filter... so rephrase the prompt and try again!" \
--template-metadata-ignore-partial-invocation-failures \
--template-metadata-log-operations \
--template-metadata-log-sanitize-operations
Model Armor şablonlarını doğrulama
# list model armor templates
gcloud model-armor templates list --location=${REGION}
# show request filter template details
gcloud model-armor templates describe ${AGW_NAME}-modar-req-template --location=${REGION}
# show response filter template details
gcloud model-armor templates describe ${AGW_NAME}-modar-resp-template --location=${REGION}
IAM izinleri
Model Armor, Hassas Veri Koruma (SDP) hizmetini çağırmak için API çağrıları yapar. Model Armor hizmet kimliğine, SDP inceleme ve kimliksizleştirme şablonlarını kullanmak için IAM izinleri verin.
Hassas Verilerin Korunması için IAM politikası bağlama
# grant dlp (sdp) user role to the model armor service identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-modelarmor.iam.gserviceaccount.com" \
--role="roles/dlp.user"
IAM izinlerini doğrulama
# show iam policy for all dlp (sdp) roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.role:roles/dlp" \
--format="table(bindings.role:label=ROLE, bindings.members:label=PRINCIPAL_IDENTITY)"
Model Armor bölümünü tamamladık. Şimdi Yetkilendirme bölümüne geçiyoruz.
6. Yetkilendirme
IAM izinleri
Model Armor kullanarak satır içi trafiği incelemek için Hizmet Uzantıları (DEP) hizmet aracısının açık IAM bağlamaları (aynı proje içindeki kaynaklar arasında bile) gerektirir:
roles/modelarmor.calloutUserveroles/serviceusage.serviceUsageConsumer: Satır içi inceleme açıklama metinlerine izin vermek için ağ geçidi projesinde verilir.roles/modelarmor.user: Model Armor şablonlarına erişime ve bu şablonların değerlendirilmesine izin vermek için şablon projesinde verilir.
Model Armor için IAM politikası bağlama
# grant model armor callout user role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.calloutUser"
# grant service usage consumer role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
# grant model armor user role to dep (service extension) service agent
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.user"
IAM izinlerini doğrulama
# show iam policy on project for dep (service extension) service agent
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--format="table(bindings.members:label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
Yetkilendirme uzantısı
Agent Gateway için yetkilendirme uzantısı yapılandırması, gelen ve giden yük trafiği için geçerli olacak entegrasyon ayarlarını tanımlar. Yapılandırma, bölgesel Model Armor API'ye referans veren harici işleme hizmetini (service) tanımlar ve model_armor_settings meta veri alanını kullanarak belirli istek ve yanıt şablonlarına bağlanır.
Yetkilendirme uzantısı oluşturma
# create authz extension config file (enforced mode)
cat > cfg/${AGW_NAME}-svc-ext-authz-modar.yaml <<EOF
name: ${AGW_NAME}-svc-ext-authz-modar
service: modelarmor.${REGION}.rep.googleapis.com
metadata:
model_armor_settings: '[
{
"request_template_id": "projects/${PROJ_ID}/locations/${REGION}/templates/${AGW_NAME}-modar-req-template",
"response_template_id": "projects/${PROJ_ID}/locations/${REGION}/templates/${AGW_NAME}-modar-resp-template"
}
]'
failOpen: true
timeout: 5s
EOF
Yetkilendirme uzantısını içe aktarma
# import authz extension file
gcloud service-extensions authz-extensions import ${AGW_NAME}-svc-ext-authz-modar \
--source=cfg/${AGW_NAME}-svc-ext-authz-modar.yaml \
--location=${REGION}
Yetkilendirme uzantısını doğrulama
# list authz extensions
gcloud service-extensions authz-extensions list --location=${REGION}
# show authz extension details
gcloud service-extensions authz-extensions describe ${AGW_NAME}-svc-ext-authz-modar \
--location=${REGION}
Yetkilendirme politikası
Yetkilendirme politikaları, gerçekleştirilen değerlendirme türünü belirlemek için politika profillerini kullanır. İsteğe dayalı profiller (REQUEST_AUTHZ) HTTP üstbilgilerini değerlendirirken bu yapılandırmada, Model Armor uzantısını derin yük incelemesi için ağ geçidine bağlamak üzere içeriğe dayalı bir yetkilendirme profili (CONTENT_AUTHZ) kullanılır.
Yetkilendirme politikası oluşturma
# create authz policy config file (attach dry-run authz extension)
cat > cfg/${AGW_NAME}-authz-policy-modar.yaml <<EOF
name: ${AGW_NAME}-authz-policy-modar
target:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: CONTENT_AUTHZ
action: CUSTOM
customProvider:
authzExtension:
resources:
- "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AGW_NAME}-svc-ext-authz-modar"
EOF
Yetkilendirme politikasını içe aktarma
# import authz policy config file (enable authz policy)
gcloud beta network-security authz-policies import ${AGW_NAME}-authz-policy-modar \
--source=cfg/${AGW_NAME}-authz-policy-modar.yaml \
--location=${REGION}
Yetkilendirme politikasını doğrulama
# list authz policies
gcloud beta network-security authz-policies list --location=${REGION}
# show authz policy details
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-modar \
--location=${REGION}
Yetkilendirme bölümünü tamamladık. Şimdi Kod Tabanı bölümüne geçiyoruz.
7. Codebase
Bu codelab için kullanılan aracı kodu ve dosya verileri, uzak bir Google Cloud GitHub deposunda tutulur. Aşağıdaki adımlar, depoyu yerel olarak klonlar, gerekli dosyaları mevcut çalışma dizini yapısına kopyalar ve ardından geçici dosyaları temizler.
Uzak yapıları getirme
# clone remote repository to temp local dir
git clone https://github.com/GoogleCloudPlatform/cloud-networking-solutions.git ./temp_agw_cuj_arun_ingress_modar
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_ingress_modar/codelabs/agw-cuj-arun-ingress-modar/agent-crm ./agent-crm
# remove temporary directory
rm -rf temp_agw_cuj_arun_ingress_modar
Paketlenmiş aracı uygulama kodunu ve bağımlılık yapılarını yüklemek, oluşturmak ve dağıtmak için Agent Runtime tarafından bir hazırlama depolama paketi kullanılır.
Hazırlık için depolama paketi oluşturma
# create storage bucket
gcloud storage buckets create gs://${STAGING_BUCKET} --location=${REGION}
Depolama paketini doğrulama
# list storage buckets
gcloud storage buckets list --format="value(storage_url)"
Kod tabanı bölümü sona erdi. Şimdi GCS Müşteri Verileri bölümüne geçiyoruz.
Müşteri verileri
Müşteri verilerini depolamak için bir Cloud Storage paketi oluşturun. Aracı, Cloud Storage MCP uç noktasını çağıran standart Google Cloud istemci kitaplığını kullanarak doğrudan okuma işlemi yapar.
Müşteri verileri için depolama paketi oluşturma
# create storage bucket
gcloud storage buckets create gs://${DATA_BUCKET} --location=${REGION}
Depolama paketini doğrulama
# list storage buckets
gcloud storage buckets list --format="value(storage_url)"
Müşteri verilerini yükle
# copy local data to bucket
gcloud storage cp -r ./agent-crm/data/* gs://${DATA_BUCKET}/
Müşteri verilerini doğrulama
# list bucket objects
gcloud storage ls gs://${DATA_BUCKET}/ --long
GCS Müşteri Verileri bölümünü tamamladık. Şimdi ADK aracısı bölümüne geçiyoruz.
8. ADK temsilcisi
Agent Runtime'a dağıtılan agent-crm ADK aracısı, Agent Platform ile entegre olmak için dağıtım komut dosyasında aşağıdaki ayarlarla yapılandırılır:
"identity_type": types.IdentityType.AGENT_IDENTITYaracılığıyla aracı için benzersiz bir SPIFFE tabanlı asıl kimlik sağlama"client_to_agent_config": {"agent_gateway": "${AGW_URI}"}aracının tüm gelen trafiğini, aracı ağ geçidi politika değerlendirme ve zorlama yoluna yönlendirmek için
Ayrıca, güvenli bir bağlantı üzerinden GCS MCP aracını çağırmak için Cloud Storage MCP sunucusunun mTLS MCP sunucu URL'si ve veri paketi adı da aracıya iletilir.
Ajanı dağıtma
# deploy agent
uv --directory agent-crm run python3 deploy_agent.py \
--project=${PROJ_ID} \
--region=${REGION} \
--src-dir=./agent \
--staging-bucket=${STAGING_BUCKET} \
--display-name="${RE_AGENT_NAME}" \
--description="agent for customer data" \
--mcp-server-url="${MCP_URL}" \
--data-bucket=${DATA_BUCKET} \
--enable-telemetry \
--enable-agent-identity \
--agent-gateway-ingress=${AGW_URI} \
--allow-token-sharing
Dağıtımı doğrulama
Dağıtım önemli verilerini getirme
# fetch agent runtime (reasoning engine) resource id
export RE_ENGINE_ID=$(curl -s -X GET "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
| jq -r --arg name "${RE_AGENT_NAME}" '.reasoningEngines[] | select(.displayName==$name) | .name | split("/") | last')
echo ${RE_ENGINE_ID}
# fetch agent runtime (reasoning engine) agent identity
export RE_AGENT_IDENTITY=$(gcloud agent-registry agents list \
--project=${PROJ_ID} --location=${REGION} --filter="displayName=${RE_AGENT_NAME}" \
--format="value(attributes.'agentregistry.googleapis.com/system/RuntimeIdentity'.principal)")
echo ${RE_AGENT_IDENTITY}
Ağ geçidi yapılandırmasını doğrulama
# show agent runtime config details (gateway config)
curl -s -X GET "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
| jq '{displayName: .displayName, name: .name, effectiveIdentity: .spec.effectiveIdentity, agentGatewayConfig: .spec.deploymentSpec.agentGatewayConfig}'
IAM izinleri
Aracı kimliği için IAM politikalarını bağlama
# grant mcp tool user role to agent set (all agent runtime agents in project)
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_ID_SET}" \
--role="roles/mcp.toolUser"
# grant storage object viewer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/storage.objectViewer"
# grant aiplatform user role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/aiplatform.user"
# grant cloudtrace agent role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/cloudtrace.agent"
# grant cloud monitoring metric writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/monitoring.metricWriter"
# grant cloud logging log writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/logging.logWriter"
# grant telemetry writer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/telemetry.writer"
# grant service usage consumer role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/serviceusage.serviceUsageConsumer"
# grant browser role to agent identity
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/browser"
IAM izinlerini doğrulama
# show agent identity roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:${RE_AGENT_IDENTITY}" \
--format="table(bindings.members.sub('^.*locations/', 'principal://agents.[...]/locations/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
# show agent set roles on project
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:${RE_AGENT_ID_SET}" \
--format="table(bindings.members.sub('^.*platformContainer/', 'principalSet://agents.[...]/'):label=PRINCIPAL_IDENTITY, bindings.role:label=ROLE)"
ADK aracısı bölümü sona erdi. Şimdi Test bölümüne geçiyoruz.
9. Test
KSA'dan sorgu gönderimi
Güvenli bir istemi test etme
# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
-d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
"input": {
"message": "what are the names of our west customers?",
"user_id": "test-user"
}
}
EOF
Şuna benzer bir yanıt görmelisiniz: "Batıdaki müşterilerimiz: Ali Can ve Ayşe Kaya."
Redaksiyon tetikleyicisini test etme
# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
-d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
"input": {
"message": "what are ssn's for bob johnson and alice brown?",
"user_id": "test-user"
}
}
EOF
Başka bir güvenli istemi test etme
# post query to agent streamQuery
curl --no-buffer -s -X POST "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json" -H "X-Goog-User-Project: ${PROJ_ID}" \
-d @- <<EOF | jq -r --unbuffered 'if type == "array" then .[] else . end | select(.content.parts != null) | .content.parts[].text // empty'
{
"input": {
"message": "what are bob johnson's and alice brown's email addresses?",
"user_id": "test-user"
}
}
EOF
Denetim günlükleri
İz günlüklerini görüntüleme
Telemetri etkinleştirildiğinde Agent Runtime, kullanıcı sorgularını, araç parametrelerini, yürütme akışlarını ve model seçimi çıkışlarını temsil eden yapılandırılmış etkinlikleri yayınlar.
# show agent runtime (reasoning engine) telemetry and trace logs
gcloud logging read \
"logName:\"projects/${PROJ_ID}/logs/aiplatform.googleapis.com%2Freasoning_engine_stdout\" AND labels.managed-by=\"reasoning-engine\"" \
--project=${PROJ_ID} \
--limit=15 \
--format="table(
timestamp.date(format=\"%I:%M:%S %p\", tz=LOCAL):label=TIME,
trace.basename().sub('^(.{8}).*$', '\\1'):label=TRACE_ID,
labels.\"event.name\".scope(-1):label=EVENT,
jsonPayload.content.role:label=ROLE,
jsonPayload.content.parts[0].text:label=TEXT_CONTENT,
jsonPayload.content.parts[0].function_call.name:label=TOOL_CALL
)"
TRACE_ID, kullanıcı sorgusunu, ara araç çağrılarını ve model kararlarını tek bir zaman çizelgesinde gruplandırır:
TIME TRACE_ID EVENT ROLE TEXT_CONTENT TOOL_CALL
HH:MM:SS PM 3070a1fd gen_ai.choice model Bob Johnson's SSN is 219-45-7895.
Alice Brown's SSN is 219-45-7896.
HH:MM:SS PM 3070a1fd gen_ai.user.message user
HH:MM:SS PM 3070a1fd gen_ai.user.message model read_customer_file
HH:MM:SS PM 3070a1fd gen_ai.user.message user
HH:MM:SS PM 3070a1fd gen_ai.user.message model read_customer_file
HH:MM:SS PM 3070a1fd gen_ai.user.message user
HH:MM:SS PM 3070a1fd gen_ai.user.message model list_customer_files
HH:MM:SS PM 3070a1fd gen_ai.user.message user what are ssn's for bob johnson and alice brown?
HH:MM:SS PM 3070a1fd gen_ai.system.message
HH:MM:SS PM 3070a1fd gen_ai.choice model read_customer_file
Model Armor temizleme günlüklerini görüntüleme
Bu günlükler, trafik Agent Gateway'den geçerken Model Armor tarafından gerçekleştirilen gerçek zamanlı, çift yönlü satır içi tehdit ve temizleme işlemlerini gösterir.
# show model armor logs
gcloud logging read \
"logName:\"projects/${PROJ_ID}/logs/modelarmor.googleapis.com%2Fsanitize_operations\"" \
--project=${PROJ_ID} \
--limit=50 \
--format="table(
timestamp.date(format=\"%I:%M:%S %p\", tz=LOCAL):label=TIME,
jsonPayload.sanitizationResult.sanitizationVerdict:label=VERDICT,
jsonPayload.sanitizationInput.byteItem.byteData.decode(base64).decode(utf-8).sub('\n', ' \\\\\\\\n ').trailoff(123):label=INPUT_DATA
)"
Temizlenmiş ve engellenmiş isteğin günlük girişine dikkat edin.
TIME VERDICT INPUT_DATA
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW Bob Johnson's email address is bob.j@example.com. \n Alice Brown's email address is alice.b...
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW what are bob johnson's and alice brown's email addresses?
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_BLOCK 6��
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW what are ssn's for bob johnson and alice brown?
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW Our west customers are: Bob Johnson and Alice Brown.
HH:MM:SS PM MODEL_ARMOR_SANITIZATION_VERDICT_ALLOW what are the names of our west customers?
Test bölümünü tamamladık. Şimdi Temizleme bölümüne geçiyoruz.
10. Temizleme
# remove agent iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/storage.objectViewer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/aiplatform.user"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/cloudtrace.agent"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/monitoring.metricWriter"
# next
# remove more agent and agent set iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/logging.logWriter"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/telemetry.writer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/serviceusage.serviceUsageConsumer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_IDENTITY}" --role="roles/browser"
# next
# remove rest of iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="${RE_AGENT_ID_SET}" --role="roles/mcp.toolUser"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} --member="serviceAccount:service-${PROJ_NO}@gcp-sa-modelarmor.iam.gserviceaccount.com" --role="roles/dlp.user"
# next
# delete agent runtime (reasoning engine) agent
curl -s -X DELETE "https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}?force=true" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "Content-Type: application/json"
# next
# delete storage
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}
gcloud -q storage rm --recursive gs://${DATA_BUCKET}
# next
# delete authz resources
gcloud -q beta network-security authz-policies delete ${AGW_NAME}-authz-policy-modar --location=${REGION}
gcloud -q beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-modar --location=${REGION} --async
# next
# remove dep (service extensions) service agent iam bindings
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.calloutUser"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/serviceusage.serviceUsageConsumer"
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="serviceAccount:service-${PROJ_NO}@gcp-sa-dep.iam.gserviceaccount.com" \
--role="roles/modelarmor.user"
# next
# delete model armor templates
gcloud -q model-armor templates delete ${AGW_NAME}-modar-resp-template --location=${REGION}
gcloud -q model-armor templates delete ${AGW_NAME}-modar-req-template --location=${REGION}
# unset model armor api endpoint override
gcloud config unset api_endpoint_overrides/modelarmor
# next
# delete sdp (dlp) templates
curl -fsS -X DELETE "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/deidentifyTemplates/agw-ssn-redaction-template" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: ${PROJ_ID}"
curl -fsS -X DELETE "https://dlp.googleapis.com/v2/projects/${PROJ_ID}/locations/${REGION}/inspectTemplates/agw-ssn-inspect-template" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
-H "x-goog-user-project: ${PROJ_ID}"
# next
# delete agent gateway ingress
gcloud -q network-services agent-gateways delete ${AGW_NAME} --location=${REGION} --async
# end
Temizleme bölümünü tamamladık. Şimdi Sonuç bölümüne geçiyoruz.
11. Sonuç
Tebrikler! Aracı Ağ Geçidi'ni başarıyla dağıttınız ve bir yapay zeka aracısına gelen trafiği yönetiyorsunuz.

Cosmopup, Codelab'lerin harika olduğunu düşünüyor.
Sırada ne var?
- Gelişmiş özellikler ve eğitimler için Gemini Enterprise Agent Platform belgelerine göz atın.
- Ek yapay zeka güvenliği için Agent Gateway'de Model Armor korumalarını yapılandırma
- Doğal dil sorgularında işletme kurallarını ve uygunluğu zorunlu kılmak için Anlamsal Yönetim Politikaları'nı inceleyin.
Bu geri bildirim formunu kullanarak yorum, soru veya düzeltme önerilerinizi paylaşabilirsiniz.
Teşekkürler!