最小权限

最小权限把智能体的可用能力限定在当前任务所需的动作、资源和时间内,降低误操作可能造成的影响。

返回概念图谱 →

理解与应用

最小权限是一项系统设计原则:一个身份只获得完成当前任务必需的权限,超出范围的请求默认拒绝。对于智能体,权限不仅区分“能读”和“能写”,还要区分读谁的记录、改哪个字段、能持续多久。模型能够生成某个工具调用,并不表示系统应当执行它。

用户只问“R-204 为什么被退回”,报销助手需要读取这张单据的状态和退回说明,不需要修改金额、查看全公司报销记录或批准付款。若工具一开始就给它管理员权限,任何参数错误或提示注入都可能触及远超本任务的资源。限制到这张单据的只读能力后,即使模型提出修改动作,服务端也可以拒绝。

真正的边界在执行层。身份来自可信会话,资源归属由服务端核对,每次请求都要对应当前授权,不能只在界面上隐藏按钮。列表、导出和缓存也需遵守同样规则,否则单条读取受限,批量接口却可能暴露同一批信息。任务结束或授权撤销后,后续调用应及时失效。这样做不会让模型不再犯错,但能把错误限制在较小范围内,也使日志能够说明谁基于什么任务访问了什么。

关系速览
最小权限约束 →工具(Tools)

每个工具的能力范围应按任务缩小,而不是继承运行进程的所有权限。

最小权限约束 →模型上下文协议(MCP)

接入 MCP 后仍应限制工具、资源、用户身份和授权范围,协议不替代授权策略。

最小权限约束 →提示注入

不可信指令即使误导模型,最小权限仍可减少其可造成的损害。

最小权限约束 →上下文构建器

构建提示时只取任务必要的数据,避免把无关敏感记录传给模型。

动手试一试:让动作和具体报销单共同限定权限

本地权限表只允许一个明确组合,并展示撤销后再次请求被拒绝。真实系统还需要可信身份、租户边界和原子化策略检查,不能接受调用者自行填写身份就代表那个人。

将代码保存为 example.py,使用 Python 3.10+ 运行 python3 example.py。仅使用标准库,无需密钥,不会调用外部模型。

Python 代码

grants = {("assistant-1", "read", "R-204")}
def allowed(actor, action, record):
    return (actor, action, record) in grants
print("读取本单:", allowed("assistant-1", "read", "R-204"))
print("修改本单:", allowed("assistant-1", "write", "R-204"))
print("读取另一单:", allowed("assistant-1", "read", "R-205"))
grants.clear()
print("撤销后再读:", allowed("assistant-1", "read", "R-204"))

运行结果

读取本单: True
修改本单: False
读取另一单: False
撤销后再读: False

常见误区

  • 前端不显示按钮并不能阻止直接调用接口,授权必须在服务端执行。
  • 文件名相似或路径带有用户名,不能代替真实的所有权与租户检查。
  • 单条、列表、导出与缓存如果使用不同权限规则,会留下绕行路径。

前置与延伸

建议先读

相关概念

参考与版本

Apollo 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。