跳到主内容

智能体代你操作时权限怎么收:作用域令牌、最小权限与高危动作二次确认

100%
智能体代你操作时权限怎么收:作用域令牌、最小权限与高危动作二次确认

结论先说:给智能体权限的正确姿势不是「给它一个高权限账号然后祈祷它别乱来」,而是把权限收紧在任务作用域里——按次授权、按资源限定、高危动作强制人工确认。权限设计的目标不是让它什么都做不了,而是让它出事故时损失可控。

一、为什么「万能钥匙」一定出事

把智能体接进业务系统时,最常见的做法是复用一个服务账号,把能想到的权限全开上。这在 demo 阶段没问题,一旦进入真实环境就会暴露三个缺陷:

  • 爆炸半径不可控:一次误判可能直接作用于全量数据,而不是当前任务涉及的那几条记录。
  • 无法归因:所有操作都来自同一个账号,事后分不清是模型主动行为还是被人诱导。
  • 无法撤回:长期有效的凭据一旦泄露,只能整体轮换,影响面远大于单个任务。

Anthropic 在 Agent SDK 的权限文档里把这个问题拆得很细:权限判定不是一次性开关,而是一条有明确顺序的判定链。理解这条链,是设计作用域的基础。

二、三层收口:身份、作用域、动作

层级要回答的问题典型手段
身份这次操作代表谁?用户级令牌、服务身份、审计主体标识
作用域能碰哪些资源?命名空间限定、行级过滤、目录边界、只读模式
动作允许什么操作?高危动作怎么拦?允许/拒绝规则、二次确认、自动批准白名单

三层要一起生效。只做身份不做作用域,等于给正确的人一把万能钥匙;只做作用域不做动作分级,删除和读取会被同等对待。

三、权限判定的执行顺序

Claude Agent SDK 给出的判定顺序是六步,前面的步骤可以提前终结判定:

  1. Hooks:最先执行,可以直接拒绝,也可以放行——但放行不会跳过后面的 deny 和 ask 规则,它们照常评估。
  2. 拒绝规则:来自 disallowed_tools 和 settings.json 。即使在 bypassPermissions 模式下,命中拒绝规则也会被拦截。
  3. 询问规则:来自 settings.json 的 ask 规则。命中后落到 canUseTool 回调等待确认,同样不受 bypassPermissions 影响。
  4. 权限模式:bypassPermissions(除关键路径的 rm/rmdir 外全部放行)、 acceptEdits(自动批准文件类操作)、 plan 模式(文件编辑与 shell 写入一律走回调,规划阶段无法自动批准写操作)等。
  5. 允许规则:来自 allowed_tools 和 settings.json,命中即批准。
  6. canUseTool 回调:前面都没解决时调用,暂停执行直到返回决定。
两个容易踩的点:一、裸名称的拒绝规则(如 Bash)会在判定开始前就把这个工具从上下文里移除,所以只有带范围的规则(如 Bash(rm *))才在这一步被检查;二、 AskUserQuestion 、带 requiresUserInteraction 注解的 MCP 工具,即使命中允许规则也会走到回调——这是刻意设计,保证交互类工具始终有人参与。

四、高危动作:分级比禁止更实用

一刀切禁止写操作,智能体就退化成问答机器人。可行做法是按可逆性分级:

  • 可自动放行:只读查询、在当前工作目录内的读取、明确列入白名单的命令。
  • 需二次确认:删除文件、写入数据库、发送对外消息、付款与下单、修改权限配置。
  • 一律拒绝:指向关键路径的 rm / rmdir 、凭证外发、越权访问其他用户数据。

判定依据不是「这个动作危不危险」这种主观判断,而是两个客观标准:能不能撤销、影响范围是否超出当前任务。两个都踩中的,一律拒绝。


  1. 定义身份:每次运行绑定具体用户或任务 ID,不使用共享账号,保证所有操作可归因。

  2. 划资源边界:限定可访问的目录、命名空间、数据库 schema 或行级范围,超出即拒绝。

  3. 列动作白名单:先全部拒绝,再按最小必要原则逐条放开,而不是先全开再逐个堵。

  4. 标记高危动作:把不可撤销或影响范围外溢的动作单独列出,强制走人工确认回调。

  5. 接入审计与回滚:记录每次工具调用的主体、参数与结果,并为写操作准备补偿动作。

五、一份可抄的规则配置

{
  "permissions": {
    "allow": [
      "Read",
      "Bash(git status:*)",
      "Bash(git diff:*)",
      "Bash(npm test:*)"
    ],
    "deny": [
      "Bash(rm:*)",
      "Bash(curl:*)",
      "Write(.env)"
    ],
    "ask": [
      "Bash(git push:*)",
      "mcp__prod-db__*"
    ]
  }
}

这份配置体现的是同一个原则:默认拒绝、按范围授权、不可撤销的单独隔离。Read 与只读命令自动放行;删除、网络请求、敏感文件写入直接拒绝;推送与生产库这类「能放行但代价高」的动作走确认。

需要提醒的是,作用域只解决「智能体自己不越界」,解决不了「被诱导越界」。提示注入可能让模型把恶意指令当成用户意图执行,这层防护需要独立的输入校验与输出净化策略,可参考MCP 场景下的提示注入防护与智能体护栏的落地实现。

六、凭据与审计

权限的作用域要靠短时效凭据落地——长期密钥一旦泄露,作用域设计全部失效。具体做法是按需签发、任务结束即失效,密钥本身集中存储且禁止明文进入对话上下文,详见MCP 服务器凭据管理。

审计侧至少记录四个字段:调用主体(代表哪个用户)、工具名、完整入参、执行结果。缺少入参的日志在事后复盘时几乎没有价值。对于会产生外部副作用的动作,还要配套幂等键与补偿逻辑,避免重试造成重复下单,相关设计见智能体写操作的幂等与补偿。

上线前自查清单
一、每次运行是否绑定可归因的身份,而非共享账号。
二、资源边界是否覆盖目录、命名空间与行级三个层面。
三、动作清单是否以「默认拒绝」为起点。
四、不可撤销动作是否全部走人工确认。
五、凭据是否短时效、集中存储、不进对话。
六、审计日志是否记录完整入参与结果。
七、是否有回滚预案,并且演练过。

最小权限会不会让智能体什么都做不了
不会。做法是白名单逐步放开:先全部拒绝,再按任务实际用到的能力逐条授权。真正的瓶颈通常是资源边界划得太粗,而不是权限给得太少。

拒绝规则和允许规则冲突时以谁为准
拒绝规则优先,而且即使在最高放行模式下也会生效。这是设计上的硬性保证,用来兜住「无论如何都不能做」的动作。

为什么有些工具即使加了允许规则还是会弹确认
因为需要用户参与的工具被刻意设计为必须走到确认回调,比如提问类工具、带有交互注解的 MCP 工具。这样能保证关键决策始终有人在环。

智能体的权限和人的权限能共用一套体系吗
可以,但要加两个约束:时效更短、范围更窄。人的长期凭据不应该被智能体复用,应当按次派生出降级后的子凭据。

怎么验证权限配置真的生效了
用越权用例做回归:尝试访问边界外资源、执行被拒动作、触发高危确认路径。权限配置不测越权,等于没配。

延伸阅读:智能体写操作的幂等与补偿
这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

997文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示