Agent Runtime'dan harici MCP'ye Agent Gateway çıkışı

1. Giriş

Bu Codelab'de, Google Cloud dışında barındırılan harici Model Context Protocol (MCP) sunucularına erişen yapay zeka ajanları için Agent Gateway çıkış yönetimi ele alınmaktadır.

Bağımsız chatbot'lardan çoklu ajan iş akışlarına sahip otonom sistemlere kadar yapay zeka uygulamaları, harici araçları dinamik olarak çağırabilir. Ajanlara veritabanlarını sorgulama, web içeriğini getirme ve işlemleri yürütme konusunda kontrollü erişim sağlamak, güvenli ve verimli ajanlar için çok önemlidir. Ancak kurumsal ortamlarda aracı araç yürütme işleminin güvenliğini sağlamak zordur. Bir aracının doğrudan ağ erişimi varsa istem enjeksiyonu saldırıları veya model halüsinasyonları, aracının hassas verileri sızdırmasına ya da yıkıcı komutlar çalıştırmasına neden olabilir.

Agent Gateway, özerk temsilcileri geniş ölçekte yönetmek için doğrudan Agent Platform mimarisine entegre edilmiş merkezi bir sıfır güven uygulama noktası sağlar. Agent Gateway, her uygulamaya veya aracı koduna özgü özel uygulamalara güvenmek yerine platform düzeyinde uygulanan ağ yönlendirme, aracı yönetimi ve çalışma zamanı güvenliği sağlar.

Agent Gateway, çıkış (agent-to-anywhere) modunda çalıştığında, ağ geçidini kullanacak şekilde yapılandırılmış aracıların tüm giden isteklerini proxy'ler. Her aracı iş yükü isteğinin kimliği, benzersiz Aracı Kimliği kullanılarak doğrulanır ve Identity-Aware Proxy (IAP) politikaları kullanılarak yetkilendirilir. MCP aracı çağrıları, politika yaptırımı için dinamik olarak kod çözülür ve incelenir. Güvenlik yöneticileri, aracıların yalnızca onaylanmış uç noktaları ve yöntemleri çağırabilmesini sağlamak için ayrıntılı izinleri merkezi olarak zorunlu kılabilir.

Ne oluşturacaksınız?

  • Çıkışta (agent-to-anywhere) Agent Gateway
  • Identity-Aware Proxy (IAP) yetkilendirme uzantısı
  • Ajan kimliğine sahip Agent Runtime ADK aracısı
  • Google API ve MCP uç noktalarıyla Agent Registry
  • Data Commons herkese açık veri kümelerine harici MCP aracı bağlantısı
  • IAM erişim denetimi ile yetkilendirme politikaları

figure1

Şek. 1. Codelab mimarisi

Öğrenecekleriniz

  • Agent Gateway'i yapılandırılmış bir yapılandırma sırasıyla dağıtma
  • Yetkilendirme politikalarını prova modundan zorunlu moda geçirme
  • Google API uç noktalarını ve MCP sunucularını Agent Registry'ye kaydetme
  • MCP protokolü özelliklerine dayalı koşullu yetkilendirme politikalarını kullanma
  • Çıkış yönetimi doğrulamak için aracı ağ geçidi günlükleri nasıl denetlenir?

İhtiyacınız olanlar

  • Faturalandırmanın etkin olduğu bir Google Cloud projesi
  • Ağ hizmetlerini ve aracı platformu kaynaklarını sağlama için IAM izinleri
  • Google Cloud KSA'nın (gcloud ve bq bileşenleri) yüklü olduğu POSIX uyumlu bir kabuk (bash veya zsh)
  • Komut satırı araçları: git, curl, jq (JSON işlemcisi), Python 3 ve uv (Python paket yöneticisi)
  • Sorgu testi veri kümelerine erişmek için ücretsiz Data Commons API anahtarı

2. Kavramlar

Dağıtım sırası

Bu codelab, yapılandırılmış bir yapılandırma sırasını takip eder. Böylece, aracılar başlatma sırasında gerekli kaynaklara erişebilir ve zorunlu erişim politikaları uygulanmadan önce bağlantı doğrulanabilir.

Bu Codelab'de aşağıdaki dağıtım sırası kullanılır:

  1. DRY_RUN modunda başlatma: Aracı isteklerinin ağ geçidine başarıyla ulaştığından ve ağ geçidinden geçtiğinden (yalnızca denetim modu) emin olun.
  2. Tüm hizmetleri kaydetme: Aracı Kaydı'ndaki tüm aracı bileşenlerini kaydedin ve aracı aracına erişimi onaylayın.
  3. Yetkilendirme politikaları oluşturma: Aracıların MCP sunucularına ve uç noktalarına giden trafiğe izin vermek için yetkilendirme politikaları oluşturun ve uygulayın.
  4. ENFORCED moduna geçin: Politikaları zorunlu kılmak ve yetkisiz çıkış trafiğini engellemek için yetkilendirme uzantısı politikasını güncelleyin.

figure2

Şekil 2. Dağıtım sırası

Çıkış yönlendirme topolojisi

Agent Gateway çıkışı (agent-to-anywhere), ajan tabanlı iş yükleri için merkezi bir sıfır güven ilkeli giden proxy görevi görür. Bir aracı, harici bir araç veya API'ye istekte bulunduğunda giden istek, Agent Gateway tarafından yakalanır ve hedefine yönlendirilmeden önce yönetim politikalarına göre değerlendirilir. Google Cloud Agent Platform mimarisinde Agent Gateway, aşağıdaki öğelerle veri düzlemi bağlantısı sağlar:

  • Özel ağlar (VPC): Şirket içi API'leri, mikro hizmetleri, özel VPC'lerde barındırılan veritabanlarını ve karma bağlantı üzerinden erişilebilen şirket içi veya bulutlar arası ağları hedefleyen giden trafik.
  • Harici ağlar (İnternet): Üçüncü taraf web hizmetlerini, SaaS API'lerini veya herkese açık uç noktaları hedefleyen giden trafik.
  • Yapay zeka hizmetleri ve aracı platformu: Yönetilen Google Cloud API'lerini, temel modelleri, Google MCP uç noktalarını (ör. BigQuery) ve platform yönetimi hizmetlerini (aracı kayıt defteri ve IAP politikaları) hedefleyen giden trafik.

