您可以创建 Identity and Access Management (IAM) Unified Access Policies (UAP),以帮助安全地管理智能体主体与目标资源(例如目标代理、MCP 服务器和端点)之间的通信。这些政策与包含 Agent Gateway 实例的项目相关联。
Agent Gateway 使用 Identity-Aware Proxy (IAP) 来评估和强制执行 UAP。
IAP 还与情境感知访问权限集成,以提供端到端的代理身份验证和授权。
如需为 Agent Gateway 设置 UAP,请参阅配置 IAM UAP。
您还可以在 Agent Identity 上创建 Principal Access Boundary (PAB)。Agent Gateway 可以使用 IAP 来强制执行 Principal Access Boundary Policy。
启用 Agent Gateway
如需使用智能体通信政策,您必须设置 Agent Gateway。
我们建议您在预演环境中以试运行模式 (DRY_RUN) 配置 Agent Gateway,以验证政策是否按预期运行。
当您确信政策运行正常后,可以更新代理网关配置,将强制执行模式设置为 ENFORCE。在此模式下,系统会禁止违反政策的智能体通信,并阻止与资源的通信。
UAP 概览
UAP 用于控制一个或多个智能体主体是否可以访问一个或多个目标资源。UAP 通过在单个政策中支持多条规则来扩展 IAM 政策模型。与 IAM 允许政策和拒绝政策不同,UAP 中的每条规则都可以同时具有允许效果和拒绝效果。详细了解 IAM 政策类型。
规则还包含以通用表达式语言 (CEL) 表示的条件。条件是控制对网关后资源访问权限的主要机制。通过 Agent Gateway 和 IAP 强制执行 UAP,可对企业中部署的代理实施严格的行为控制。您可以在单个政策中表示实际的精细代理治理用例。
一项典型的政策至少包含两条不同的规则:
- 允许规则:允许规则具有允许效果,可让智能体主体访问特定的安全操作,例如对工具执行读取操作以获取跟踪数据或查看注册表条目。
- 拒绝规则:拒绝规则具有拒绝效果,可禁止代理执行不需要的操作,例如对关键资源执行未经命令的删除或更新操作。
例如,假设某个自动化客户支持代理需要与具有客户数据库特权访问权限的内部工具进行互动。管理员配置了具有 IAP 的 Agent Gateway,以强制执行 IAM UAP。管理员可以配置一个 UAP,其中包含一条允许规则,用于授权智能体主体读取支持服务工单;还包含一条拒绝规则,用于禁止智能体主体删除或更新数据库记录。
通过使用同时包含允许规则和拒绝规则的 UAP,组织可以直接将单个企业合规性政策部署到基础云基础架构上,以限制代理行为。
最佳做法
配置代理出站政策时,请遵循以下最佳实践:
- 使用试运行模式:先在试运行模式下部署新的或修改后的政策,以确保政策按预期运行,而不会阻止活跃代理流量。
- 应用最小权限原则:仅授予必要的权限。在 CEL 条件中使用具体的工具名称或路径,而不是通配符。
- 使用拒绝规则来实施保护措施:使用明确的拒绝规则来实施关键的保护措施,例如阻止在生产端点上使用破坏性工具。使用拒绝规则来设置安全护栏非常有效,因为拒绝规则会替换允许规则。
- 定期执行审核:定期检查 Cloud Audit Logs 日志和政策配置,以验证它们是否符合您所在组织的安全政策。
UAP 组件
UAP 包含一条或多条规则。规则包含以下组成部分:
智能体主体
在 IAM UAP 中,您可以定义一个或多个智能体主体。智能体主体是指您授予访问权限的成员。您可以通过代理的身份(即与资源发起通信的代理的身份)来指定代理。
如需详细了解不同类型的代理如何接收身份,请参阅代理身份。
代理身份由包含代理的 SPIFFE 格式身份(例如 principal://agents.global.org-...)的主账号标识符表示。
您可以指定单个代理身份的数组或一组主账号的数组。
内置代理身份在 Cloud de Confiance 服务(例如 Agent Runtime [推理引擎]、Gemini Enterprise [Discovery Engine] 和配置了代理身份的 Cloud Run 服务)中预配。这些代理主账号采用 principal://TRUST_DOMAIN/AGENT_UNIQUE_IDENTIFIER 格式,其中标识符表示代理在其托管服务上的资源路径。您还可以使用工作负载身份联合主账号标识符指定代理。
规则效果
规则效果用于定义规则是允许还是禁止智能体主体访问资源。
目标资源
IAM UAP 用于管理从智能体主体到目标资源的访问权限。目标资源是指代理主账号尝试访问的资源。目标资源在规则条件中指定。目标资源可以是已注册的资源,也可以是未注册的资源。
已注册的资源
已注册的资源是指在代理注册表注册的资源。
注册的资源包括以下内容:
- 注册表:项目中的整个代理注册表。
- MCP 服务器:在代理注册表中注册的 MCP 服务器。
- 代理:在代理注册表中注册的代理。可以通过代理身份单独指定各个代理。一组代理可以通过主体集标识符指定。
- 端点:在代理注册表中注册的端点。
您可以在代理注册表中注册单个服务。如果您对代理注册信息进行区域化处理,并且您的规则管理对已注册资源的访问权限,那么您的 UAP 仅适用于注册信息所在区域中的资源。
未注册的资源
未注册的资源是指未在代理注册表中注册的资源。如需在 UAP 规则中授予或拒绝访问未注册资源的权限,您必须在规则条件中使用包含未注册主机和路径属性的通用表达式语言 (CEL) 表达式来指定未注册的资源。
条件
在 UAP 规则中,您可以使用 conditions 块中的通用表达式语言 (CEL) 表达式来定义目标资源范围和精细的访问权限条件:
目标资源范围:用于标识规则所适用的哪些目标资源。在 JSON 格式的政策文件中,您可以指定目标属性,例如
destination.agent_registry.mcp_server.name或destination.unregistered.host。在 Cloud de Confiance 控制台中,选择目标资源下的目的地会自动将这些资源条件添加到规则的条件表达式中。访问条件:使用布尔值表达式来确定规则效果的生效时间和约束条件。例如,您可以使用 UAP CEL 属性,根据工具名称、只读状态、HTTP 方法或路径前缀来限制访问权限。只有当整个 CEL 表达式的计算结果为
true时,规则效果(允许或拒绝)才会生效。
在 gcloud CLI 和 REST API 中,您可以在规则定义的 conditions 字段中指定这些 CEL 表达式。
在 Cloud de Confiance 控制台中,您可以使用条件构建器配置标准规则,也可以直接在条件编辑器中编写自定义 CEL 表达式。
权限
在采用 IAM UAP 的 IAP V2 中,始终会在目标资源上授予 iap.googleapis.com/resources.egressViaIAP 权限。在 gcloud CLI 和 REST API 中,您可以在政策文件的 operation.permissions 字段中指定权限。
政策创建选项
在 Cloud de Confiance 控制台的政策页面中,您可以创建 IAM UAP。建议您仅创建 UAP(IAM v3 政策)。
在 gcloud CLI 和 REST API 中,您都可以先创建一个 JSON 格式的文件,然后配置 IAM UAP。我们建议您仅创建 UAP。
端到端身份验证和授权
IAP 和情境感知访问权限使用以下协议提供默认的端到端代理身份验证和授权:
- 双向 TLS (mTLS)
- 演示所有权证明 (DPoP)
代理身份通过 X.509 证书和与证书绑定的令牌进行预配。IAP 会强制执行以下操作:代理身份使用双向 TLS (mTLS) 向 Agent Gateway 进行身份验证。当网关允许代理出站并访问 Cloud de Confiance API、MCP 服务器、其他代理和端点时,代理会尝试在 mTLS 边界之外进行访问。为了帮助保护通信,情境感知访问权限会强制执行由 Google 管理的情境感知访问权限政策。该政策要求 DPoP 验证与代理身份绑定的证书绑定令牌。如需详细了解情境感知访问权限如何使用 mTLS 和 DPoP,请参阅情境感知访问权限代理安全性。
UAP CEL 属性
在 UAP 中,您可以使用条件表达式定义条件。表达式可以包含多个子表达式。您在每个关系子条件中使用的目标资源类型决定了您可以使用的属性。
例如,在以下条件中,在子表达式 destination.unregistered.path.startsWith('/v1/statements') 中,资源类型是未注册的目标,属性是 destination.unregistered.path,而 startsWith() 是 CEL 函数。
destination.unregistered.host == 'finance.example.com' &&
destination.unregistered.path.startsWith('/v1/statements')
下表中所述的属性适用于每种资源类型:
| 目标资源类型 | 属性 | 详细信息 | ||||||
|---|---|---|---|---|---|---|---|---|
Agent Registry |
destination.is_registered |
|
||||||
destination.agent_registry.resource_type |
|
|||||||
destination.agent_registry.location |
|
|||||||
destination.agent_registry.project_id |
|
|||||||
代理 |
destination.agent_registry.agent.name |
|
||||||
MCP 服务器 |
destination.agent_registry.mcp_server.name |
|
||||||
destination.agent_registry.mcp_server.method |
|
|||||||
destination.agent_registry.mcp_server.tool.name |
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.read_only_hint
|
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.destructive_hint
|
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.idempotent_hint
|
|
|||||||
destination.agent_registry.mcp_server.tool.annotations.open_world_hint
|
|
|||||||
destination.agent_registry.mcp_server.prompt.name |
|
|||||||
destination.agent_registry.mcp_server.resource.name |
|
|||||||
端点 |
destination.agent_registry.endpoint.name |
|
||||||
未注册的目标 |
destination.unregistered.host |
|
||||||
destination.unregistered.path |
|
|||||||
destination.unregistered.method |
|
后续步骤
Codelab:保护跨云智能体 AI 应用
如需了解如何在 Securing Cross-Cloud Agentic AI Applications Codelab 中保护智能体应用,请参阅相关内容。