04-工具权限审计与人类审批
核对日期:2026-05-13。
不稳定项:工具调用协议、MCP Server 生态、浏览器/电脑操作能力、Agent 身份体系、审批工作流和审计字段会持续演进;生产系统必须按目标平台重新设计权限模型。
1. 学习目标
本专题聚焦 Agent 最容易造成真实事故的地方:模型不只是回答问题,而是可以调用工具改变外部世界。
学完后你应该能做到:
- 为 AI 工具设计权限等级、参数校验、幂等性和回滚策略。
- 区分只读、草稿、写入、外部发送、资金和权限类工具。
- 设计策略层,让模型只能请求动作,不能自行越权执行。
- 设计审批卡片,让人类在足够上下文下做最终控制。
- 设计可追溯审计日志,回答谁、何时、基于什么证据、调用了什么工具、造成什么影响。
2. 工具风险分级
工具按外部影响分级,而不是按实现复杂度分级。
| 等级 | 工具类型 | 示例 | 控制 |
|---|---|---|---|
| L0 | 无工具 | 普通问答 | 输出校验 |
| L1 | 只读 | 搜索、读取知识库、查询订单 | 用户权限过滤、trace |
| L2 | 内部草稿 | 创建邮件草稿、退款草稿、工单草稿 | 参数校验、可撤销 |
| L3 | 内部写入 | 更新 CRM、修改工单状态 | 审批或强规则校验 |
| L4 | 外部副作用 | 发邮件、发消息、提交表单 | 人类审批、审计、限流 |
| L5 | 高危动作 | 付款、退款、删库、权限变更、执行代码 | 默认不暴露;专项评审 |
默认原则:能只读就不写入,能生成草稿就不直接执行。
3. 权限模型
工具权限至少由四个维度共同决定:
| 维度 | 示例 |
|---|---|
| 用户身份 | 当前用户是否有该业务权限 |
| 任务范围 | 当前任务是否需要该工具 |
| 数据范围 | 可访问哪些 tenant、项目、文档、订单 |
| 动作风险 | 是否写入、外发、资金、权限、执行代码 |
不能用“模型觉得需要”作为授权理由。模型输出只是候选动作,最终由策略层判断。
推荐调用链:
model proposes tool_call
-> schema validation
-> business validation
-> permission check
-> risk classification
-> approval if needed
-> execute with scoped credential
-> audit and rollback metadata
4. 工具 schema
合格工具 schema 不只是参数类型。
{
"name": "create_refund_draft",
"description": "Create a refund draft for human review. Does not execute refund.",
"permission_level": "L2_draft",
"side_effect": "internal_draft_only",
"requires_approval": false,
"idempotency_key": "order_id + reason_hash",
"input_schema": {
"type": "object",
"required": ["order_id", "amount", "reason", "evidence_ids"],
"properties": {
"order_id": { "type": "string" },
"amount": { "type": "number", "minimum": 0 },
"reason": { "type": "string", "maxLength": 500 },
"evidence_ids": {
"type": "array",
"items": { "type": "string" }
}
}
},
"business_rules": [
"amount <= refundable_amount",
"order_status in ['paid', 'shipped']",
"no_duplicate_refund_draft"
],
"audit_fields": ["actor", "order_id", "amount", "evidence_ids", "trace_id"]
}
工具描述不能诱导模型越权,也不能把敏感实现细节暴露给模型。
5. Scoped Credential
不要让所有工具共享一个高权限 token。
推荐策略:
- 每次工具调用使用短期凭据。
- 凭据绑定用户、tenant、工具、资源范围和过期时间。
- 写工具和读工具使用不同凭据。
- 高风险工具需要审批后才生成执行凭据。
- 凭据 ID 进入审计日志,原始密钥不进入日志。
如果工具后端无法支持细粒度授权,就不要把它直接暴露给 Agent。
6. 人类审批
需要审批的动作:
- 发邮件、发短信、对外发布。
- 资金变化、退款、付款、优惠发放。
- 删除、覆盖、批量更新。
- 权限变更、账号操作。
- 访问或导出高敏数据。
- 执行代码、命令、浏览器自动操作。
- 法律、人事、医疗、金融等高风险决策。
审批卡片必须展示:
| 字段 | 目的 |
|---|---|
| 动作 | 审批人知道系统要做什么 |
| 参数 | 能检查金额、收件人、对象 ID |
| 证据 | 能判断建议是否有依据 |
| 风险等级 | 明确是否高风险 |
| 影响范围 | 知道会影响哪些用户或系统 |
| 可撤销方式 | 判断出错后能否回滚 |
| trace id | 便于复盘 |
审批不是一句“确认吗”,而是一次有上下文的控制点。
7. 审计日志
AI 工具审计要能回放“为什么发生了这个动作”。
建议字段:
| 字段 | 说明 |
|---|---|
trace_id | 调用链 |
request_id | 请求 |
tenant_id / user_id_hash | 租户和用户 |
feature | 功能 |
model / prompt_version | 模型和 Prompt 版本 |
tool_name / tool_version | 工具 |
tool_args_hash | 参数摘要 |
evidence_ids | 证据来源 |
policy_decision | allow / deny / require_approval |
approval_id / approver | 审批 |
result_status | 成功、失败、回滚 |
risk_level | 风险等级 |
注意:审计日志本身也可能包含敏感信息,因此要做访问控制、脱敏、保留期和导出审批。
8. 工程案例
8.1 邮件发送 Agent
错误设计:
- 模型直接调用
send_email(to, subject, body)。 - 没有域名限制。
- 没有审批。
- 日志保存完整邮件正文。
改造:
- 先调用
create_email_draft。 - 外部域名发送需要审批。
- 敏感字段检测。
- 发送工具只接受
draft_id,不接受模型自由拼接正文。 - 审计记录收件人、正文 hash、审批人和 trace。
8.2 代码执行工具
错误设计:
- 模型可以生成 shell 命令并直接执行。
- 工作目录和网络权限无限制。
改造:
- 默认不暴露 shell。
- 如必须执行,使用容器沙箱。
- 限制目录、CPU、内存、网络和时间。
- 命令白名单或审批。
- 输出过滤密钥。
9. 常见反模式
| 反模式 | 表现 | 后果 | 修正 |
|---|---|---|---|
| 一个万能 token | 所有工具共用高权限 | 横向越权 | scoped credential |
| 模型决定权限 | 模型说能做就执行 | 被注入诱导 | 策略层授权 |
| 写工具无草稿 | 直接发送、退款、删除 | 不可撤销 | 草稿加审批 |
| 审批信息不足 | 只显示确认按钮 | 人无法判断 | 展示证据和影响 |
| 审计只记最终答案 | 没有工具参数和策略决策 | 无法追责 | trace 级审计 |
10. 练习
为“客服退款 Agent”设计工具权限矩阵,至少包含:
search_orderread_refund_policycreate_refund_draftapprove_refundexecute_refundsend_customer_email
每个工具标注权限等级、副作用、是否审批、是否可撤销、审计字段和拒绝条件。
11. 验收题
- 为什么模型只能提出工具调用请求,不能作为最终授权者?
- 只读工具和写入工具的风险差异是什么?
- 什么是 scoped credential?
- 合格审批卡片必须包含哪些信息?
- 工具审计日志为什么要记录证据 ID 和策略决策?
12. 延伸阅读
- OWASP Top 10 for Agentic Applications 2026: https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/
- OWASP Agentic AI Threats and Mitigations: https://genai.owasp.org/resource/agentic-ai-threats-and-mitigations/
- OWASP MCP Top 10 Project: https://owasp.org/www-project-mcp-top-10/
- MITRE ATLAS: https://atlas.mitre.org/