figure3

Şekil 3. Agent Gateway çıkış yönlendirme topolojisi

Bu Codelab'in odak noktası, Agent Runtime'da bulunan özel bir aracıdan internet üzerinden erişilebilen harici bir üçüncü taraf MCP sunucusu uç noktasını hedefleyen giden trafiktir.

MCP protokolü denetimi

Agent Gateway çıkışı (agent-to-anywhere), MCP isteklerinin içeriklerini ayrıştırabilir ve erişim politikalarını ayrıntılı protokol özelliklerine göre değerlendirebilir. Aracıdan MCP sunucusuna çıkış politikaları, Common Expression Language (CEL) ile ifade edilen ve her istekte çalışma zamanında uygulanan koşullar içerebilir.

MCP çağrıları genellikle JSON-RPC kablo protokolü biçimini ve HTTP aktarımını kullanır. Çağrılan MCP yönteminin (ör. tools/call) ayrıntıları, hedef araç adı ve tüm bağımsız değişkenler HTTP gövdesindeki JSON yükünde yer alır.

iap.googleapis.com/mcp.toolName özelliği, Agent Gateway tarafından JSON gövdesi ayrıştırılarak istekte belirtilen araç tanımlayıcısı bulunarak çıkarılır.

iap.googleapis.com/mcp.tool.isReadOnly ve mcp.tool.isDestructive gibi özellikler genellikle her istek gövdesinde gönderilmez. Bunlar, araçla ilişkili ek açıklamalar (meta veriler) olarak gösterilir. Bu nedenle, Agent Gateway toolName değerini gövdeden çıkardığında toolspec.json içeriğinin kaydedildiği Agent Registry'den araç tanımını ve ilişkili özellikleri arar.

figure4

Şekil 4. Agent Gateway MCP incelemesi

IAP IAM koşullarında kullanılan CEL ifadeleri, api.getAttribute('iap.googleapis.com/ATTRIBUTE_NAME', 'DEFAULT_VALUE')== 'DESIRED_VALUE' standart biçimini kullanır.

Bu tabloda, MCP sunucu isteklerine uygulanabilecek Agent Gateway çıkış yönetimi özellikleri açıklanmaktadır:

Özellik

MCP Yöntemi / Konumu

Açıklama

mcp.toolName

tools/call (Gövde)

RPC yükünde istenen hedef araç tanımlayıcısı (ör. "delete_instance")

mcp.tool.isReadOnly

Agent Registry (toolspec.json)

Aracın salt okunur olup olmadığını (ortamını değiştirip değiştirmediğini) gösterir.

mcp.tool.isDestructive

Agent Registry (toolspec.json)

Aracın çağrılmasının geri döndürülemez değişikliklere veya veri kaybına neden olup olmayacağını gösterir.

mcp.tool.isIdempotent

Agent Registry (toolspec.json)

Aynı bağımsız değişkenlerle tekrarlanan araç yürütme işleminin tam olarak aynı durumu oluşturup oluşturmadığını gösterir.

mcp.tool.isOpenWorld

Agent Registry (toolspec.json)

Aracın, sınırlı dahili sistemlerin ötesine geçerek sınırsız herkese açık internete ulaşıp ulaşmadığını gösterir.

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

roles/serviceusage.serviceUsageAdmin

Google Cloud API hizmetlerini etkinleştirme

Ağ ve ağ geçidi

roles/networkservices.admin

Agent Gateway'i sağlama

Hizmet uzantıları

roles/serviceextensions.admin

Yönlendirme uzantılarını yapılandırma

Ağ güvenliği

roles/networksecurity.admin

Yetkilendirme politikalarını dağıtma

Agent Registry

roles/agentregistry.admin

Katalog için izin verilen ana makineler

Vertex AI ve temsilciler

roles/aiplatform.admin

Agent Runtime iş yüklerini dağıtma

Çıkış politikaları

roles/iap.admin

roles/iap.egressor politikalarını uygulama

Cloud Storage

roles/storage.admin

Dağıtım hazırlama paketlerini yönetme

Günlükler ve denetleme

roles/logging.viewer

İ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:

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"
export MREGION="us"
echo ${SLUG}
echo ${REGION}
echo ${MREGION}
# 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)
echo ${PROJ_ID}
echo ${PROJ_NO}
echo ${ORG_ID}
# create resource vars (automatic)
export AGW_NAME="agw-${SLUG}-${REGION}-ata"
export AGW_URI="projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
export RE_AGENT_NAME="agent-datacommons"
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 MCP_DISPLAY_NAME="api.datacommons.org"
export MCP_RESOURCE_NAME="${REGION}-datacommons-mcp"
export MCP_URL="https://api.datacommons.org/mcp"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
echo ${MCP_DISPLAY_NAME}
echo ${MCP_RESOURCE_NAME}
echo ${MCP_URL}
# create local dir for config files
mkdir -p cfg

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

Kurulum bölümünün sonuna geldik. Şimdi Ağ Geçidi bölümüne geçiyoruz.

4. Ağ geçidi

