最小权限
最小权限把智能体的可用能力限定在当前任务所需的动作、资源和时间内,降低误操作可能造成的影响。
理解与应用
最小权限是一项系统设计原则:一个身份只获得完成当前任务必需的权限,超出范围的请求默认拒绝。对于智能体,权限不仅区分“能读”和“能写”,还要区分读谁的记录、改哪个字段、能持续多久。模型能够生成某个工具调用,并不表示系统应当执行它。
用户只问“R-204 为什么被退回”,报销助手需要读取这张单据的状态和退回说明,不需要修改金额、查看全公司报销记录或批准付款。若工具一开始就给它管理员权限,任何参数错误或提示注入都可能触及远超本任务的资源。限制到这张单据的只读能力后,即使模型提出修改动作,服务端也可以拒绝。
真正的边界在执行层。身份来自可信会话,资源归属由服务端核对,每次请求都要对应当前授权,不能只在界面上隐藏按钮。列表、导出和缓存也需遵守同样规则,否则单条读取受限,批量接口却可能暴露同一批信息。任务结束或授权撤销后,后续调用应及时失效。这样做不会让模型不再犯错,但能把错误限制在较小范围内,也使日志能够说明谁基于什么任务访问了什么。
动手试一试:让动作和具体报销单共同限定权限
本地权限表只允许一个明确组合,并展示撤销后再次请求被拒绝。真实系统还需要可信身份、租户边界和原子化策略检查,不能接受调用者自行填写身份就代表那个人。
将代码保存为 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 原创讲解与教学示例。参考资料用于核对技术定义;核验日不代表资料的发布日期。
- OWASP:Authorization Cheat Sheet ↗
核对最小权限、默认拒绝及逐请求校验原则;教学策略表不替代真实服务端授权系统。 · 核验:2026-10-10