首页/AI/AI 应用速查/Agent 工具调用安全:最小权限

Agent 工具调用安全:最小权限

Agent 的危害面来自工具:能读文件就能外传、能调接口就能下单。防护原则是最小权限清单 + 参数强校验 + 敏感动作二次确认 + 出口限制,绝不把高危工具暴露给未经审核的模型决策。

AI 应用速查AI更新于 2026-10-13

Agent 工具调用安全是什么

工具调用把模型输出变成了真实动作,安全边界从「读」扩展到「写」。核心原则是最小权限:每个工具只给完成任务所需的最小范围,能查的不能改,能改的不能删,能删的要二次确认。权限要绑定调用者身份而不是模型会话;所有参数在后端做白名单校验,不信任模型给出的值;涉及资金、删除、对外发消息这类不可逆动作必须有二次确认或双人复核。工具返回的内容同样要当外部输入处理,防止注入把后续步骤带偏。

基本信息

最小权限每个工具只授予完成任务必需的范围
身份绑定权限随调用者身份,而非模型会话
参数校验后端白名单校验,不信任模型生成的参数
不可逆动作删除、支付、外发消息需二次确认或审批
回包处理工具返回值视为外部输入,防提示注入
审计要求记录调用者、参数、结果与时间

典型使用场景

  • 数据库操作类工具:只允许受限查询,禁止无 where 的更新与删除
  • 文件与脚本执行:沙箱内运行,限制可访问路径
  • 对外消息发送:发送前人工确认,防止误发与越权外发
  • 订单与资金动作:走审批流,模型只提交申请不直接执行
  • 检索类工具:按调用者身份过滤结果,避免越权读取

工具定义与参数校验

工具定义与参数校验
TOOLS = {
    "search_docs": {"scope": "read", "permission": "doc.read"},
    "update_ticket": {"scope": "write", "permission": "ticket.write"},
    "delete_record": {"scope": "dangerous", "permission": "record.delete"},
}

def invoke(user, name, args):
    tool = TOOLS[name]
    assert tool["permission"] in user.permissions, "越权调用"
    args = whitelist_validate(name, args)     # 参数白名单与类型校验
    if tool["scope"] == "dangerous":
        require_human_approval(user, name, args)   # 不可逆动作必须人工确认
    return run_tool(name, args)

工具风险分级

级别示例管控要求
只读文档检索、查询状态记录审计日志即可
低风险写创建草稿、写临时文件参数校验加幂等控制
高风险写修改配置、对外发消息二次确认并收紧权限范围
不可逆删除数据、支付、退款人工审批与双人复核
模型可能被文档或网页内容诱导调用工具:工具权限必须由后端强制校验,不能靠提示词约定「不要做某事」来兜底。
工具的返回内容会进入模型上下文,同样可能携带注入指令;对回包做长度限制与格式校验,能降低被利用的空间。

易错点

  • 把所有工具挂给所有会话:一次注入就能触发不该有的写操作
  • 依赖提示词约束工具行为:模型可被绕过,权限必须落在代码层
  • 危险工具无二次确认:误删与误发造成的损失不可逆
  • 参数不做白名单校验:模型构造的路径或 SQL 直接执行,注入风险极高
  • 工具调用不留审计:出事后无法还原是谁、在什么上下文触发了动作

数据来源与参考

  • OWASP LLM Top 10(LLM06 Excessive Agency / LLM08);Agent 安全实践

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