Erişim kontrollerini zorunlu kılmadan önce Agent Gateway'i dağıtın ve yetkilendirme uzantısını DRY_RUN modunda yapılandırın. Bu, giden araç çağrılarının başarılı olmasına olanak tanırken denetim amacıyla değerlendirme sonuçlarını da kaydeder.

Burada Agent Gateway, bölgesel Agent Runtime kaynaklarını desteklemek için bölgesel bir kayıt defteri kullanır.

Ağ geçidi oluştur

# create agent gateway config file (regional registry)
cat > cfg/${AGW_NAME}.yaml << EOF
name: ${AGW_NAME}
protocols:
  - MCP
googleManaged:
  governedAccessPath: AGENT_TO_ANYWHERE
registries:
  - "//agentregistry.googleapis.com/projects/${PROJ_ID}/locations/${REGION}"
EOF
# import agent gateway config file (create gateway)
gcloud network-services agent-gateways import ${AGW_NAME} \
  --source="cfg/${AGW_NAME}.yaml" \
  --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 Yetkilendirme bölümüne geçiyoruz.

5. Yetkilendirme

Identity-Aware Proxy (IAP) için Agent Gateway yetkilendirme uzantısı, tüm Agent Platform iletişimleri için yetkilendirme kararlarını temsilciye devretmek üzere kullanılan bir hizmet uzantısı türüdür.

  1. Yetkilendirme akışı: Bir aracı, harici bir uç noktayı veya MCP sunucusunu çağırmaya çalıştığında isteği Agent Gateway'e yönlendirir. Ağ geçidi, erişimi yerel olarak değerlendirmek yerine yetkilendirme uzantısını kullanarak IAP değerlendirme hizmetine bir açıklama metni gönderir. IAP, temsilci (SPIFFE tabanlı) kimliğini, Temsilci Kayıt Defteri'ndeki hedef kaynağın IAM politikasına göre değerlendirir. IAP, ağ geçidine ALLOW veya DENY kararı döndürür. Ağ geçidi, trafiği iletir ya da HTTP 403 Forbidden durum koduyla engeller.
  2. Zorunlu kılma modları: DRY_RUN modunda IAP, istekleri değerlendirir ve trafiği engellemeden kararları Cloud Logging'e kaydeder. ENFORCE modunda, yetkisiz bir aracıdan gelen veya kayıtlı olmayan bir hedefe yönelik tüm istekler anında engellenir.
  3. Bağlama katmanı: Hizmet uzantısı, REQUEST_AUTHZ profiliyle yapılandırılmış bir yetkilendirme politikası kullanılarak Agent Gateway'e bağlanır.

Yetkilendirme uzantısı

Yetkilendirme uzantısı oluşturma

# create authz extension config file (dry run mode)
cat > cfg/${AGW_NAME}-svc-ext-authz-iap-dryrun.yaml << EOF
name: ${AGW_NAME}-svc-ext-authz-iap-dryrun
service: iap.googleapis.com
failOpen: true
timeout: 1s
metadata:
  iamEnforcementMode: "DRY_RUN"
  iapPolicyVersion: "V1"
EOF
# import authz extension file (create extension)
gcloud service-extensions authz-extensions import ${AGW_NAME}-svc-ext-authz-iap-dryrun \
  --source=cfg/${AGW_NAME}-svc-ext-authz-iap-dryrun.yaml \
  --location=${REGION}
# show authz extension details (verify extension state)
gcloud service-extensions authz-extensions describe ${AGW_NAME}-svc-ext-authz-iap-dryrun \
  --location=${REGION}

Yetkilendirme politikası

Yetkilendirme politikası, güvenlik sağlayıcıyı (IAP) hedef ağ geçidi kaynağına bağlar ve yakalama profilini (REQUEST_AUTHZ) belirtir.

Yetkilendirme politikası oluşturma

# create authz policy config file (attach dry-run authz extension)
cat > cfg/${AGW_NAME}-authz-policy-profile-iap.yaml << EOF
name: ${AGW_NAME}-authz-policy-profile-iap
target:
  resources:
    - "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: REQUEST_AUTHZ
action: CUSTOM
customProvider:
  authzExtension:
    resources:
      - "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AGW_NAME}-svc-ext-authz-iap-dryrun"
EOF
# import authz policy config file (enable authz policy)
gcloud beta network-security authz-policies import ${AGW_NAME}-authz-policy-profile-iap \
  --source=cfg/${AGW_NAME}-authz-policy-profile-iap.yaml \
  --location=${REGION}
# show authz policy details (verify dry run mode)
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-profile-iap \
  --location=${REGION}

Yetkilendirme bölümünü tamamladık. Şimdi Kod Tabanı bölümüne geçiyoruz.

6. Kod tabanı

Bu Codelab'de kullanılan aracı kodu ve uç nokta kaydı komut dosyası, 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.

Agent Runtime'ın paketlenmiş aracı uygulama kodunu ve bağımlılık yapılarını yüklemesi, oluşturması ve dağıtması için bir depolama hazırlama paketi oluşturulur.

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_egress_emcp
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_egress_emcp/codelabs/agw-cuj-arun-egress-emcp/agent-datacommons ./agent-datacommons
cp -r temp_agw_cuj_arun_egress_emcp/codelabs/agw-cuj-arun-egress-emcp/endpoints ./endpoints
# remove temporary directory
rm -rf temp_agw_cuj_arun_egress_emcp

Hazırlık paketi oluşturma

# create storage bucket for agent deployment artifacts
gcloud storage buckets create gs://${STAGING_BUCKET} --location=${REGION}
# verify staging bucket url
gcloud storage buckets list --format="value(storage_url)"

Kod tabanı bölümünü tamamladık. Şimdi Kayıt Defteri bölümüne geçiyoruz.

7. Kayıt otoritesi

