通过本页面,您可以了解如何使用 Service Extensions 将 Agent Gateway 的授权委托给 Identity-Aware Proxy、Model Armor 和其他自定义授权引擎。
授权政策和扩展程序
借助授权政策,您可以对通过 Agent Gateway 发布的端点的流量强制执行集中式访问权限控制和治理政策。为了处理复杂的访问权限控制、内容安全和治理决策,Agent Gateway 允许您使用授权扩展配置授权政策,以便将授权和内容安全决策委托给您选择的指定授权引擎。
授权扩展会拦截通过 Agent Gateway 部署传递的请求,并向指定的授权服务发出实时 gRPC 调用。这样,服务就可以在流量继续流向目的地之前对其进行检查、修改或屏蔽。您可以将授权委托给 Google Cloud 服务(例如 Identity-Aware Proxy、Model Armor 和 semantic governance policy),也可以委托给您选择的任何自定义授权引擎。
授权政策使用政策配置文件来确定发送到授权扩展程序的流量数据类型:
- 基于请求的授权 (
REQUEST_AUTHZ):在处理任何应用载荷之前评估 HTTP 请求标头。此个人资料用于身份验证和访问权限控制,例如将授权委托给 Identity-Aware Proxy。 - 基于内容的授权 (
CONTENT_AUTHZ):评估完整的 HTTP 请求和响应载荷。此配置文件用于深度内容检查和 AI 安全,例如委托 Model Armor 确保提示和回答安全,或委托语义治理政策强制执行自然语言限制。
自定义授权引擎可以使用 REQUEST_AUTHZ 或 CONTENT_AUTHZ 扩展程序,具体取决于它们是检查标头还是完整的应用载荷。
您可以分别为基于请求和基于内容的政策配置授权扩展,也可以在网关上结合使用这两种政策,以实现全面的安全性。如需了解推荐的配置,请参阅推荐的入站和出站配置。
如需详细了解授权政策、政策配置文件及其用例,请参阅授权政策概览。
推荐的入站流量和出站流量配置
为了在整个代理生命周期内实现全面的安全性,我们建议采用以下多网关架构模式:
客户端到代理网关:客户端到代理(入站流量)网关仅支持单个
CONTENT_AUTHZ政策。这意味着,您无法在入站流量中同时使用 Model Armor 和语义治理政策。我们强烈建议您使用 Model ArmorCONTENT_AUTHZ政策来防范提示词注入攻击。不过,如果您想改用语义治理政策扩展程序,则必须确保网关上未配置 Model Armor。 入站网关不支持其他类型的服务扩展。智能体到任何位置网关:智能体到任何位置(出站流量)网关最多支持四项授权政策。出站流量网关支持
REQUEST_AUTHZ和CONTENT_AUTHZ政策配置文件,您可以在此限制范围内为每种类型配置多个政策。我们建议采用以下配置:
- 委托给 Identity-Aware Proxy (IAP) 以授权代理身份的
REQUEST_AUTHZ政策。 - 一项或多项
CONTENT_AUTHZ政策,用于将进一步的决策委托给 Model Armor 或 semantic governance policy,以防止敏感数据暴露,并对传出工具调用和回答强制执行自然语言限制。
如需详细了解如何评估政策,请参阅出站流量政策评估。
- 委托给 Identity-Aware Proxy (IAP) 以授权代理身份的
这种多网关拓扑可确保 Model Armor 筛查传入的提示,而 IAP、Model Armor 和语义治理政策则筛查传出的回答。
出站流量政策评估
在出站网关上配置多个授权政策时,系统会根据其政策配置文件类型按顺序评估这些政策:
REQUEST_AUTHZ(基于标头)政策:系统会首先评估这些政策类型。例如,IAP 扩展程序会先检查调用代理的 mTLS 身份并验证其 IAM 允许政策,然后再处理任何内容。如果请求未通过此检查,则会立即被拒绝。CONTENT_AUTHZ(基于内容)政策:接下来会评估这些政策类型。如果请求通过了基于标头的检查,则载荷会流式传输到基于内容的授权扩展(例如语义治理政策引擎),以进行深度内容检查和合规性评估。
准备工作
在开始之前,请确保您满足以下要求:
Agent Gateway 已部署。请参阅配置 Agent Gateway。
您必须对已部署的 Agent Gateway 资源拥有
networkservices.agentGateways.useIAM 权限,才能将授权政策附加到网关。
使用扩展程序配置授权政策
本部分介绍了如何配置授权政策,将授权和内容安全决策委托给 Identity-Aware Proxy、Model Armor 和其他自定义服务。
将授权委托给 IAP
您可以配置请求授权扩展程序,将授权政策的访问权限决策委托给 IAP。
以下步骤介绍了如何为 Agent Gateway 实例配置具有授权政策的授权扩展。
准备工作:关闭停用将访问权限政策绑定到资源 (
constraints/iam.managed.disableAccessPolicyBindings) 托管式组织政策限制条件的强制执行。默认情况下,系统会为新组织启用此布尔值限制条件,并阻止您将 IAM Unified Access Policy 绑定到资源。如需了解详情,请参阅使用布尔值规则更新政策。为您的代理和工具创建所需的 IAM 出站流量政策。如需了解详情,请参阅创建 IAM 代理政策。
请参阅在“Agent Gateway 到任意位置”(出站流量)模式下配置 Agent Gateway,了解如何在创建 Agent Gateway 时启用 IAP(通过使用访问权限授权参数)。
配置授权扩展程序以指向 IAP。
在 YAML 文件中定义扩展程序。使用提供的示例值。如果您想在试运行仅审核模式下部署扩展程序,以测试授权政策而不强制执行,则可以在
metadata块中指定iamEnforcementMode字段。cat >iap-request-authz-extension.yaml <<EOF name: my-iap-request-authz-ext service: iap.googleapis.com failOpen: false timeout: 1s metadata: iapPolicyVersion: "V2" EOF如果您想在试运行仅审核模式下部署扩展程序,以便在不强制执行授权政策的情况下对其进行测试,则可以在
metadata块中指定iamEnforcementMode字段。这样,您就可以验证政策,并最大限度地降低因配置错误而导致流量中断的风险:cat >iap-request-authz-extension.yaml <<EOF name: my-iap-request-authz-ext service: iap.googleapis.com failOpen: false timeout: 1s metadata: iapPolicyVersion: "V2" iamEnforcementMode: "DRY_RUN" EOF准备好开始强制执行政策后,请从
metadata块中移除iamEnforcementMode: "DRY_RUN"字段。导入授权扩展程序。将
gcloud service-extensions authz-extensions import命令与以下示例值搭配使用。gcloud service-extensions authz-extensions import my-iap-request-authz-ext \ --source=iap-request-authz-extension.yaml \ --location=LOCATION
在同一项目中,配置一项授权政策,将决策委托给扩展程序。
定义一个将
my-iap-request-authz-ext扩展程序与网关相关联的授权政策。使用提供的示例值。cat >iap-request-authz-policy.yaml <<EOF name: my-iap-request-authz-policy target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-iap-request-authz-ext" EOF请将
PROJECT_ID替换为您的项目 ID。将授权政策导入项目。将
gcloud network-security authz-policies import命令与以下示例值搭配使用。gcloud network-security authz-policies import my-iap-request-authz-policy \ --source=iap-request-authz-policy.yaml \ --location=LOCATION
将授权委托给 Model Armor
您可以配置授权扩展,将授权政策的内容安全决策委托给 Model Armor。
以下示例展示了如何为 Agent Gateway 配置此类授权扩展和授权政策。
控制台
如需使用 Google Cloud 控制台为 Agent Gateway 启用 Model Armor,请执行以下步骤:
创建所需的 Model Armor 模板。
请参阅配置 Agent Gateway,了解如何在创建 Agent Gateway 时启用 Model Armor(通过使用启用 Model Armor 复选框)。Model Armor 模板在“客户端到代理”和“代理到任意位置”模式下均受支持。
使用 Model Armor 时,您必须向 Agent Gateway 服务账号授予使用 Model Armor 模板所需的权限。服务账号的格式为:
service-PROJECT_NUMBER@gcp-sa-dep.,其中 PROJECT_NUMBER 是您创建网关的项目的项目编号。即使网关和模板位于同一项目中,您也必须完成此步骤。授予以下角色:
- 包含网关的项目中的
roles/modelarmor.calloutUser和roles/serviceusage.serviceUsageConsumer角色。 - 包含 Model Armor 模板的项目中的
roles/modelarmor.user角色。
您需要使用 gcloud CLI 来完成此步骤。
gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \ --role=roles/modelarmor.calloutUser gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \ --role=roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \ --role=roles/modelarmor.user替换以下内容:
GATEWAY_PROJECT_ID:您在其中创建了网关的项目的 ID。GATEWAY_PROJECT_NUMBER:您在其中创建网关的项目的项目编号。MODEL_ARMOR_PROJECT_ID:包含 Model Armor 模板的项目的项目 ID。
如果您将网关用于 Agent Runtime,则 Agent Runtime 服务代理也需要这些权限,如通过 Agent Gateway 路由 Agent Runtime 流量中所述。
- 包含网关的项目中的
gcloud
创建所需的 Model Armor 模板。
使用 Model Armor 时,您必须向 Agent Gateway 服务账号授予使用 Model Armor 模板所需的权限。服务账号的格式为:
service-PROJECT_NUMBER@gcp-sa-dep.,其中 PROJECT_NUMBER 是您创建网关的项目的项目编号。即使网关和模板位于同一项目中,您也必须完成此步骤。授予以下角色:
- 包含网关的项目中的
roles/modelarmor.calloutUser和roles/serviceusage.serviceUsageConsumer角色。 - 包含 Model Armor 模板的项目中的
roles/modelarmor.user角色。
gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \ --role=roles/modelarmor.calloutUser gcloud projects add-iam-policy-binding GATEWAY_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \ --role=roles/serviceusage.serviceUsageConsumer gcloud projects add-iam-policy-binding MODEL_ARMOR_PROJECT_ID \ --member=serviceAccount:service-GATEWAY_PROJECT_NUMBER@gcp-sa-dep. \ --role=roles/modelarmor.user替换以下内容:
GATEWAY_PROJECT_ID:您在其中创建了网关的项目的 ID。GATEWAY_PROJECT_NUMBER:您在其中创建网关的项目的项目编号。MODEL_ARMOR_PROJECT_ID:包含 Model Armor 模板的项目的项目 ID。
- 包含网关的项目中的
将授权扩展配置为指向 Model Armor。
在 YAML 文件中定义扩展程序。使用提供的示例值。
cat >ma-content-authz-extension.yaml <<EOF name: my-ma-content-authz-ext service: modelarmor.LOCATION.rep.googleapis.com metadata: model_armor_settings: '[ { "response_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID", "request_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID" } ]' failOpen: false timeout: 1s EOF导入授权扩展程序。使用
gcloud service-extensions authz-extensions import命令和以下示例值。gcloud service-extensions authz-extensions import my-ma-content-authz-ext \ --source=ma-content-authz-extension.yaml \ --location=LOCATION
使用扩展程序配置授权政策。
定义一项授权政策,将扩展程序
my-ma-content-authz-ext与 Agent Gateway 相关联。代理到任意目的地
cat >ma-content-authz-policy.yaml <<EOF name: my-ma-content-authz-policy target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-ma-content-authz-ext" httpRules: - to: operations: [ { "paths": [ { "prefix": "/" } ] } ] when: > request.headers['content-type'] == 'application/json' || request.headers['content-type'].startsWith('text/') EOF请注意以下几点:
policyProfile的值设置为CONTENT_AUTHZ。这表示自定义政策提供方会处理请求和响应流量,包括请求正文。httpRules参数演示了如何使用 CEL 属性创建条件,以匹配您要转发到 Model Armor 进行评估的特定流量。在此示例中,规则会匹配内容类型为application/json或text/的所有流量。我们建议使用此类规则,将 Model Armor 评估限制为相关流量。这样,您就可以将受支持的 LLM API、MCP 和 A2A 流量路由到 Model Armor,同时排除智能体 gRPC 调用等内部流量。
客户端到代理
cat >ma-content-authz-policy.yaml <<EOF name: my-ma-content-authz-policy target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/my-ma-content-authz-ext" EOFpolicyProfile的值设置为CONTENT_AUTHZ。这表示自定义政策提供方会处理请求和响应流量,包括请求正文。将授权政策导入项目。将
gcloud network-security authz-policies import命令与以下示例值搭配使用。gcloud network-security authz-policies import my-ma-content-authz-policy \ --source=ma-content-authz-policy.yaml \ --location=LOCATION
将授权委托给自定义授权扩展
您可以配置自定义授权扩展,以将决策委托给自定义服务。这些自定义扩展程序只能定位到完全限定域名 (FQDN)。
使用 FQDN 目标时,扩展程序会使用采用 TLS 加密的 HTTP2 协议与端口 443 上的端点进行通信。不过,该扩展程序不会验证服务器证书。 因此,为了提高安全性,您必须确保解析的端点位于 VPC 网络中。此外,请确保您已在 Agent Gateway 项目和 VPC 网络之间设置 DNS 对等互连。
如需为特定 FQDN(例如
mycustomauthz.internal.net)配置具有授权政策的授权扩展,请在扩展 YAML 文件中将其指定为service的值,如以下示例所示。此示例假定您已在 VPC 网络中部署了一个服务器,该服务器在FULL_DUPLEX_STREAMED正文处理模式下实现ext_proc协议。cat >custom-authz-extension.yaml <<EOF name: my-custom-authz-ext service: mycustomauthz.internal.net failOpen: false timeout: 1s EOF创建授权扩展程序,使其指向自定义服务。
gcloud beta service-extensions authz-extensions import custom-authz-extension \ --source=custom-authz-extension.yaml \ --location=LOCATION
创建扩展程序后,配置一个
CUSTOM授权政策,将决策委托给授权扩展程序。cat >authz-policy.yaml <<EOF name: authz-with-extension target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/custom-authz-extension" EOF创建授权政策。
gcloud network-security authz-policies import authz-policy-with-extension \ --source=authz-policy.yaml \ --location=LOCATION
请注意,当授权扩展程序与使用 CONTENT_AUTHZ 配置文件的授权政策相关联时(如本示例所示),网关会调用该扩展程序来处理请求和响应载荷(标头和正文),从而对代理流量进行深度内容检查、提示安全防护和数据清理。默认情况下,CONTENT_AUTHZ 政策使用 FULL_DUPLEX_STREAMED 模式下的 Envoy ext_proc 协议来处理正文事件。
将 IAP 授权与 Model Armor 保护措施相结合
为实现全面安全,我们建议您设置一个具有 REQUEST_AUTHZ 政策配置文件的 CUSTOM 授权政策,以及另一个具有 CONTENT_AUTHZ 政策配置文件的 CUSTOM 授权政策。
以下示例使用 IAP 作为集中式请求授权系统,并使用 Model Armor 作为 AI 护栏。如前面的示例所示,您可以将其中每个服务替换为服务扩展,以使用您自己的自定义解决方案。
配置一个委托给 IAP 的
REQUEST_AUTHZ授权扩展程序,以及一个指向该扩展程序的授权政策。定义授权扩展。
metadata下的iapPolicyVersion字段是必填字段。cat >iap-extension.yaml <<EOF name: iap-extension service: iap.googleapis.com failOpen: false timeout: 1s metadata: iapPolicyVersion: "V2" EOF创建授权扩展。
gcloud service-extensions authz-extensions import iap-extension \ --source=iap-extension.yaml \ --location=LOCATION
将
LOCATION替换为扩展程序所在的区域。配置委托给扩展程序的
REQUEST_AUTHZ授权政策。cat >authz-policy-request-authz.yaml <<EOF name: authz-iap target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/iap-extension" EOF替换以下内容:
PROJECT_ID:您的项目 ID。LOCATION:资源的位置。AGENT_GATEWAY_NAME:Agent Gateway 的名称。
创建授权政策。
gcloud network-security authz-policies import authz-iap \ --source=authz-policy-request-authz.yaml \ --location=LOCATION
配置一个委托给 Model Armor 的
CONTENT_AUTHZ授权扩展程序,以及一个指向该扩展程序的授权政策。定义扩展程序。
cat >ma-extension-file.yaml <<EOF name: ma-extension service: modelarmor.LOCATION.rep.googleapis.com metadata: model_armor_settings: '[ { "response_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID", "request_template_id": "projects/MODEL_ARMOR_PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID" } ]' failOpen: false timeout: 1s EOF替换以下内容:
LOCATION:Model Armor 模板所在的区域。MODEL_ARMOR_PROJECT_ID:包含 Model Armor 模板的项目 ID。RESPONSE_TEMPLATE_ID:回复模板的 ID。REQUEST_TEMPLATE_ID:请求模板的 ID。
创建授权扩展。
gcloud service-extensions authz-extensions import ma-extension \ --source=ma-extension-file.yaml \ --location=LOCATION
配置委托给扩展程序的
CONTENT_AUTHZ授权政策。cat >authz-policy-content-authz.yaml <<EOF name: authz-ma target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: CONTENT_AUTHZ action: CUSTOM customProvider: authzExtension: resources: - "projects/PROJECT_ID/locations/LOCATION/authzExtensions/ma-extension" EOF创建授权政策。
gcloud network-security authz-policies import ma-authz-policy \ --source=authz-policy-content-authz.yaml \ --location=LOCATION
当授权扩展与 CONTENT_AUTHZ 配置文件关联时,它会接收所有 ext_proc 事件,包括请求和响应标头、正文和尾部。如果基于 ext_proc 的授权扩展能够同时处理请求时授权和基于内容的授权,我们建议您使用 CONTENT_AUTHZ 政策配置文件配置单个 CUSTOM 授权政策。此政策应指向您的多功能授权扩展。此方法可通过单个扩展程序和 ext_proc 连接实现这两种类型的授权,从而缩短延迟时间。
将授权委托给语义治理政策
您可以配置授权扩展,将授权政策的意图限制和自然语言限制决策委托给语义治理政策引擎 (semanticGovernancePolicyEngine)。
如需了解如何在网关上预配政策引擎并创建所需的 CONTENT_AUTHZ 授权政策和授权扩展绑定,请参阅将政策引擎连接到 Agent Gateway。
基于 MCP 协议属性的授权
Agent Gateway 会解析请求中的 MCP 协议载荷,并使提取的属性可用于授权政策。
您可以根据 MCP 方法参数(例如特定工具的名称)限制访问权限。本部分展示了两个示例,一个用于 ALLOW 政策,另一个用于 DENY。
配置授权政策。
ALLOW政策示例此示例允许访问 MCP 服务器上的一组特定工具和基本协议功能,但不允许访问提示和资源。
编写
ALLOW政策时,请务必指定baseProtocolMethodsOption: MATCH_BASE_PROTOCOL_METHODS,以便与访问无关的 MCP RPC(例如初始化、日志记录、补全、通知和 ping)继续正常运行。否则,将无法建立 MCP 会话。cat >authz-policy-restrict-tools.yaml <<EOF name: my-authz-policy-restrict-tools target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ httpRules: - to: operations: - mcp: baseProtocolMethodsOption: MATCH_BASE_PROTOCOL_METHODS methods: - name: "tools/list" - name: "tools/call" params: - exact: "get_weather" - exact: "get_location" action: ALLOW EOFDENY政策示例此示例禁止对 Agent Gateway 后面的 MCP 服务器进行所有提示/方法访问。
cat >authz-policy-disallow-prompts.yaml <<EOF name: my-authz-policy-disallow-prompts target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" policyProfile: REQUEST_AUTHZ httpRules: - to: operations: - mcp: methods: - name: "prompts" action: DENY EOF创建授权政策。
gcloud network-security authz-policies import AUTHZ_POLICY_NAME \ --source=AUTH_POLICY_YAML_FILE_PATH \ --location=LOCATION
替换以下内容:
AUTHZ_POLICY_NAME:授权政策的名称。AUTH_POLICY_YAML_FILE_PATH:授权政策 YAML 文件的路径。LOCATION:资源的位置。
限制
使用授权政策时,存在以下限制:
每个网关的授权政策数量上限取决于网关模式:
- 对于代理到任意位置(出站流量)网关,无论政策配置文件(
REQUEST_AUTHZ或CONTENT_AUTHZ)如何,每个网关最多可以配置四个授权政策。 - 对于客户端到代理(入站流量)网关,您最多可以配置一个
CONTENT_AUTHZ政策。
如需了解详情,请参阅推荐的入站和出站配置。
- 对于代理到任意位置(出站流量)网关,无论政策配置文件(
如果您将自定义授权扩展与
CONTENT_AUTHZ配置文件搭配使用,则这些扩展必须支持ext_proc协议和FULL_DUPLEX_STREAMED模式,以便处理正文事件。如果您配置了多个使用同一配置文件的自定义授权政策,则无法保证其执行顺序。
此外,如需详细了解授权扩展程序的限制,请参阅以下部分:
后续步骤
Codelab:使用 Agent Platform 治理智能体工作负载
了解如何使用 Gemini Enterprise Agent Platform 上的 Agent Gateway 治理智能体工作负载。