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 已不可用,审计路径也应能回答需要撤销哪些凭据、哪些资源可能已经变化。
测试撤销与跨租户拒绝
在隔离环境中:
- 在任务等待时撤销会话,并验证恢复会安全失败;
- 通过每条工具路径尝试访问其他租户的资源 ID;
- 将恶意指令注入检索内容;
- 触发提供商错误和校验错误,再检查日志是否包含密钥;
- 在未经审批的情况下请求破坏性操作,并确认没有下游调用。
生产环境检查清单将这些控制措施与重试、trace 和恢复连接起来。
下方的提示词会从代码生成实际权限矩阵。任何强制执行点为“系统提示词”的记录,都代表尚未完成的安全工作。