Agent Registry, yapay zeka ekosistemindeki tüm aracıların, MCP sunucularının ve uç noktaların (API'ler) merkezi bir envanteridir. Ayrıca, yapay zeka uygulamalarının kullanabileceği diğer kayıtlı araç ve hizmetleri listelemek, aramak ve keşfetmek için kullanılabilecek bir katalogdur. Aracı Ağ Geçidi çıkış (agent-to-anywhere) modu, çıkış erişim denetimini zorunlu kılmak için kayıt veri modelini yönetim çerçevesi olarak kullanır. Arayan aracı için IAM rolü izinleri, kayıt kaynağına bağlı politika ile karşılaştırılarak kontrol edilir.

Ortamı başlatmak ve çeşitli Google API'leri ve Hizmetleri'ni kullanan aracıları desteklemek için endpoints/googleapis.txt'daki ana makine adlarını ve konumları kullanarak ortak bir API uç noktaları grubunu hızlıca kaydetmek için bir komut dosyası kullanılır.

Uç noktaları kaydetme

# run python script to register google api endpoints
python3 endpoints/register_endpoints.py \
  --multi-region=${MREGION} \
  --region=${REGION} \
  --mtls-endpoints=include

Uç noktaları doğrulama

# list registry regional endpoints (verify registration)
gcloud agent-registry endpoints list --location=${REGION} \
  --format="table(displayName, name.basename():label=ENDPOINT_ID, interfaces[0].url:label=URL)"

Kayıt bölümünü tamamladık. Şimdi Data Commons bölümüne geçiyoruz.

8. Data Commons

Data Commons, herkese açık veri kümelerini düzenleyerek herkesin kullanımına ve erişimine sunmayı amaçlayan bir Google girişimidir. Ücretsiz bir hizmettir ve hesap oluşturduktan sonra API anahtarı kullanılarak erişilebilir.

API anahtarı oluştur

Hesap oluşturduktan sonra API anahtarı almak için aşağıdaki adımları uygulayın:

  • Data Commons API Portal'a giriş yapın.
  • Sağ üst köşedeki "Uygulamalarım" düğmesini tıklayın.
  • Kullanıcı adınızın altındaki sağ üst köşede "+ YENİ UYGULAMA" düğmesini tıklayın.
  • Uygulamanıza bir ad verin (ör. "Codelab Agent MCP").
  • Data Commons API için "ETKİNLEŞTİR" düğmesini tıklayın. api.datacommons.org
  • Sağ alt köşedeki "KAYDET" düğmesini tıklayın.

Bu işlemle bir API anahtarı ve gizli anahtar oluşturulur. "API anahtarını kopyalamak" için anahtar değerinin yanındaki "kopyala" simgesini tıklayın. Değeri, DC_API_KEY ortam değişkenini ayarlamak için terminal komutuna yapıştırın.

# set api key env var
 export DC_API_KEY="YOUR_API_KEY_HERE"

MCP sunucusu oluşturma toolspec

MCP sunucusu manuel olarak kaydedilirken kayıt sırasında bir araç spesifikasyon dosyası eklenmelidir. toolspec.json dosyası yüklemek, uç nokta tarafından kullanıma sunulan tüm araçları listeler ve diğer kullanıcıların bunları keşfetmesine olanak tanır.

test_mcp.py komut dosyası, agent-datacommons/ kod tabanında yer alır. Hedef MCP sunucusuna (SSE veya HTTP üzerinden) bağlanarak bir toolspec.json dosyası oluşturur ve sunucu tarafından kullanıma sunulan tüm araçları almak için list_tools() işlevini çağırır.

# generate toolspec for registry ingestion
uv --directory agent-datacommons run python3 test_mcp.py --toolspec=include --token="${DC_API_KEY}"

Oluşturulan toolspec çıktısına bakıldığında, Agent Gateway'in çıkış politikası değerlendirmesi ve zorunlu kılma için kullanabileceği MCP özellikleri gösterilir.

# show toolspec mcp attributes
jq '.tools[] | {name, isReadOnly, isDestructive, isIdempotent, isOpenWorld}' agent-datacommons/toolspec.json

MCP sunucusunu kaydetme

# register mcp server
gcloud agent-registry services create ${MCP_RESOURCE_NAME} \
  --location=${REGION} \
  --display-name="${MCP_DISPLAY_NAME}" \
  --description="mcp server for data commons" \
  --mcp-server-spec-type=tool-spec \
  --mcp-server-spec-content=agent-datacommons/toolspec.json \
  --interfaces=url=${MCP_URL},protocolBinding=JSONRPC
# list registry regional mcp servers
gcloud agent-registry mcp-servers list --location=${REGION} --format="table(displayName, interfaces.url)"
# show mcp server registry details
gcloud agent-registry services describe ${MCP_RESOURCE_NAME} --location=${REGION}
# fetch mcp server registry id
export MCP_REGISTRY_ID=$(gcloud agent-registry services describe ${MCP_RESOURCE_NAME} \
  --location=${REGION} \
  --format="value(registryResource.basename())")
echo ${MCP_REGISTRY_ID}

Data Commons bölümünü tamamladık. Şimdi Runtime bölümüne geçiyoruz.

9. Çalışma zamanı

Agent Runtime'a dağıtılan agent-datacommons ADK aracısı, Agent Platform ile entegrasyon için dağıtım komut dosyasında aşağıdaki ayarlarla yapılandırılır:

  • "identity_type": types.IdentityType.AGENT_IDENTITY, aracı için SPIFFE tabanlı benzersiz bir asıl kimlik sağlamak üzere
  • Giden tüm aracı tarafından başlatılan trafiği politika değerlendirmesi ve yaptırımı için aracı ağ geçidine yönlendirmek üzere "agent_gateway_config": { "agent_to_anywhere_config": {"agent_gateway": } }

Ajanı dağıtma

# deploy agent runtime workload
uv --directory agent-datacommons 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 data commons stats" \
  --enable-telemetry \
  --enable-agent-identity \
  --agent-gateway-egress=${AGW_URI} \
  --env-var="DC_API_KEY=${DC_API_KEY}"

Dağıtım önemli verilerini getirme

# fetch agent runtime resource (reasoning engine) 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 \
  --location=${REGION} --filter="displayName=${RE_AGENT_NAME}" \
  --format="value(attributes.'agentregistry.googleapis.com/system/RuntimeIdentity'.principal)")
