随着智能体从初始原型扩展到企业级部署,整合内部控制、专有数据流水线和企业安全政策的需求也迅速增长。有时,仅使用标准 IAM 政策无法轻松表达复杂的授权决策。
为了满足这些要求,Agent Gateway 引入了一个新的政策框架,让您能够通过 Google 服务、自定义授权引擎或第三方安全平台支持强制执行,并在所有网关中普遍应用相同的政策。本文档概述了关键的智能体风险用例,并介绍了如何配置可扩展政策。
针对智能体风险的政策可扩展性应用场景
标准的确定性控制措施通常不足以应对概率性 AI 工作负载。可扩展的服务流水线可帮助组织注入针对独特智能体风险量身定制的高级逻辑:
- 内容清理和安全防护措施:防范提示注入、越狱、有害输出和机密信息泄露(例如,使用 Model Armor)。
- 数据泄露防护 (DLP):实时监控载荷和流式传输分块,防止专有代码或个人身份信息 (PII) 泄露到外部系统。
- 零信任身份治理:在允许智能体访问敏感后端或外部工具之前,验证凭据并强制执行访问权限控制(例如,使用 IAP)。
- 定制化企业合规性:强制执行自定义数据隐去规则、令牌转换或特定于内部架构的合规机制。
Agent Gateway 上的政策可扩展性框架
借助 Agent Gateway,您可以附加扩展程序绑定,将授权决策委托给专门的政策引擎,例如身份提供方、内容安全过滤器或自定义第三方安全平台。
政策可扩展性框架在角色和资源之间进行分离:
使用者:希望以最少的配置工作量向其网关添加安全和治理扩展程序的 Agent Gateway 运营商。
提供方:内部平台团队、第一方 Google 服务(例如 IAP 和 Model Armor)以及第三方 ISV 合作伙伴,他们构建和发布服务扩展程序供他人使用。
ExtensionBinding:由使用方创建的资源,用于将ProducerExtension绑定到目标 Agent Gateway,并包含用于确定何时调用扩展程序的匹配条件。这是使用方开始使用扩展程序时唯一需要创建的资源。ProducerExtension:由提供方创建的资源,用于将ext_proc兼容的授权引擎打包到单个代管式单元中。它封装了所有底层执行参数和连接设置,因此使用者无需配置底层数据平面机制。
内置的第一方 Google 扩展程序
第一方 (1P) Google 服务(例如 IAP 和 Model Armor)提供预封装的扩展功能,并采用简化的运营模式。
- 使用方:应用开发者和安全运维人员充当使用方。如需启用零信任身份验证或提示词注入保护,请直接从使用方项目创建以 Google 预定义的服务端点 URI 为目标的
ExtensionBinding资源。 - 生产商:Google 充当生产商。Google 在全球范围内构建、托管和管理底层 Service Infrastructure 和扩展程序端点(例如
iap.googleapis.com或modelarmor.us.rep.googleapis.com)。您无需创建或管理ProducerExtension资源。
企业和合作伙伴(第一方/第三方)扩展程序
对于 Custom Governance 逻辑,政策可扩展性支持跨企业团队和安全合作伙伴的灵活双向集成模型。
提供方:内部平台工程团队 (2P) 或第三方 ISV 安全供应商 (3P) 充当提供方。提供方构建与 Envoy 的
ext_proc协议兼容的 gRPC 服务,将其托管在专用提供方项目中(例如应用负载均衡器背后的 Cloud Run 服务),使用 Private Service Connect (PSC) 服务连接公开该服务,并发布ProducerExtension资源。使用方:使用方项目中的应用开发者和安全管理员充当使用方。提供方使用 PSC 授予访问权限后,使用方会在其项目中创建一个
ExtensionBinding,该引用特定的ProducerExtension资源 URI,以便对其工作负载强制执行自定义控制措施(例如语义治理政策或第三方防火墙规则)。
部署模式
扩展程序绑定支持灵活的部署模式,可在所有流量路径中强制执行一致的治理,以确保无论您的代理部署在何处,治理政策都以相同的方式运行。ExtensionBinding API 统一应用于所有 Agent Gateway 部署模型。
端到端流量拦截路径
您可以应用扩展程序绑定,在智能体生态系统中的以下通信路径中拦截流量:
- 用户 → 智能体(入站流量):拦截来自最终用户或客户端应用、以 Agent Gateway 为目标的传入请求,以强制执行用户身份验证、身份治理或提示注入清理。
- 智能体 → 工具 / MCP(出站流量):拦截从智能体到 Model Context Protocol (MCP) 服务器或外部 API 的出站调用,以验证权限并清理工具输入。
- 智能体 → LLM 模型(出站流量):在提示到达基础模型之前对其进行扫描,并过滤模型回答,以防止数据丢失或有害输出。
智能体 → 智能体(A2A 出站流量):控制智能体之间的通信,并在自主智能体跨项目协作时强制执行政策边界。
消费者:将扩展程序绑定到 Agent Gateway
使用方(例如应用开发者或安全运维人员)通过创建 ExtensionBinding 将治理和安全逻辑附加到其 Agent Gateway。此资源会将目标工作负载绑定到扩展程序,并声明匹配条件,以精确定义何时应调用扩展程序(例如,拦截发往特定外部工具或 MCP 服务器的流量)。您可以直接以内嵌方式(如本部分中的示例所示)或在单独的 YAML 文件中指定匹配条件。
根据扩展程序提供商的不同,使用方式遵循以下两种路径之一:
第一方使用方配置
对于 IAP 或 Model Armor 等 Google 服务,Google 会在全球范围内管理后端基础设施和注册。作为使用方,您无需定位到特定的 ProducerExtension 资源 URI。您可以将这些服务的预定义端点字符串(例如 iap.googleapis.com 或 modelarmor.us.rep.googleapis.com)作为 ExtensionBinding 中的目标进行传递,从而将这些服务直接绑定到工作负载。
将 IAP 扩展程序绑定到 Agent Gateway
以下示例演示了一个 ExtensionBinding 资源,该资源将第一方 Google 服务 (IAP) 绑定到使用方项目中的 Agent Gateway。根据指定的 matchConditions 字段,当流量发送到 MCP 服务器时,系统会调用此扩展程序。
创建一个包含以下配置的 YAML 文件:
name: EXTENSION_BINDING_NAME target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" matchConditions: - to: destination: resources: - prefix: "urn:mcp" producerExtension: "iap.googleapis.com"替换以下内容:
EXTENSION_BINDING_NAME:扩展程序绑定资源的名称。PROJECT_ID:您的 Cloud de Confiance by S3NS 项目 ID。LOCATION:网关和扩展程序绑定的位置。AGENT_GATEWAY_NAME:目标 Agent Gateway 的名称。
导入扩展程序绑定配置:
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
将
EXTENSION_BINDING_FILE_PATH替换为 YAML 配置文件的路径。
将 Model Armor 扩展程序绑定到 Agent Gateway
如需保护您的智能体免遭提示词注入、有害内容和敏感数据泄露的侵害,您可以将 Model Armor 直接绑定到您的工作负载。根据指定的 matchConditions 字段,当流量发送到 MCP 服务器时,系统会调用此扩展程序。
创建一个包含以下配置的 YAML 文件:
name: EXTENSION_BINDING_NAME target: resources: - "projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" matchConditions: - to: destination: resources: - prefix: "urn:mcp" producerExtension: "modelarmor.us.rep.googleapis.com" failOpen: true producerMetadata: model_armor_settings: '[{ "request_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID", "response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID" }]'替换以下内容:
EXTENSION_BINDING_NAME:扩展程序绑定资源的名称。PROJECT_ID:您的 Cloud de Confiance 项目 ID。LOCATION:资源的位置。AGENT_GATEWAY_NAME:目标 Agent Gateway 的名称。TEMPLATE_PROJECT_ID:Model Armor 模板所在项目的 ID。REQUEST_TEMPLATE_ID:用于评估请求的 Model Armor 模板的 ID。RESPONSE_TEMPLATE_ID:用于评估回答的 Model Armor 模板的 ID。
导入扩展程序绑定配置:
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
将
EXTENSION_BINDING_FILE_PATH替换为 YAML 配置文件的路径。
2P/3P 使用方配置
作为由其他内部团队 (2P) 或外部第三方供应商 (3P) 创建的服务扩展的使用方,您的责任是确保您的使用方项目已明确获得使用该服务的权限。
访问权限由提供方使用其 Private Service Connect 服务连接配置进行控制。获得访问权限后,通过在 ExtensionBinding 中引用提供方提供的特定 ProducerExtension 资源 URI 来绑定工作负载。
绑定自定义授权引擎
以下示例演示了一个 ExtensionBinding 资源,该资源将来自 2P/3P 提供方项目的自定义扩展程序绑定到使用方项目中的 Agent Gateway。根据指定的 matchConditions 字段,当流量发送到代理时,系统会调用此扩展程序。
创建一个包含以下配置的 YAML 文件:
name: EXTENSION_BINDING_NAME target: resources: - "projects/CONSUMER_PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" matchConditions: - to: destination: resources: - prefix: "urn:agent" producerExtension: "projects/PRODUCER_PROJECT_ID/locations/LOCATION/producerExtensions/PRODUCER_EXTENSION_NAME"替换以下内容:
EXTENSION_BINDING_NAME:扩展程序绑定资源的名称。CONSUMER_PROJECT_ID:托管 Agent Gateway 的使用方项目的项目 ID。LOCATION:资源的位置。AGENT_GATEWAY_NAME:目标 Agent Gateway 的名称。PRODUCER_PROJECT_ID:托管ProducerExtension的提供方项目的项目 ID。PRODUCER_EXTENSION_NAME:ProducerExtension资源的名称。
导入扩展程序绑定配置:
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
将
EXTENSION_BINDING_FILE_PATH替换为 YAML 配置文件的路径。
扩展程序绑定附加点
您可以根据治理要求,在资源层次结构的不同层级配置扩展程序绑定:
- Agent Gateway 级别:将政策直接附加到 Agent Gateway 资源,以治理通过网关的所有流量。
- 项目级:创建
ExtensionBindings,这些 全局应用于项目中给定类型的所有 资源,从而简化了 企业管理员强制执行项目级合规性的管理工作。
将 Model Armor 扩展程序绑定到项目中的所有 Agent Gateway
创建一个包含以下配置的 YAML 文件:
name: EXTENSION_BINDING_NAME target: scope: parent: "projects/PROJECT_NUMBER" resourceTypes: "AGENT_GATEWAY" matchConditions: - to: destination: resources: - prefix: "urn:mcp" producerExtension: "modelarmor.us.rep.googleapis.com" failOpen: true producerMetadata: model_armor_settings: '[{ "request_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/REQUEST_TEMPLATE_ID", "response_template_id": "projects/TEMPLATE_PROJECT_ID/locations/LOCATION/templates/RESPONSE_TEMPLATE_ID" }]'替换以下内容:
EXTENSION_BINDING_NAME:扩展程序绑定资源的名称。PROJECT_NUMBER:您的Cloud de Confiance 项目的项目编号。TEMPLATE_PROJECT_ID:Model Armor 模板所在项目的 ID。LOCATION:资源的位置。REQUEST_TEMPLATE_ID:用于评估请求的 Model Armor 模板的 ID。RESPONSE_TEMPLATE_ID:用于评估回答的 Model Armor 模板的 ID。
导入扩展程序绑定配置:
gcloud beta service-extensions extension-bindings import EXTENSION_BINDING_NAME \ --location=LOCATION \ --source=EXTENSION_BINDING_FILE_PATH
将
EXTENSION_BINDING_FILE_PATH替换为 YAML 配置文件的路径。
对于与特定工作负载匹配的请求,系统会同时执行项目级和任何资源级扩展程序绑定。如果在资源级和项目级都配置了同一扩展程序,则该扩展程序会被调用两次。
调用扩展程序的匹配条件
匹配条件决定了何时调用扩展程序。您可以直接以内嵌方式(如本页前面的示例所示)或在 YAML 文件中指定匹配条件。
本部分提供了基于流量、目标资源 URN 或目标主机的常见情况的 YAML 文件配置示例:
流向 MCP 工具服务器的出站流量(智能体 → 工具):拦截从智能体发送到远程 Model Context Protocol (MCP) 工具服务器的流量:
# Invoke extension for all agent traffic to remote MCP servers - to: destination: resources: - prefix: "urn:mcp"入站流量(用户 → 智能体):拦截来自最终用户或客户端应用、针对由 Agent Gateway 受约束的智能体的传入请求(例如,在入站时强制执行最终用户身份验证或提示注入清理):
# Invoke extension on incoming user requests targeting agents - to: destination: resources: - prefix: "urn:agent"流向 LLM 模型的出站流量(代理 → LLM 模型):通过匹配目标主机,拦截从代理发送到基础 LLM 模型或模型服务器的请求:
# Invoke extension on traffic sent to a specific model server - to: destination: hosts: - exact: "myexamplemodelserver.com"
制作者:构建和发布扩展程序
作为自定义(第一方或第三方)提供方,请在 Private Service Connect 连接后面托管基于 ext_proc 的服务扩展程序实现。
连接准备就绪后,创建一个 ProducerExtension 资源,指定扩展程序运行的请求处理阶段、要使用的授权机构以及 ext_proc 服务的 PSC 连接的 URI:
gcloud beta service-extensions producer-extensions create PRODUCER_EXTENSION_NAME \ --phase authz \ --extension-settings=service=projects/PRODUCER_PROJECT_ID/regions/REGION/serviceAttachments/PSC_ATTACHMENT_NAME,authority="example.provider.net"
替换以下内容:
PRODUCER_EXTENSION_NAME:ProducerExtension资源的名称。PRODUCER_PROJECT_ID:提供方项目的项目 ID。REGION:Private Service Connect 服务连接的区域。PSC_ATTACHMENT_NAME:Private Service Connect 服务连接的名称。
在 Cloud Run 上托管自定义扩展程序
对于希望运行其自定义 ext_proc gRPC 服务而无需管理专用集群或虚拟机的提供方,Cloud Run 是理想的无服务器替代方案。
如需将无服务器扩展程序发布为 ProducerExtension,请使用 Private Service Connect (PSC) 公开该扩展程序。由于 ProducerExtension 资源需要 PSC 服务连接 URI,并且服务连接以负载均衡器转发规则(而非直接以 Cloud Run 服务)为目标,因此请在 Cloud Run 服务前面放置一个应用负载均衡器(使用无服务器 NEG 后端)。
以下是在 Cloud Run 上托管扩展程序的大致部署工作流程:
在 Cloud Run 上部署扩展程序:将自定义
ext_procgRPC 扩展程序作为容器化服务托管在 Cloud Run 上。创建无服务器 NEG:部署一个无服务器网络端点组 (NEG),使其指向在 Cloud Run 上运行的扩展程序。
设置具有无服务器 NEG 后端的负载均衡器:在 VPC 网络内设置区域级应用负载均衡器,并将无服务器 NEG 作为其后端。
使用 PSC 发布服务:创建直接指向负载均衡器转发规则的 Private Service Connect 服务连接。这会生成一个唯一的服务连接 URI(例如
projects/.../regions/.../serviceAttachments/...)。创建提供方扩展程序:使用此生成的 URI 实例化
ProducerExtension资源。绑定使用方工作负载:使用方现在可以通过引用
ProducerExtension资源 URI 将其网关绑定到您的扩展程序。
附录:自定义扩展程序的上下文元数据
为了帮助您的自定义扩展程序做出情境感知授权和处理决策, Cloud de Confiance 数据平面会将生命周期和资源情境直接传递给 ext_proc 服务器。
此信息会作为无类型元数据捆绑在 ext_proc gRPC ProcessingRequest 的 metadata_context 字段中。此元数据位于 com.google.serviceextensions.invocation_info 命名空间下,并使用标准 google.protobuf.Struct 格式。
您可以将此元数据解码或转换为 JSON 格式,以便进行下游处理。以下是针对 Agent Gateway 且流量绑定到 MCP 服务器的请求的 JSON 格式示例:
{ "binding_selector" : { "target" : "//networkservices.googleapis.com/projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME", "project_number" : PROJECT_NUMBER, "to_resource": "urn:mcp:projects-PROJECT_NUMBER:projects:PROJECT_NUMBER:locations:LOCATION:agentregistry:services:SERVER_ID" } }
JSON 的架构如下所示:
message ServiceExtensionsInvocationInfo { message ExtensionBindingSelector { // The target (gateway ID, etc) in fully qualified name format. // For example: // "//networkservices.googleapis.com/projects/PROJECT_ID/locations/LOCATION/agentGateways/AGENT_GATEWAY_NAME" string target = 1; // Project number associated with the target. uint64 project_number = 2; // The destination resource within the Agent Registry that traffic is directed to. string to_resource = 3; } ExtensionBindingSelector binding_selector = 1; }