当编排器智能体调用远程 Agent2Agent (A2A) 智能体时,限定凭据范围有助于确保远程智能体仅获得该请求所需的权限。在 Agent Registry 中发现代理后,您可以使用 Agent Identity 身份验证管理器以及受限 OAuth 范围或 Cloud Storage 的凭据访问边界,添加用户的凭据或生成限定范围的令牌。
准备工作
在通过 A2A 调用的限定范围凭据限制代理权限之前,请完成以下步骤:
- 设置 Agent Registry。
对于单项目设置,请获取已启用 Agent Registry 的治理项目的项目 ID。如果您为多个项目配置了管理边界,请使用管理项目的 ID 进行边界范围内的发现和注册,或指定成员项目 ID 进行单项目操作。
如果您想限制 Cloud Storage 令牌,请在项目中启用 Security Token Service API (
sts.googleapis.com)。安装
google-auth和requestsPython 库:pip install --upgrade google-auth requests为本地开发配置应用默认凭证 (ADC)。否则,请附加服务账号或工作负载身份联合凭证配置:
gcloud auth application-default login
所需的角色
您可以使用用户账号进行本地开发,也可以使用服务账号或智能体主体,让编排器智能体发现已注册的智能体并调用目标 A2A 智能体。用户账号、服务账号或智能体主体必须具有适当的角色才能完成这些任务。
为确保您的用户账号、服务账号或智能体主体拥有在智能体注册表中发现 A2A 智能体并调用目标 A2A 智能体所需的权限,请让您的管理员为您的用户账号、服务账号或智能体主体授予以下 IAM 角色:
-
如需在 Agent Registry 中发现代理,请在启用了 Agent Registry 的治理项目中拥有 Agent Registry API Viewer (
roles/agentregistry.viewer) 角色 -
在运行时调用目标 A2A 智能体:
托管目标智能体的服务的运行时或网关角色,调用该智能体时需要此角色。例如,如果目标智能体在 Cloud Run 上运行,则账号或主账号必须具有 Cloud Run Invoker 角色 (
roles/run.invoker)。
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
您的管理员还可以通过自定义角色或其他预定义角色向您的用户账号、服务账号或智能体主体授予所需的权限。
凭证如何在智能体之间传递
当 A2A 客户端或编排器代理向远程代理发送消息时,下游服务会根据请求的身份验证方式检查权限:
- 代表用户:用户登录您的编排器智能体,该智能体将用户授权的 OAuth 2.0 令牌或由身份验证管理器管理的令牌传递给远程 A2A 智能体。 Google Cloud API 会验证令牌并检查用户的 Identity and Access Management (IAM) 权限,以便远程智能体无法访问用户无权访问的资源。
- 使用智能体自己的身份:当编排器智能体在没有登录用户的情况下运行时,它会使用自己的智能体身份或服务账号进行身份验证。下游服务会检查授予该代理的主账号 (
principal://)、匹配的主账号集 (principalSet://) 或其服务账号的角色。 - 从外部或跨云工作负载:在Google Cloud 外部运行的智能体通过工作负载身份联合交换来自外部身份提供方的令牌,以在调用目标 Agent Endpoint 之前获取联合 Google Cloud 访问令牌。
如需限制令牌授予远程智能体的权限,您可以使用绑定限制 OAuth 令牌的范围,以用于第三方或 SaaS A2A 智能体。
您还可以使用凭据访问边界限制 Cloud Storage 令牌,以将 Google Cloud 访问令牌限制为特定的 Cloud Storage 存储桶或对象。凭据访问边界仅支持 Cloud Storage (storage.googleapis.com) 权限。对于其他 Google Cloud API 和 A2A 智能体调用,请通过身份验证管理器绑定、具有 IAM 允许和拒绝政策的最小权限智能体身份或 Agent Gateway 来限定访问权限范围。
如果这些选项不适合您的使用场景,并且您的编排器代理使用服务账号进行身份验证,您还可以使用服务账号模拟为仅具有特定任务所需角色的专用服务账号请求短期有效令牌。
使用绑定限定 OAuth 令牌的范围
调用使用 2 足式或 3 足式 OAuth 2.0 的第三方或 SaaS A2A 智能体时,请在身份验证管理器中创建一个身份验证提供方,并在 Agent Registry 中附加一个 Binding 资源,其中仅列出远程智能体所需的 OAuth scopes。当智能体开发套件 (ADK) 使用 get_remote_a2a_agent() 检索远程智能体时,它会请求仅限于该绑定范围的令牌。如需了解设置步骤,请参阅向工具和资源进行身份验证和管理绑定。
限制 Cloud Storage 令牌
如果您的编排器代理将 OAuth 2.0 访问令牌传递给读取或写入 Cloud Storage 数据的代理或工具,您可以降低令牌的权限,使其仅允许访问特定存储桶或对象前缀。在发送请求之前,使用 Security Token Service 应用凭据访问边界:
import google.auth
from google.auth import downscoped
from google.auth.transport.requests import Request
source_creds, _ = google.auth.default(
scopes=["https://www.googleapis.com/auth/cloud-platform"]
)
access_boundary_rule = downscoped.AccessBoundaryRule(
available_resource=(
"//storage.googleapis.com/projects/_/buckets/BUCKET_NAME"
),
available_permissions=["inRole:roles/storage.objectViewer"],
)
cab = downscoped.CredentialAccessBoundary(rules=[access_boundary_rule])
downscoped_creds = downscoped.Credentials(
source_credentials=source_creds,
credential_access_boundary=cab,
)
downscoped_creds.refresh(Request())
将 BUCKET_NAME 替换为远程代理可以读取的 Cloud Storage 存储桶名称。
其他安全控制措施
您可以将凭证范围限定与网络政策和提示检查结合使用:
- 网络访问权限政策:通过 Agent Gateway 路由 A2A 调用,以对已注册的
Agent资源强制执行 Identity-Aware Proxy (IAP) Unified Access Policies (UAP)。 - 提示和回答检查:配置 Model Armor 与 Agent Gateway 的集成以及服务扩展程序绑定,以检查支持的 A2A 提示和回答是否存在提示词注入和敏感数据泄露。
后续步骤
- 在向工具和资源进行身份验证中配置两方模式和三方模式 OAuth 绑定。
- 在构建多智能体系统并调用 A2A 智能体中,使用 OAuth 2.0 和 OIDC 令牌调用目标 A2A Agent Endpoint。
- 如需了解调用 A2A 智能体的角色和 IAM 拒绝政策,请参阅角色和权限。