echo ${RE_AGENT_IDENTITY}
# fetch agent registry uid for agent
export RE_AGENT_REGISTRY_ID=$(gcloud agent-registry agents list \
  --location=${REGION} \
  --filter="displayName=${RE_AGENT_NAME}" \
  --format="value(uid)")
echo ${RE_AGENT_REGISTRY_ID}

Kayıt defteri girişini doğrulama

# show agent resource registry details
gcloud agent-registry agents describe ${RE_AGENT_REGISTRY_ID} --location=${REGION}

10. Politikalar

Aracı yönetimi yetkilendirme politikaları, bir yapay zeka aracısından gelen trafiğin Aracı Ağ Geçidi üzerinden ve hedefe (ör. bir SaaS uygulaması için üçüncü taraf MCP sunucusu uç noktası) ulaşmasına izin verir. Trafik hedefe ulaştığında, normal hizmet düzeyi veya uygulama düzeyi izinler veri erişimini yetkilendirir.

Agent Gateway çıkışı için IAM rolü verme, aracı asıl kimliğinin Agent Gateway üzerinden kayıtlı hedef kaynaklara erişmesine izin veren erişim politikalarını etkinleştirir. Politikalar, aracı ağ geçidi düzeyinde uygulanır ve Identity-Aware Proxy (IAP) IAM politikaları kullanılarak doğrulanır.

Agent Gateway çıkışı için aracıya IAM rolleri verme

Agent Gateway, gelen istekleri kontrol ederek arayan aracının kimliğinin hedef kaynakta iap.webServiceVersions.egressViaIAP iznine (roles/iap.egressor rolü tarafından verilir) sahip olduğunu doğrular.

Seçilen hedef kaynakta ajan kimliğine veya Agent Runtime asıl kümesine roles/iap.egressor izni verilmesi, bu çıkış trafiğine izin verir. Bu codelab'de rol, belirli Agent Runtime aracı kimliğine izin veren agent ana hesabına uygulanır.

IAM politikaları, Agent Registry veri modelinde tanımlandığı şekilde hedef kaynaklara bağlıdır. iap_web/agentRegistry kaynağı, IAM hiyerarşisinde "kayıt genelinde" bir düzeyi temsil eder. Burada agentRegistry, agents, mcpServers ve endpoints için ayrı ayrı alt kaynakların üst öğesi olarak kullanılır. Bu codelab'de, IAM politikası mcpServer ve endpoint düzeylerine bağlıdır. Bu düzeyler, izni belirli alt kaynaklara uygular.

Koşullu MCP filtreleme hakkında

Data Commons MCP sunucusunda iki araç bulunur:

  • search_indicators: Hangi verilerin mevcut olduğunu keşfetme, değişken arama veya veri kapsamını anlama ile ilgili sorgular için
  • get_observations: belirli veri noktalarını veya zaman serilerini almak için yapılan sorgular

MCP sunucularında koşullu yönetim politikaları yapılandırırken dikkat etmeniz gereken bazı standart MCP işlemleri vardır. Bir MCP istemcisinin tools/call için search_indicators veya get_observations yapabilmesi için öncelikle protokol el sıkışması ve keşif istekleri göndermesi gerekir:

  • initialize
  • notifications/initialized
  • tools/list

Koşullu politika filtrelemeyi göstermek için politika şu koşullara göre yapılandırılacak:

Tablo. MCP istekleri için politika değerlendirmesi

İstek / Yöntem

mcp.toolName Değeri

CEL Değerlendirmesi

Sonuç

initialize

""

"" in ['search_indicators', '']

✅ İZİN VERİLİR (200)

tools/list

""

"" in ['search_indicators', '']

✅ İZİN VERİLİR (200)

search_indicators

"search_indicators"

"search_indicators" in [...]

✅ İZİN VERİLİR (200)

get_observations

"get_observations"

"get_observations" in [...]

❌ DENIED (403)

Protokol el sıkışmalarına ve search_indicators araç çağrısına izin vermek için koşullu politika kuralı, "search_indicators" veya "" (boş dize) için izin içerir.

Kayıt defteri IAP MCP sunucusu IAM politikasını yapılandırma

# show iap iam policy for mcp server
gcloud beta iap web get-iam-policy \
  --region=${REGION} \
  --resource-type=agent-registry \
  --mcp-server=${MCP_REGISTRY_ID}

NOT: Henüz politika tanımlanmadığı için etag:, varsayılan ACAB değerini döndürmelidir.

# fetch active etag on policy for mcp server
export IAP_ETAG=$(gcloud beta iap web get-iam-policy \
  --resource-type=agent-registry --region=${REGION} \
  --mcp-server=${MCP_REGISTRY_ID} --format="value(etag)")
