ADK 的 Secret Manager¶
Supported in ADKPython v1.29.0
The Secret Manager 集成提供了标准接口,供 ADK 智能体在运行时检索敏感凭据(如 API 密钥、数据库密码和私钥)。这种方式确保敏感信息不会硬编码在源代码中,也不会暴露在 LLM 的上下文窗口、对话历史或可观测性日志中。
使用场景¶
- 即时工具授权:在智能体初始化代码中存储静态 API 密钥是不安全的。通过此集成,ADK 智能体在运行时动态从 Secret Manager 检索凭据,确保按需加载密钥到内存中。
- 安全的多租户工作流:为避免从前端传递原始用户令牌,智能体可以将用户 ID 映射到特定的 Secret Manager 资源。
before_agent_callback钩子动态检索用户的密钥,以安全地恢复session.stateOAuth 令牌。 - 加密的系统任务:后台系统任务(如数据库轮询)在工具逻辑内部直接从 Secret Manager 检索凭据。这防止密码进入 LLM 的对话历史,仅向模型暴露执行摘要。
前置条件¶
- 所需软件版本:ADK Python 版本 v1.29.0 或更高版本
- 所需账户/API:一个已启用 Secret Manager API 和 Agent Development Kit API 的 Google Cloud 项目。
完成以下设置步骤:
- 使用 ADK 设置一个智能体。
- 在 Secret Manager 中创建一个密钥(例如 API 密钥)。
- 为你的智能体身份授予
Secret Manager Secret AccessorIAM 角色。
安装¶
与智能体配合使用¶
import os
from google.adk import Agent
from google.adk.integrations.secret_manager.secret_client import SecretManagerClient
# 从全局 Secret Manager 获取密钥
project_id = os.environ.get("GOOGLE_CLOUD_PROJECT")
secret_id = os.environ.get("ADK_TEST_SECRET_ID")
secret_version = os.environ.get("ADK_TEST_SECRET_VERSION", "latest")
if not project_id or not secret_id:
raise ValueError("必须设置 GOOGLE_CLOUD_PROJECT 和 ADK_TEST_SECRET_ID 环境变量。")
resource_name = f"projects/{project_id}/secrets/{secret_id}/versions/{secret_version}"
print("正在从全局 Secret Manager 获取密钥...")
# 初始化 Secret Manager 客户端(全局)
client = SecretManagerClient()
# 获取密钥
try:
secret_payload = client.get_secret(resource_name)
print("成功获取密钥。")
# secret_payload 现在可供智能体或其工具按需使用
except Exception as e:
print(f"获取密钥时出错:{e}")
raise e
# 初始化智能体
root_agent = Agent(
model='gemini-2.5-flash',
name='root_agent',
description='一个帮助回答用户问题的助手。',
instruction='尽你所能回答用户的问题',
)
print("智能体初始化成功。")