博客
可靠性与生产环境

发布于 更新于

Anshu 和 Arag

AI Agent 安全:身份、权限、密钥与审计日志

以 Markdown 阅读

AI agent 安全的起点,是将每项操作绑定到其代表的身份、租户、资源和权限。提供商凭据不得进入模型上下文,授权必须由下游服务执行,高影响操作前需要审批,并记录决策和结果以供调查。

系统提示词可以影响行为,却无法缩小工具进程中管理员 token 的实际权限。

将身份贯穿整项操作

一次 agent 运行可能涉及用户、应用租户、agent 部署、会话和后台 worker。应分别保留这些身份。

flowchart LR
    User[Authenticated user] --> Session[Agent session]
    Session --> Policy{Tenant, resource, action}
    Policy -->|allow| Tool[Server-side tool]
    Tool --> Credential[Scoped provider credential]
    Credential --> Backend[Downstream service]
    Policy --> Audit[Decision record]
    Backend --> Audit

后端应获得足够上下文,以授权其代表的用户和租户。如果无法避免共享 worker 凭据,工具 adapter 必须在使用前补充执行缺失的资源规则。

Agent 控制面指南介绍了这些决策和凭据引用应存放在哪里。

在凭据层和 API 层缩小权限

只授予 agent 当前任务必需的操作和资源。将读取、写入、资源配置、计费和管理凭据分开。先按租户和环境限制范围,再在提供商支持时缩短凭据有效期。

如果任务级操作已经足够,就不要提供范围广泛的底层能力。refund_order(order_id, amount) 可以执行所有权、金额上限、审批和幂等性检查。通用 SQL 或提供商管理工具则会把这些决策全部交给生成的参数。

OWASP 的过度代理权指南建议尽量减少工具功能、权限和自主程度。即使模型选择了有效工具,授权仍由后端负责。

将密钥留在模型路径之外

在服务端密钥管理器中存储密钥,并通过应用代码传递引用。只向真正需要的最小运行时注入任务范围凭据,随后撤销或等待它过期。

密钥经常通过以下位置泄露:

  • 提示词和检索上下文;
  • 工具参数或描述;
  • URL 和查询字符串;
  • 异常消息和 stdout;
  • trace、重放数据和支持导出;
  • 沙箱文件和继承的环境变量。

导出前完成脱敏,并有意触发错误进行测试。绝不能要求模型重复或转换密钥。对于 MCP 连接,当前授权规范要求通过 Authorization header 传递 access token,并要求服务器拒绝 URI 中的 token。

在产生影响前完成审批

破坏性、付费、外部可见或范围异常广泛的操作需要审批。展示确切资源、参数和后果,将审批绑定到这些值,并设置过期时间。

执行时再次检查权限。操作等待期间,用户角色或资源所有权可能变化。审批无法授予审批人本身不拥有的权限。

Railway 的 2026 年 4 月事故报告介绍了 agent 找到账户 token 并调用旧版立即删除 API 的事故。Railway 恢复了存储卷,并将 API 删除改为保留 48 小时的软删除。结论很具体:token 权限范围、API 行为和可恢复性必须共同发挥作用。

将检索内容视为不受信任的输入

网页、邮件、issue 或文档可能包含针对模型的指令。将数据与可信系统策略分开,绝不允许检索文本扩大工具权限。对模型建议的操作重新执行策略检查。

工作流范围较小时,使用网络目标和资源类型允许列表。在 trace 中标记外部内容来源,让调查人员看出哪些内容影响了操作,同时避免将该内容视为权威指令。

编写支持快速止损的审计记录

记录执行者、所代表用户、租户、agent 与会话、工具、资源、操作、策略版本、决策、审批引用、操作 ID、时间戳和结果。“允许”与“完成”必须分开记录。

审计日志中不得保存密钥或无限制的模型内容。需要详细上下文时,链接到受保护的 trace。即使导致故障的 agent 已不可用,审计路径也应能回答需要撤销哪些凭据、哪些资源可能已经变化。

测试撤销与跨租户拒绝

在隔离环境中:

  1. 在任务等待时撤销会话,并验证恢复会安全失败;
  2. 通过每条工具路径尝试访问其他租户的资源 ID;
  3. 将恶意指令注入检索内容;
  4. 触发提供商错误和校验错误,再检查日志是否包含密钥;
  5. 在未经审批的情况下请求破坏性操作,并确认没有下游调用。

生产环境检查清单将这些控制措施与重试、trace 和恢复连接起来。

下方的提示词会从代码生成实际权限矩阵。任何强制执行点为“系统提示词”的记录,都代表尚未完成的安全工作。