echo ${IAP_ETAG}
# create policy config file
cat > cfg/iap-policy-dc-agent-to-dc-mcp-tool-1.json << EOF
{
  "bindings": [
    {
      "role": "roles/iap.egressor",
      "members": [
        "${RE_AGENT_IDENTITY}"
      ],
      "condition": {
        "title": "allow ${RE_AGENT_NAME} to use search_indicators tool for ${MCP_DISPLAY_NAME}",
        "expression": "api.getAttribute('iap.googleapis.com/mcp.toolName', '') in ['search_indicators', '']"
      }
    }
  ],
  "etag": "${IAP_ETAG}",
  "version": 3
}
EOF
# import policy file (bind iam policy)
gcloud beta iap web set-iam-policy cfg/iap-policy-dc-agent-to-dc-mcp-tool-1.json \
  --resource-type=agent-registry \
  --mcp-server=${MCP_REGISTRY_ID} \
  --region=${REGION}
# verify iap iam policy for mcp server
gcloud beta iap web get-iam-policy \
  --region=${REGION} \
  --resource-type=agent-registry \
  --mcp-server=${MCP_REGISTRY_ID}

Politikalar bölümümüzün sonuna geldik. Şimdi Denetim bölümüne geçiyoruz.

11. Denetim

Agent Gateway yetkilendirme uzantısı DRY_RUN modunda çalışıyor. Giden istekler gözlemlenir ve günlüğe kaydedilir ancak engellenmez.

Test temsilcisi sorguları

Google Cloud Console kullanıcı arayüzü için bir tarayıcı penceresi açın ve şuraya gidin:

  • Agent Platform → Agents → Deployments → agent-datacommons
  • Playground sekmesini seçin.

Alternatif olarak, bu terminal komutunu tekrarlayın ve bağlantıyı tıklayarak aracı deneme alanına gidin:

# playground
echo "https://console.cloud.google.com/agent-platform/runtimes/locations/${REGION}/agent-engines/${RE_ENGINE_ID}/playground?project=${PROJ_ID}"

Bazı test sorguları gönderin....

  • What data do you have on water quality in Zimbabwe?
  • Compare the life expectancy, economic inequality, and GDP growth for BRICS nations

Sorguların geçerli yanıtlar döndürdüğünü doğrulayın.

Denetleme günlüklerini analiz etme

Günlükleri görüntüleyin ve deneme amaçlı politika değerlendirmelerini inceleyin.

# list unique urls with http status and iap authorization result
gcloud logging read \
  "resource.type=\"networkservices.googleapis.com/Gateway\" \
  AND httpRequest.requestUrl:*" \
  --project=${PROJ_ID} \
  --limit=200 \
  --format="value(httpRequest.status, jsonPayload.authzPolicyInfo.result, httpRequest.requestUrl)" | sort -u
200     ALLOWED https://api.datacommons.org/mcp
200     ALLOWED https://cloudresourcemanager.googleapis.com:443/google.cloud.resourcemanager.v3.Projects/GetProject
200     ALLOWED https://telemetry.googleapis.com/v1/traces
200     ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
200     ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}
200     ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
200     ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}/events
202     ALLOWED https://api.datacommons.org/mcp

Kayıt defteri IAP uç noktaları IAM politikasını güncelleme

Telemetri uç noktası için aracı çıkış izni verme

# set var for endpoint display name
export ENDPOINT_1_DISPLAY_NAME="telemetry.googleapis.com"
echo ${ENDPOINT_1_DISPLAY_NAME}
# fetch endpoint registry id
export ENDPOINT_1_REGISTRY_ID=$(gcloud agent-registry services list \
  --location=${REGION} \
  --filter="displayName=${ENDPOINT_1_DISPLAY_NAME}" \
  --format="value(registryResource.basename())")
echo ${ENDPOINT_1_REGISTRY_ID}
# create policy config file
cat > cfg/iap-policy-re-agent-to-ep-1.json << EOF
{
  "bindings": [
    {
      "role": "roles/iap.egressor",
      "members": [
        "${RE_AGENT_IDENTITY}"
      ]
    }
  ]
}
EOF
# import policy file (bind iam policy)
gcloud -q beta iap web set-iam-policy cfg/iap-policy-re-agent-to-ep-1.json \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_1_REGISTRY_ID} \
  --region=${REGION}
# verify iap iam policy for telemetry endpoint
gcloud beta iap web get-iam-policy \
  --region=${REGION} \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_1_REGISTRY_ID}

aiplatform uç noktası için aracı çıkış izinleri verme

# set var for endpoint display name
export ENDPOINT_2_DISPLAY_NAME="${REGION}-aiplatform.googleapis.com"
echo ${ENDPOINT_2_DISPLAY_NAME}
# fetch endpoint registry id
export ENDPOINT_2_REGISTRY_ID=$(gcloud agent-registry services list \
  --location=${REGION} \
  --filter="displayName=${ENDPOINT_2_DISPLAY_NAME}" \
  --format="value(registryResource.basename())")
echo ${ENDPOINT_2_REGISTRY_ID}
# create policy config file
cat > cfg/iap-policy-re-agent-to-ep-2.json << EOF
{
  "bindings": [
    {
      "role": "roles/iap.egressor",
      "members": [
        "${RE_AGENT_IDENTITY}"
      ]
    }
  ]
}
EOF
# import policy file (bind iam policy)
gcloud -q beta iap web set-iam-policy cfg/iap-policy-re-agent-to-ep-2.json \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_2_REGISTRY_ID} \
  --region=${REGION}
# verify iap iam policy for aiplatform endpoint
gcloud beta iap web get-iam-policy \
  --region=${REGION} \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_2_REGISTRY_ID}

Cloudresourcemanager uç noktası için aracı çıkış izinleri verme

# set var for endpoint display name
export ENDPOINT_3_DISPLAY_NAME="cloudresourcemanager.googleapis.com"
echo ${ENDPOINT_3_DISPLAY_NAME}
# fetch endpoint registry id
export ENDPOINT_3_REGISTRY_ID=$(gcloud agent-registry services list \
  --location=${REGION} \
  --filter="displayName=${ENDPOINT_3_DISPLAY_NAME}" \
  --format="value(registryResource.basename())")
