智能体开发套件 (ADK) 智能体与 Google Cloud之外的外部服务进行交互。代理身份和 Identity and Access Management (IAM) 都可让您通过 Google Cloud服务进行身份验证。不过,他们无法向不支持 Google 身份联合的外部平台证明自己的身份。
ADK 代理需要访问各种凭据才能与外部实体(例如 MCP 服务、ADK 工具和 API)进行交互。常见示例包括:
- 支付处理平台的 API 密钥
- 旧版本地数据库的用户名和密码组合
- 双向 TLS (mTLS) 连接的私钥
google.adk.integrations.secret_manager.secret_client 软件包中提供了 SecretManagerClient 模块。此模块提供了一个标准接口,供代理在运行时从 Secret Manager 检索 Secret。
本文档介绍了如何使用 Secret Manager 在 ADK 中管理外部服务的 Secret。
将 Secret Manager 与 ADK 搭配使用的优势
手动管理密钥可能会带来安全风险,并增加开发者的工作量。Secret Manager 可通过以下方式帮助解决这些问题:
- 如果您将 Secret 嵌入代理代码中,就会带来严重的安全风险。这种做法可能会导致对生产系统的未经授权的访问。使用 Secret Manager 可从源代码中移除敏感数据。这有助于提高应用的安全性。
- 如果您通过环境变量嵌入静态 Secret,凭据轮换会变得很复杂。如需应用更新,您必须重启部署容器。 Secret Manager 会在运行时动态检索凭据,从而实现更新,而不会导致系统停机。
- 如果您为每个工具编写自定义
SecretManagerServiceClient样板代码,则会增加开发者的工作量和出错风险。标准化的 ADK 集成提供了一种简洁且可重复使用的方法来检索凭据。
准备工作
在将 Secret Manager 与 ADK 集成之前,请完成以下操作:
- 使用 ADK 设置代理。此功能需要使用 ADK 1.29 版或更高版本(适用于 Python)。
- 向代理身份授予
Secret Manager Secret AccessorIAM 角色。此角色允许您的代理在运行时检索密钥。 - 在 Secret Manager 中创建 Secret 并添加 Secret 版本(例如 API 密钥)。
ADK 代理如何在运行时检索 Secret
secret_client.SecretManagerClient 模块会在运行时将凭据检索到 Python 代理代码逻辑中。智能体编排逻辑会向大语言模型 (LLM) 发送提示,以决定要执行哪个工具,但系统不会将密钥发送给 LLM。
在运行时阶段,代理会执行以下步骤:
- 在 ADK 代理调用第三方工具之前,该代理会初始化
SecretManagerClient模块并调用get_secret()函数。 - ADK 代理使用代理身份向 Secret Manager 进行身份验证。
SecretManagerClient模块将明文密钥返回给 ADK 代理。- ADK 代理使用该 Secret 向第三方工具进行经过身份验证的调用。
在运行时检索 ADK 代理中的 Secret
以下代码示例展示了如何使用 SecretManagerClient 模块在 ADK 代理中安全地检索密钥。代理会在内部检索密钥,以防止向大语言模型的上下文窗口或对话历史记录泄露敏感凭据。
Python
要运行此代码,请先设置 Python 开发环境并安装 Secret Manager Python SDK。 在 Compute Engine 或 GKE 上,您必须使用 cloud-platform 范围进行身份验证。
后续步骤
- 探索智能体开发套件。