返回 Resources

密钥安全RESOURCE / preventing-agent-secret-leakage

防止 Agent 密钥泄漏

从凭据分类、Connection 边界和变更评审出发,建立可检查的 Agent 密钥治理方式。

Agent 第一次出现时,可以把它理解为会执行任务的 AI 工作助手或智能代理。密钥风险通常不是从“模型把密钥说出来”才开始,而是在更早的交付环节发生:样例工程被复制到新项目、环境变量文件在群里流转、管理员凭据被临时借用、客户环境交接时没有写清撤销负责人。

密钥泄漏往往发生在交付复制时

中国软件团队常见的现实是,一个平台组同时支持内部业务和多个 ToB 项目。为了提高交付速度,脚手架、部署说明和环境模板会被反复复用。如果模板里混入真实 Provider 凭据,或者项目把管理员凭据当成普通调用 key,风险会随着复制扩大。

所以,安全评审不能只问“密钥有没有放进密钥管理系统”,还要问“这份密钥为什么存在、由谁使用、跟哪个资源绑定、项目结束后谁负责替换”。

密钥放在哪里,只回答了存储问题;密钥为什么能被这个 Agent 使用,才是治理问题。

按使用目的分层,不按文件位置分层

同一个 .env 文件里可能同时出现多类凭据,但它们不应因此被视为同一安全等级。

  • Gateway API key:面向 Agent 请求入口,用于进入指定的 Service Endpoint 边界。
  • 管理员凭据:用于管理 Control Plane,不应进入 Agent 运行配置。
  • Provider 凭据:属于具体 Connection,用于到达对应模型服务,不应直接交给 Agent。

这种分类适用于境内或国际模型服务的治理讨论,但不代表 Stravia Console 已验证广泛 Provider 支持。重点是让每个凭据角色有明确用途,而不是对服务覆盖范围作推断。

把 Connection 当成交付隔离单元

Provider 表示可管理的模型服务资源,Connection 表示由该 Provider 拥有的具体配置实例。对交付团队来说,Connection 应当是需要单独确认的项目边界:端点、凭据、所有者和替换流程都要随项目环境重新核对。

这意味着“复用交付方案”可以复用字段和评审流程,但不能默认复用真实 Connection。内部环境、客户环境、不同部署区域或不同模型服务安排,都应保留独立判断。

做一张能交接的密钥责任单

下面是一份适合方案评审或交付交接的工作表,不是产品自动生成的审计报告:

交接项 必须填写的内容 需要停下来复核的情况
Agent 入口 Service Endpoint、Gateway API key 负责人 使用管理员凭据代替入口 key
管理权限 管理员、使用场景、撤销联系人 凭据进入 Agent 配置或共享模板
模型服务配置 Provider、Connection、凭据所有者 Agent 直接持有 Provider 凭据
项目退出 替换或撤销责任人 项目结束后无人确认凭据状态

责任单的价值不在于承诺“不会泄漏”,而在于让后来接手的人知道从哪里撤销、替换和复核。

在变更评审里设置停线条件

以下变化不应被当作普通配置修改:

  1. 新增一种凭据角色。
  2. 把 Provider 凭据移动到 Agent 可直接读取的位置。
  3. 让多个项目共享同一个 Connection,却没有共同所有者。
  4. 调整管理员访问范围,但没有单独评审。
  5. 无法说明变更后可以检查哪些请求证据。

遇到这些情况,团队需要的是一次明确的安全决定,而不是在通用提示词、共享脚本或部署文档里悄悄完成变更。

当前证据能说明什么,不能说明什么

Stravia Console 当前 0.1.0-alpha 预发布产品基础提供了 Service Endpoint、Provider、Connection、确定性路由、凭据边界和请求检查等可核验概念,当前执行范围为 OpenAI-compatible、非流式文本。固定 Demo 证据不是客户数据,也不能证明生产安全结果。

这些证据有助于评审凭据是否分层、Connection 是否被命名、请求路径是否明确。它们不能被解读为隐私扫描、自动密钥发现、完整审计报告、合规认证、生产就绪或 SLA。公开 Early Access 当前仍是 Coming Soon。

一个可执行的默认原则是:Agent 只获得完成入口调用所需的有边界凭据;管理员权限留在 Agent 运行环境之外;Provider 凭据留在有所有者的 Connection 中;每个例外都写明撤销路径。