echo ${ENDPOINT_3_REGISTRY_ID}
# create policy config file
cat > cfg/iap-policy-re-agent-to-ep-3.json << EOF
{
  "bindings": [
    {
      "role": "roles/iap.egressor",
      "members": [
        "${RE_AGENT_IDENTITY}"
      ]
    }
  ]
}
EOF
# import policy file (bind iam policy)
gcloud -q beta iap web set-iam-policy cfg/iap-policy-re-agent-to-ep-3.json \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_3_REGISTRY_ID} \
  --region=${REGION}
# verify iap iam policy for cloudresourcemanager endpoint
gcloud beta iap web get-iam-policy \
  --region=${REGION} \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_3_REGISTRY_ID}

Denetim bölümümüzün sonuna geldik. Şimdi Uygulama bölümüne geçiyoruz.

12. Zorunlu kıl

Aracı, DRY_RUN modunda ağ geçidi üzerinden başarılı istekler gönderebildi. Yetkilendirme politikasını güncelleyerek Agent Gateway IAP yetkilendirme uzantısını ENFORCE moduna geçirin.

Yetkilendirme uzantısını güncelleme

# create authz extension config file (enforced mode)
cat > cfg/${AGW_NAME}-svc-ext-authz-iap-enforced.yaml << EOF
name: ${AGW_NAME}-svc-ext-authz-iap-enforced
service: iap.googleapis.com
failOpen: false
timeout: 1s
metadata:
  iapPolicyVersion: "V1"
EOF
# import authz extension file (create extension)
gcloud service-extensions authz-extensions import ${AGW_NAME}-svc-ext-authz-iap-enforced \
  --source=cfg/${AGW_NAME}-svc-ext-authz-iap-enforced.yaml \
  --location=${REGION}
# list authz extensions (imported configs)
gcloud service-extensions authz-extensions list --location=${REGION}

Yetkilendirme politikasını güncelleme

# re-write authz policy config file (pointing to enforced authz extension)
cat > cfg/${AGW_NAME}-authz-policy-profile-iap.yaml << EOF
name: ${AGW_NAME}-authz-policy-profile-iap
target:
  resources:
    - "projects/${PROJ_ID}/locations/${REGION}/agentGateways/${AGW_NAME}"
policyProfile: REQUEST_AUTHZ
action: CUSTOM
customProvider:
  authzExtension:
    resources:
      - "projects/${PROJ_ID}/locations/${REGION}/authzExtensions/${AGW_NAME}-svc-ext-authz-iap-enforced"
EOF
# import authz policy config file (enable new authz policy)
gcloud beta network-security authz-policies import ${AGW_NAME}-authz-policy-profile-iap \
  --source=cfg/${AGW_NAME}-authz-policy-profile-iap.yaml \
  --location=${REGION}
# show authz policy details (verify enforced mode)
gcloud beta network-security authz-policies describe ${AGW_NAME}-authz-policy-profile-iap \
  --location=${REGION}

Koşullu izni doğrulama

Konsol kullanıcı arayüzünde aracı Playground'a geri dönün.

Ek bir test sorgusu gönderin (izin verilensearch_indicators aracı çağırmayı deneyin)...

  • What data topics do you have for Peru?

Gemini temel modeline (${REGION}-aiplatform.googleapis.com/...), Telemetri API'sine (telemetry.googleapis.com/...) ve Data Commons MCP sunucusu uç noktasına (api.datacommons.org/mcp) yapılan aracı isteklerinin HTTP 200 OK durum kodlarıyla iletildiğini gözlemleyin.

# show gateway logs for http requests
gcloud logging read \
  "resource.type=\"networkservices.googleapis.com/Gateway\" \
  AND httpRequest.requestUrl:*" \
  --project=${PROJ_ID} \
  --limit=10 \
  --format="table(
    timestamp.date(tz=LOCAL):label=TIMESTAMP,
    httpRequest.requestMethod:label=METHOD,
    httpRequest.status:label=STATUS,
    jsonPayload.authzPolicyInfo.result:label=IAP_AUTHZ,
    jsonPayload.agentGatewayInfo.mcpInfo.method:label=MCP_METHOD,
    httpRequest.requestUrl:label=URL)"

Engellenen istek olup olmadığını kontrol edin. Ağ geçidi denetleme günlüklerinde HTTP 403 Forbidden durum kodlarıyla reddedilen çıkış girişimlerini arayın.

# show gateway logs for authz denies
gcloud logging read \
  "resource.type=\"networkservices.googleapis.com/Gateway\" \
  AND (jsonPayload.authzPolicyInfo.result=\"DENIED\" OR httpRequest.status=403)" \
  --project=${PROJ_ID} \
  --limit=10 \
  --format="table(
    timestamp.date(tz=LOCAL):label=TIMESTAMP,
    httpRequest.requestMethod:label=METHOD,
    httpRequest.status:label=STATUS,
    jsonPayload.enforcedGatewaySecurityPolicy.serverNameIndication:label=SNI,
    jsonPayload.authzPolicyInfo.result:label=AUTHZ_RESULT,
    jsonPayload.authzPolicyInfo.policies[0].name.basename():label=DENYING_POLICY
  )"
# show gateway logs for mcp requests with method and tool name
gcloud logging read \
  "resource.type=\"networkservices.googleapis.com/Gateway\" \
  AND jsonPayload.agentGatewayInfo.mcpInfo.method:*" \
  --project=${PROJ_ID} \
  --limit=10 \
  --format="table(
    timestamp.date(tz=LOCAL):label=TIMESTAMP,
    httpRequest.status:label=STATUS,
    jsonPayload.authzPolicyInfo.result:label=IAP_AUTHZ,
    jsonPayload.agentGatewayInfo.mcpInfo.method:label=MCP_METHOD,
    jsonPayload.agentGatewayInfo.mcpInfo.parameter:label=TOOL_NAME,
    httpRequest.requestUrl:label=URL
  )"

