提供商密钥不应进入模型上下文、工具参数、工具结果、URL、浏览器代码或日志。MCP 服务器使用独立的上游凭据,模型只能获得经过授权的工具结果。
MCP access token 同样需要保护,但它并不是提供商 token。将其透传给上游 API,会破坏协议规定的 audience 边界。
凭据会在哪里泄露
提示词与上下文
Agent 为诊断配置而读取 .env,随后可能在推理、生成的代码或对话记录中输出其中的值。应尽可能禁止面向模型的文件工具读取密钥存储。进程需要凭据时,应将凭据直接注入该进程,而不是要求模型读取。
工具参数与结果
工具为了照搬上游 API 而接收 apiKey,或返回包含凭据和调试 header 的提供商响应。应将密钥字段从 schema 中彻底移除,由服务端从经过身份验证的会话状态中解析凭据。
URL
查询字符串会出现在访问日志、浏览器历史记录、分析系统、错误报告和截图中。MCP 授权规范要求通过 Authorization header 传递 bearer access token,并禁止在 URI 查询字符串中传递。
日志与链路追踪
HTTP 中间件可能在应用脱敏逻辑运行前记录 header 和请求体。错误追踪工具也可能捕获环境变量、子进程命令或本地文件。应在采集边界完成脱敏,并测试序列化后的事件,而不只是 logger 调用。
生成的代码与产物
即使 Git 已忽略 .env,agent 仍可能将凭据硬编码到脚本、fixture、notebook、截图或构建输出中。部署前,应扫描构建后的客户端 bundle 和生成产物,查找凭据前缀。
AI agent 安全指南介绍了 MCP 之外的密钥处理方法。
使用两道授权边界
flowchart LR
C[MCP client] -->|MCP access token| S[MCP server]
S -->|validated user and policy| P[Tool executor]
P -->|separate upstream credential| U[Provider API]
U -->|bounded result| P
P -->|redacted tool result| C
MCP 服务器会验证 access token 的 audience 是否为自身,然后对其代表的用户和工具操作执行授权。执行器使用专门为上游服务签发的凭据。条件允许时,上游 API 还应对最终资源执行授权。
MCP 规范明确禁止将传入的 MCP token 转发给上游 API。身份验证与授权指南介绍了资源指示符、audience 校验和独立下游授权。
将上游凭据限定到工具所需范围
使用只能执行当前工具所需操作、访问所需资源的凭据。只读客户查询不应使用账户管理员密钥。如果提供商无法签发足够精细的权限,应在其前面增加一个范围严格受限的服务端代理,并在代理中执行缺失的规则。
开发和生产环境使用不同凭据。Coding agent 工作区和测试 fixture 中不得出现生产凭据。
将 Cohesivity 凭据留在服务端
Cohesivity 将用于租户管理的管理密钥与用于已配置服务的应用密钥分开,两者都应留在服务端代码中。上游提供商凭据始终由 Cohesivity 保管。
对于 HTTP 应用,如果 offering 支持,可以用应用密钥换取短期 edge 会话 token,并确保该 token 只存在于服务端请求路径中。不要把任何 coh_* 值放入公开环境变量或浏览器请求。
后端资源配置教程展示了完整配置过程中如何分离这些凭据。
使用金丝雀值测试脱敏
在测试环境中使用形状类似真实凭据的虚假金丝雀值。让请求依次经过模型输入、工具执行、上游失败、重试、日志记录、链路追踪和错误报告,再在捕获的所有产物中搜索该值。
至少测试:
- 请求和响应日志;
- trace attribute 和 event;
- 错误追踪 payload;
- 模型对话记录;
- 生成的源代码和构建输出;
- shell 历史记录和进程命令行;
- 测试 snapshot 和 fixture。
不要使用真实凭据进行这项测试。
在事故发生前设计轮换和撤销流程
记录凭据所有者、权限范围、创建时间、最后使用时间、轮换流程和撤销路径。新旧凭据只应在部署确实需要时短暂重叠。撤销凭据不应要求删除用户账户或组织中的所有集成。
下方的提示词会追踪一项指定凭据在整个系统中的路径,同时避免输出它的值。