Caloogy 文章
English

Agent 的权限设计:最小权限 + 人在回路

日期
2025 年 9 月 14 日
系列
Agent 沙箱
阅读
4 分钟
主题
AiAgentPermissionsLeast privilege

一句话版本

给 AI Agent 权限,和给新员工权限是同一个问题:给少了干不了活,给多了出事代价大。实用的做法是三件事:默认只读、按动作的风险分级审批(低风险自动、高风险必须人确认)、凭证不交给模型(由系统代为使用)。 最大的陷阱是确认疲劳:如果 Agent 每做一步都要你点"允许",你很快就会不看内容直接点,审批也就形同虚设。

全文分三层:

  1. 通俗理解:给新员工开权限
  2. 实际用处:编程 Agent 的权限模式、浏览器 Agent、企业 Agent
  3. 原理与工程要点:动作风险分级、审批界面怎么设计、短期凭证与代理

第一层:通俗理解

1.1 给新员工开权限

一个合理的公司会这样给新员工开权限:

Agent 也应该这样。区别在于:Agent 比新员工更容易被骗(见《提示词注入》),而且一秒钟能做几十个动作。

1.2 三个原则

原则 含义
默认只读 能看不能改;能查不能发
按风险分级审批 低风险自动放行,高风险必须人确认
凭证不交给模型 模型说"我要调用这个接口",由系统代为认证;模型本身看不到密钥

第二层:实际用处


第三层:原理与工程要点

3.1 动作风险分级

等级 特征 例子 处理
低 只读、本地、可撤销 读文件、搜索代码、运行测试 自动放行
中 写入但可撤销、影响范围小 修改工作目录里的文件、本地提交 自动放行或批量确认
高 对外、不可撤销、影响他人 推送代码、发邮件、发消息、调用付费 API、部署 逐次确认
禁止 极度危险 删除生产数据库、转账、修改权限和安全设置、读取私钥 不提供这个能力

判断风险的维度:能否撤销、影响范围(只影响自己 vs 影响他人 / 公开)、是否涉及钱或凭证、是否对外发送数据。

3.2 审批界面怎么设计

一个好的确认界面要让人在几秒钟内看懂:

避免确认疲劳的办法(参见《风控评分与摩擦设计》):

3.3 命令允许列表的陷阱

"允许 git 命令"看起来安全,但 git 可以推送到任意远程仓库;"允许 npm"意味着允许 npm install 任意包,而安装脚本可以执行任意代码(见《依赖投毒》)。允许列表应当尽量具体到子命令和参数,并且考虑命令的组合(管道、&&、$(...))。

3.4 凭证:短期、窄范围、不进上下文

做法 说明
短期凭证 有效期按小时甚至分钟计,任务结束即失效
窄范围 只能访问这一个仓库、只读这一个日历
代理注入 Agent 发出的请求经过代理,由代理附加凭证;Agent 的环境变量、文件里都没有真正的密钥(见《凭证泄露与上下文窗口》、网络出口控制)
可撤销 用户随时能在一个地方看到并撤销所有授权

3.5 记录一切

每个动作(包括被拒绝的)都要记录:时间、动作、参数、谁批准的。这既是事后追查的依据,也是发现异常的信号源:Agent 突然尝试大量被拒绝的动作,很可能已经被注入。


总结

层次 要点
原则 默认只读;按风险分级审批;凭证不交给模型
分级 看能否撤销、影响范围、是否涉钱或凭证、是否对外
审批 显示完整参数而非摘要;避免确认疲劳
凭证 短期、窄范围、代理注入、可撤销;记录一切