Koşullu reddetme işlemini doğrulama

Ek bir test sorgusu gönderin (reddedilenget_observations aracını çağırmaya çalışın)...

  • What are the diabetes levels in Peru compared to Slovakia?

Temsilci önce search_indicators'ya bakar, ardından get_observations'yi kullanmaya çalışır ancak başarısız olur ve temsilci yanıtı tamamlanmaz.

# show gateway logs for mcp requests with method and tool name
gcloud logging read \
  "resource.type=\"networkservices.googleapis.com/Gateway\" \
  AND jsonPayload.agentGatewayInfo.mcpInfo.method:*" \
  --project=${PROJ_ID} \
  --limit=10 \
  --format="table(
    timestamp.date(tz=LOCAL):label=TIMESTAMP,
    httpRequest.status:label=STATUS,
    jsonPayload.authzPolicyInfo.result:label=IAP_AUTHZ,
    jsonPayload.agentGatewayInfo.mcpInfo.method:label=MCP_METHOD,
    jsonPayload.agentGatewayInfo.mcpInfo.parameter:label=TOOL_NAME,
    httpRequest.requestUrl:label=URL
  )"
TIMESTAMP            STATUS  IAP_AUTHZ  MCP_METHOD                 TOOL_NAME          URL
YYYY-MM-DDTHH:MM:SS  403     DENIED     tools/call                 get_observations   https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS          ALLOWED    tools/call                 get_observations   https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS  403     DENIED     tools/call                 get_observations   https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS  200     ALLOWED    tools/call                 search_indicators  https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS  200     ALLOWED    tools/list                                    https://api.datacommons.org/mcp
YYYY-MM-DDTHH:MM:SS  202     ALLOWED    notifications/initialized                     https://api.datacommons.org/mcp

Bu işlem, yönetim politikasının beklendiği gibi çalıştığını doğrular.

Boş durumu ve ALLOWED simgesini gösteren ikinci satırın, 403 yanıtı gönderildikten sonra soket kapatılırken Agent Gateway tarafından yayınlanan ikincil bir bağlantı kapatma günlük etkinliği olduğunu unutmayın (bağlantı kapatma etkinliklerinde yanıt durumu kodları olmadığından httpRequest.status boş olur).

Yaptırım bölümünü tamamladık. Şimdi Temizleme bölümüne geçiyoruz.

13. Temizleme

# delete 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)"

# next
# delete storage bucket
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}

# next
# clear policy on mcp server
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --mcp-server=${MCP_REGISTRY_ID} --region=${REGION} --format="value(etag)")
cat > cfg/iap-policy-empty.json << EOF
{
  "bindings": [],
  "etag": "${IAP_ETAG}"
}
EOF

gcloud -q beta iap web set-iam-policy cfg/iap-policy-empty.json \
  --resource-type=agent-registry \
  --mcp-server=${MCP_REGISTRY_ID} \
  --region=${REGION}

# next
# clear policy on endpoint 1
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --endpoint=${ENDPOINT_1_REGISTRY_ID} --region=${REGION} --format="value(etag)")
cat > cfg/iap-policy-empty.json << EOF
{
  "bindings": [],
  "etag": "${IAP_ETAG}"
}
EOF

gcloud -q beta iap web set-iam-policy cfg/iap-policy-empty.json \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_1_REGISTRY_ID} \
  --region=${REGION}

# next
# clear policy on endpoint 2
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --endpoint=${ENDPOINT_2_REGISTRY_ID} --region=${REGION} --format="value(etag)")
cat > cfg/iap-policy-empty.json << EOF
{
  "bindings": [],
  "etag": "${IAP_ETAG}"
}
EOF

gcloud -q beta iap web set-iam-policy cfg/iap-policy-empty.json \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_2_REGISTRY_ID} \
  --region=${REGION}

# next
# clear policy on endpoint 3
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --endpoint=${ENDPOINT_3_REGISTRY_ID} --region=${REGION} --format="value(etag)")
cat > cfg/iap-policy-empty.json << EOF
{
  "bindings": [],
  "etag": "${IAP_ETAG}"
}
EOF

gcloud -q beta iap web set-iam-policy cfg/iap-policy-empty.json \
  --resource-type=agent-registry \
  --endpoint=${ENDPOINT_3_REGISTRY_ID} \
  --region=${REGION}

# next
# remove manual registry entry
gcloud -q agent-registry services delete ${MCP_RESOURCE_NAME} --location=${REGION}
# delete gateway resources
gcloud -q beta network-security authz-policies delete ${AGW_NAME}-authz-policy-profile-iap --location=${REGION}

gcloud -q beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-iap-dryrun --location=${REGION}

gcloud -q beta service-extensions authz-extensions delete ${AGW_NAME}-svc-ext-authz-iap-enforced --location=${REGION}

gcloud -q network-services agent-gateways delete ${AGW_NAME} --location=${REGION}

# next
# clean up local working directories and generated configs
rm -rf cfg agent-datacommons endpoints

# end

Temizleme bölümümüzü tamamladık. Şimdi Sonuç bölümüne geçiyoruz.

14. Sonuç

Tebrikler! Agent Gateway'i kullanarak araçlara erişen bir aracı için giden iletişimi başarıyla dağıttınız ve yönetiyorsunuz.

cosmopup

Cosmopup, Codelab'lerin çok iyi olduğunu düşünüyor.

Sırada ne var?

Bu geri bildirim formunu kullanarak yorum, soru veya düzeltme önerilerinizi paylaşabilirsiniz.

Teşekkürler!