1. Введение
В этом практическом занятии рассматривается управление исходящим трафиком через Agent Gateway для агентов ИИ, обращающихся к удаленным серверам Google Cloud Model Context Protocol (MCP).
Приложения искусственного интеллекта, от автономных чат-ботов до автономных систем с многоагентными рабочими процессами, могут динамически вызывать внешние инструменты. Предоставление агентам контролируемого доступа к запросам к базам данных, получению веб-контента и выполнению действий имеет важное значение для безопасной и продуктивной работы агентов. Однако в корпоративных средах обеспечение безопасности выполнения инструментов агентами представляет собой сложную задачу. Если агент имеет прямой доступ к сети, атаки с внедрением импульсов или имитация моделей могут привести к утечке конфиденциальных данных или выполнению деструктивных команд.
Для управления автономными агентами в масштабе предприятия Agent Gateway предоставляет централизованную точку обеспечения принципа нулевого доверия, непосредственно интегрированную в архитектуру платформы агентов . Вместо того чтобы полагаться на пользовательские реализации, уникальные для каждого приложения или кода агента, Agent Gateway обеспечивает маршрутизацию сети, управление агентами и безопасность во время выполнения на уровне платформы.
Когда Agent Gateway работает в режиме исходящего трафика ( агент — куда угодно ), он перенаправляет все исходящие запросы от агентов, настроенных на использование шлюза. Каждый запрос рабочей нагрузки агента аутентифицируется с использованием уникального идентификатора агента и авторизуется с помощью политик Identity-Aware Proxy (IAP) . Вызовы инструментов MCP динамически декодируются и проверяются на предмет применения политик. Администраторы безопасности могут централизованно устанавливать детальные разрешения, чтобы гарантировать, что агенты могут вызывать только утвержденные конечные точки и методы.
Что вы строите
- Шлюз агентов в режиме исходящего трафика ( агент — куда угодно ).
- Расширение авторизации Identity-Aware Proxy (IAP)
- Агент Agent Runtime ADK с идентификацией агента
- Реестр агентов с использованием Google API и конечных точек MCP.
- Политики авторизации с контролем доступа IAM
- Для выполнения запросов к набору данных BigQuery с использованием MCP
Рис. 1. Архитектура Codelab
Чему вы научитесь
- Как развернуть Agent Gateway в структурированной последовательности конфигурации
- Как перевести политики авторизации из тестового режима в режим принудительного применения.
- Как зарегистрировать конечные точки Google API и серверы MCP в реестре агентов.
- Как проводить аудит журналов Agent Gateway для проверки управления исходящим трафиком.
Что вам нужно
- Проект Google Cloud с включенной функцией выставления счетов.
- Права доступа IAM для предоставления сетевых сервисов, наборов данных BigQuery и ресурсов платформы агентов.
- POSIX-совместимая оболочка (
bashилиzsh) с установленным Google Cloud CLI (компонентыgcloudиbq). - Инструменты командной строки:
git,curl,jq(процессор JSON), Python 3 иuv(менеджер пакетов Python).
2. Понятия
Последовательность развертывания
При развертывании Agent Gateway с элементами управления важно следовать структурированной последовательности настройки, чтобы агенты имели доступ к необходимым ресурсам при инициализации, а сетевые запросы выполнялись успешно.
В этом практическом занятии используется следующая последовательность развертывания:
- Запуск в режиме пробного запуска: если среда выполнения агента настроена на маршрутизацию исходящих вызовов к шлюзу до того, как шлюз будет полностью подготовлен, инициализация рабочей нагрузки завершится неудачей. Предварительная настройка расширения авторизации шлюза в режиме
DRY_RUNгарантирует, что при поступлении трафика агента к шлюзу ни один запрос не будет отброшен. - Зарегистрируйте все службы: все агенты, серверы MCP и конечные точки, использующие Agent Gateway, должны быть зарегистрированы в Agent Registry. Запросы к незарегистрированным источникам или получателям отклоняются . Агенты, развернутые на Agent Runtime и серверах Google MCP, регистрируются автоматически. Любая конечная точка Google API или пользовательский сервер MCP должны быть зарегистрированы вручную.
- Применение политик авторизации: Политики авторизации используются для предоставления зарегистрированным агентам доступа к агентским компонентам путем присвоения роли
roles/iap.egressorсубъекту идентификации агента и привязки ее к целевому ресурсу реестра. Оцените поведение агента в режиме тестового запуска, а затем определите политики, разрешающие выбранный исходящий трафик через шлюз. После того, как политики будут установлены, переключитесь в режимENFORCED, чтобы шлюз мог активно применять политики управления.
Рис. 2. Последовательность развертывания
Топология исходящей маршрутизации
Gateways typically manage inbound traffic (ingress) to backend services. Agent Gateway, operating in egress ( agent-to-anywhere ) mode, acts as a centralized, zero-trust outbound proxy for agentic workloads.
Когда приложение ИИ или агентная рабочая нагрузка пытается вызвать внешний инструмент или API, исходящий запрос перехватывается Agent Gateway и проверяется на соответствие политикам управления, прежде чем быть направленным к месту назначения:
- Частные сети (VPC): исходящий трафик, ориентированный на внутренние корпоративные API, микросервисы, базы данных, размещенные в частных VPC, а также локальные или межоблачные сети, доступные через гибридное соединение.
- Внешние сети (Интернет): Исходящий трафик, направленный на сторонние веб-сервисы, API SaaS или общедоступные конечные точки.
- Сервисы ИИ и платформа агентов: исходящий трафик, ориентированный на управляемые API Google Cloud, базовые модели, конечные точки Google MCP (например, BigQuery) и сервисы управления платформой (реестр агентов и политики IAP).
Рис. 3. Топология маршрутизации исходящего трафика шлюза агента.
В центре внимания этого практического занятия — исходящий трафик от пользовательского агента в Agent Runtime, нацеленный на удаленную конечную точку сервера Google MCP для BigQuery.
3. Настройка
Необходимые роли IAM
Для создания ресурсов в этом практическом занятии необходимы следующие роли:
Категория | Требуемая роль IAM (ID) | Описание |
управление API | | Включите сервисы Google Cloud API |
Сетевые устройства и шлюзы | | Шлюз агента предоставления услуг |
Расширения сервисов | | Настройка расширений маршрутизации |
Сетевая безопасность | | Развертывание политик авторизации |
Реестр агентов | | Каталог разрешенных хостов |
Vertex AI и агенты | | Развертывание рабочих нагрузок среды выполнения агента |
Политика выхода | | Применить политики |
BigQuery | | Настройка схем и тестовых наборов данных. |
Облачное хранилище | | Управление тестовыми хранилищами для развертывания |
Журналы и аудит | | Проверьте трассировки и журналы аудита. |
В качестве альтернативы можно использовать общую базовую роль, например, roles/admin или устаревшую роль roles/owner .
Получите доступ к своему проекту
В этом практическом занятии используется один проект Google Cloud. Шаги настройки выполняются с помощью командной строки gcloud и команд оболочки Linux.
Для начала откройте командную строку вашего проекта Google Cloud:
- Cloud Shell доступен по адресу
shell.cloud.google.comили - Локальный терминал с установленным интерфейсом командной строки
gcloud
Укажите идентификатор вашего проекта.
gcloud config set project SET_YOUR_PROJECT_ID_HERE
Аутентификация сессии
# login to gcloud cli
gcloud auth login
# login for gcloud api
gcloud auth application-default login
Установка переменных среды оболочки
# 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-dj"
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}"
echo ${AGW_NAME}
echo ${AGW_URI}
echo ${RE_AGENT_NAME}
echo ${RE_AGENT_ID_SET}
echo ${STAGING_BUCKET}
# create local dir for config files
mkdir -p cfg
Включить API-сервисы
# 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 \
discoveryengine.googleapis.com
На этом завершается этап настройки... далее переходим к разделу «Шлюз» .
4. Шлюз
Перед применением контроля доступа разверните Agent Gateway и настройте его расширение авторизации в режиме DRY_RUN . Это позволит успешно выполнять исходящие вызовы инструментов, одновременно регистрируя результаты оценки для целей аудита.
Здесь Agent Gateway использует региональный реестр для поддержки региональных ресурсов среды выполнения агентов.
Создать шлюз
# 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}
На этом завершается раздел, посвященный шлюзу... далее переходим к разделу «Авторизация» .
5. Авторизация
Расширение авторизации Agent Gateway для Identity-Aware Proxy (IAP) — это тип расширения службы , используемый для делегирования решений по авторизации для всех коммуникаций Agent Platform .
- Процесс делегирования: Когда агент пытается вызвать внешнюю конечную точку или сервер MCP, он перенаправляет запрос в Agent Gateway. Вместо локальной оценки доступа шлюз использует расширение авторизации для отправки вызова в службу оценки IAP. IAP оценивает идентификатор агента ( на основе SPIFFE ) в соответствии с политикой IAM целевого ресурса в реестре агентов. IAP возвращает шлюзу решение
ALLOWилиDENY, после чего шлюз либо перенаправляет трафик дальше, либо блокирует его с кодом состояния HTTP403 Forbidden. - Режимы принудительного применения: В режиме
DRY_RUNIAP оценивает запросы и регистрирует решения в Cloud Logging , не блокируя трафик. В режимеENFORCEлюбой запрос от неавторизованного агента или к незарегистрированному целевому объекту немедленно блокируется. - Уровень привязки: Расширение сервиса подключается к Agent Gateway с помощью политики авторизации , настроенной с использованием профиля
REQUEST_AUTHZ.
Расширение авторизации
Создать расширение авторизации
# 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}
Политика авторизации
Политика авторизации привязывает поставщика безопасности (IAP) к целевому ресурсу шлюза и определяет профиль перехвата ( REQUEST_AUTHZ ).
Создать политику авторизации
# 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}
На этом завершается раздел, посвященный авторизации... далее переходим к разделу «Кодовая база» .
6. Кодовая база
Код агента, набор данных BigQuery и скрипт регистрации, используемые в этом практическом занятии, хранятся в удаленном репозитории Google Cloud GitHub . Следующие шаги клонируют репозиторий локально, скопируют необходимые файлы в текущую структуру рабочих каталогов, а затем очистят ненужные временные файлы.
Для загрузки, сборки и развертывания упакованного кода приложения агента и артефактов его зависимостей создается промежуточное хранилище.
Получение удаленных артефактов
# clone remote repository to temp local dir
git clone https://github.com/GoogleCloudPlatform/cloud-networking-solutions.git ./temp_agw_cuj_arun_egress_gmcp
# copy agent runtime and endpoint definitions to working project dir
cp -r temp_agw_cuj_arun_egress_gmcp/codelabs/agw-cuj-arun-egress-gmcp/agent-dj ./agent-dj
cp -r temp_agw_cuj_arun_egress_gmcp/codelabs/agw-cuj-arun-egress-gmcp/endpoints ./endpoints
# remove temporary directory
rm -rf temp_agw_cuj_arun_egress_gmcp
Создание набора данных BigQuery
# create bq dataset schema and load data
bq --project_id=${PROJ_ID} query \
--use_legacy_sql=false < agent-dj/setup.sql
Создать временный контейнер
# 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)"
На этом завершается раздел, посвященный коду... далее переходим к разделу «Реестр» .
7. Реестр
Реестр агентов представляет собой централизованный каталог всех агентов, серверов MCP и конечных точек (API) в экосистеме ИИ. Он также является каталогом, который можно использовать для перечисления, поиска и обнаружения других зарегистрированных инструментов и сервисов для использования приложениями ИИ. Режим исходящего трафика Agent Gateway ( агент-в-любое место ) использует модель данных реестра в качестве основы управления для обеспечения контроля доступа к исходящему трафику. Предоставление ролей IAM для вызывающих агентов проверяется на соответствие политике, привязанной к ресурсу реестра.
Для инициализации среды и поддержки агентов, использующих различные API и сервисы Google , используется скрипт, позволяющий быстро зарегистрировать общий набор конечных точек API, используя имена хостов и местоположения из endpoints/googleapis.txt .
Регистрация конечных точек
# run python script to register google api endpoints
python3 endpoints/register_endpoints.py \
--multi-region=${MREGION} \
--region=${REGION} \
--mtls-endpoints=include
Проверьте конечные точки
# list regional endpoints (verify registration)
gcloud agent-registry endpoints list --location=${REGION} \
--format="table(displayName, name.basename():label=ENDPOINT_ID, interfaces[0].url:label=URL)"
На этом завершается раздел, посвященный реестру... далее переходим к разделу, посвященному среде выполнения .
8. Среда выполнения
Агент agent-dj ADK, развернутый в Agent Runtime, настроен в скрипте развертывания со следующими параметрами для интеграции с Agent Platform:
-
"identity_type": types.IdentityType.AGENT_IDENTITYдля предоставления уникального основного идентификатора на основе SPIFFE для агента -
"agent_gateway_config": { "agent_to_anywhere_config": {"agent_gateway": } }для направления всего исходящего трафика, инициированного агентом, на Agent Gateway для оценки и применения политик.
Развернуть агент
# deploy agent runtime workload
uv --directory agent-dj 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 dj contact info" \
--enable-telemetry \
--enable-agent-identity \
--agent-gateway-egress=${AGW_URI} \
--allow-token-sharing
Получение основных параметров развертывания
# 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 AGENT_UID=$(gcloud agent-registry agents list \
--location=${REGION} \
--filter="displayName=${RE_AGENT_NAME}" \
--format="value(uid)")
echo ${AGENT_UID}
Проверьте запись в реестре.
# show agent resource registry details
gcloud agent-registry agents describe ${AGENT_UID} --location=${REGION}
agentId: urn:agent:projects-${PROJ_NO}:projects:${PROJ_NO}:locations:${REGION}:aiplatform:reasoningEngines:${RE_ENGINE_ID}
attributes:
agentregistry.googleapis.com/system/Framework:
framework: google-adk
agentregistry.googleapis.com/system/RuntimeIdentity:
principal: principal://agents.global.org-${PROJ_NO}.system.id.goog/resources/aiplatform/projects/${PROJ_NO}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}
agentregistry.googleapis.com/system/RuntimeReference:
uri: //aiplatform.googleapis.com/projects/${PROJ_NO}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}
createTime: 'YYYY-MM-DDTHH:MM:SS.ssssssZ'
description: agent for dj contact info
displayName: agent-dj
name: projects/${PROJ_ID}/locations/${REGION}/agents/agentregistry-${RE_AGENT_ID}
protocols:
- interfaces:
- protocolBinding: HTTP_JSON
url: https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:query
- protocolBinding: HTTP_JSON
url: https://${REGION}-aiplatform.googleapis.com/v1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}:streamQuery
type: CUSTOM
uid: agentregistry-00000000-0000-0000-1234-4567abcd1234
updateTime: 'YYYY-MM-DDTHH:MM:SS.ssssssZ'
Проверьте конфигурацию шлюза.
# verify agent gateway routing specification
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 для агентов по предоставлению грантов и управления ресурсами
Предоставление прав доступа к ресурсам через IAM позволяет субъекту-агенту получать доступ к BigQuery, инструментам MCP (для API Google) и другим необходимым сервисам платформы ИИ. Эти политики применяются с помощью IAM на уровне ресурсов .
# grant bigquery query execution role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/bigquery.user"
# grant bigquery data viewer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/bigquery.dataViewer"
# grant mcp tool execution role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/mcp.toolUser"
# grant ai platform user role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/aiplatform.user"
# grant agent default access role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/aiplatform.agentDefaultAccess"
# grant agent registry viewer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/agentregistry.viewer"
# grant cloud logging writer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/logging.logWriter"
# grant cloud monitoring writer role
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/monitoring.metricWriter"
# grant browser role for resource manager lookup
gcloud projects add-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="roles/browser"
Проверьте роли IAM агента для ресурсов.
# verify active role bindings for agent identity
gcloud projects get-iam-policy ${PROJ_ID} \
--flatten="bindings[].members" \
--filter="bindings.members:${RE_AGENT_IDENTITY}" \
--format="value(bindings.role)"
На этом завершается раздел, посвященный работе во время выполнения... далее переходим к разделу «Политики» .
9. Политика
Политики авторизации управления агентом разрешают трафик от агента ИИ через Agent Gateway и далее к месту назначения (например, к конечной точке сервера Google Cloud MCP для BigQuery). После того, как трафик достигнет места назначения, доступ к данным предоставляется с помощью обычных разрешений IAM (которые были включены в предыдущем разделе).
Предоставление ролей IAM для исходящего трафика Agent Gateway включает политики доступа, которые позволяют субъекту-агенту получать доступ к зарегистрированным целевым ресурсам через Agent Gateway. Политики применяются на уровне Agent Gateway и проверяются с помощью политик IAM Identity-Aware Proxy (IAP).
Предоставьте агенту роли IAM для исходящего трафика через Agent Gateway.
Agent Gateway проверяет входящие запросы, чтобы убедиться, что у вызывающего агента есть разрешение iap.webServiceVersions.egressViaIAP (предоставляемое ролью roles/iap.egressor ) на целевой ресурс.
Предоставление roles/iap.egressor идентификатору агента или набору субъектов среды выполнения агента для выбранного целевого ресурса разрешает исходящий трафик. В этом практическом задании роль применяется к набору субъектов , который предоставляет разрешения всем идентификаторам агентов среды выполнения агента в проекте.
Политики IAM привязаны к целевым ресурсам, определенным в модели данных Agent Registry. Ресурс iap_web/agentRegistry представляет собой уровень в иерархии IAM , охватывающий весь реестр . agentRegistry служит родительским ресурсом для отдельных дочерних ресурсов agents , mcpServers и endpoints . В этом практическом задании политика IAM привязана к уровню реестра , который применяет разрешения ко всем дочерним ресурсам.
Настройка политики IAM для регионального реестра IAP
# show iap iam policy for regional registry
gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION}
# retrieve active etag on policy for regional registry
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION} --format="value(etag)")
echo ${IAP_ETAG}
# create policy config file
cat > cfg/iap-policy-re-agent-set-to-registry-${REGION}.json << EOF
{
"bindings": [
{
"role": "roles/iap.egressor",
"members": [
"${RE_AGENT_ID_SET}"
]
}
],
"etag": "${IAP_ETAG}"
}
EOF
# import policy file (bind iam policy)
gcloud beta iap web set-iam-policy cfg/iap-policy-re-agent-set-to-registry-${REGION}.json \
--resource-type=agent-registry \
--region=${REGION}
# verify iap iam policy for regional registry
gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION}
На этом завершается раздел, посвященный политике компании... далее переходим к разделу «Аудит» .
10. Аудит
Расширение авторизации Agent Gateway работает в режиме DRY_RUN . Исходящие запросы отслеживаются и регистрируются, но не блокируются.
Запросы тестового агента
Откройте окно браузера с пользовательским интерфейсом консоли Google Cloud и перейдите по следующей ссылке:
- Платформа агентов → Агенты → Развертывания →
agent-dj - Выберите вкладку «Игровая площадка» .
Или введите эту команду в терминале и щелкните ссылку, чтобы перейти в среду разработки агента:
# playground
echo "https://console.cloud.google.com/agent-platform/runtimes/locations/${REGION}/agent-engines/${RE_ENGINE_ID}/playground?project=${PROJ_ID}"
Отправьте несколько тестовых запросов...
-
How many DJs do we have on file? -
What is the phone number of DJ Cosmopup?
Убедитесь, что запросы возвращают корректные ответы (например, " В базе данных 12 диджеев ").
Анализ журналов аудита
Просмотрите журналы и изучите результаты оценки политики в ходе пробного запуска.
# query gateway logs for dry run
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
)"
TIMESTAMP METHOD STATUS IAP_AUTHZ MCP_METHOD URL
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://telemetry.googleapis.com/v1/traces
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED tools/call https://bigquery.googleapis.com/mcp
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/reasoningEngines/${RE_ENGINE_ID}/sessions/${RE_SESSION_ID}:appendEvent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED tools/call https://bigquery.googleapis.com/mcp
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED https://${REGION}-aiplatform.googleapis.com/v1beta1/projects/${PROJ_ID}/locations/${REGION}/publishers/google/models/gemini-2.5-flash:generateContent
YYYY-MM-DDTHH:MM:SS POST 200 ALLOWED tools/call https://bigquery.googleapis.com/mcp
На этом завершается раздел аудита... далее переходим к разделу «Принудительное исполнение» .
11. Принудить к исполнению
Агент смог успешно отправлять запросы через шлюз в режиме DRY_RUN . Переведите расширение авторизации IAP шлюза агента в режим ENFORCE , обновив политику авторизации.
Обновить расширение авторизации
# 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}
Обновить политику авторизации
# 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}
Проверка соблюдения законодательства
Вернитесь в среду разработки агентов в консольном интерфейсе.
Отправьте дополнительный тестовый запрос...
-
What DJ Fishfry's credit card number?
Обратите внимание, что запросы агента к базовой модели Gemini ( ${REGION}-aiplatform.googleapis.com/... ) и конечной точке сервера MCP ( bigquery.googleapis.com/mcp ) передаются со статусом HTTP 200 OK .
# 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)"
Убедитесь, что никакие запросы не блокируются. Найдите в журналах аудита шлюза любые отклоненные исходящие попытки с кодом состояния HTTP 403 Forbidden .
# 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
)"
На этом завершается раздел, посвященный применению мер принуждения... далее переходим к разделу «Уборка» .
12. Уборка
# 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
# remove agent resource iam bindings
for ROLE in \
"roles/bigquery.user" \
"roles/bigquery.dataViewer" \
"roles/mcp.toolUser" \
"roles/aiplatform.user" \
"roles/aiplatform.agentDefaultAccess" \
"roles/agentregistry.viewer" \
"roles/logging.logWriter" \
"roles/monitoring.metricWriter" \
"roles/browser"; do
gcloud -q projects remove-iam-policy-binding ${PROJ_ID} \
--member="${RE_AGENT_IDENTITY}" \
--role="${ROLE}"
done
# next
# delete storage bucket
gcloud -q storage rm --recursive gs://${STAGING_BUCKET}
# delete bigquery dataset and contents
bq rm -r -f -d ${PROJ_ID}:dj_ds
# next
# reset/clear iap regional registry iam policy
export IAP_ETAG=$(gcloud beta iap web get-iam-policy --resource-type=agent-registry --region=${REGION} --format="value(etag)")
cat > cfg/iap-policy-empty.json << EOF
{
"bindings": [],
"etag": "${IAP_ETAG}"
}
EOF
gcloud beta iap web set-iam-policy cfg/iap-policy-empty.json \
--resource-type=agent-registry \
--region=${REGION}
# next
# 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 network-services agent-gateways delete ${AGW_NAME} --location=${REGION}
# next
# clean up local working directories and generated configs
rm -rf cfg agent-dj endpoints
# end
На этом завершается этап очистки... далее переходим к заключению !
13. Заключение
Поздравляем! Вы успешно развернули и настроили исходящие коммуникации для агента, получающего доступ к инструментам через Agent Gateway!

Cosmopup считает, что Codelabs — лучшие!
Что дальше?
- Ознакомьтесь с документацией Gemini Enterprise Agent Platform для получения информации о расширенных функциях и обучающих материалах.
- Настройте защитные механизмы Model Armor на Agent Gateway для повышения безопасности ИИ.
- Изучите политики семантического управления для обеспечения соблюдения бизнес-правил и соответствия требованиям при обработке запросов на естественном языке.
Пожалуйста, оставляйте свои комментарии, вопросы или замечания, используя эту форму обратной связи.
Спасибо!