🦞 Tool Policy (Per-Sender Tool Policy) —— Agent 工具调用的"门禁系统"

"世界上有一种门禁系统,它不给每个人相同的钥匙。在 Agent 的世界里,Tool Policy 就是那把区分身份的钥匙环。"

什么是 Tool Policy?

Tool Policy(Per-Sender Tool Policy) 是 OpenClaw v2026.5.12 版本引入的关键安全机制。它允许 Operator 根据发件人身份(sender identity),为不同来源的请求配置工具调用策略,实现工具层面的最小权限原则(Least Privilege)

说白了:不是所有找你办事的人,都能拿到你家保险柜的钥匙。Tool Policy 就是那把分人分的"钥匙分发器"。

为什么 Per-Sender Tool Policy 如此重要?

在传统 Agent 架构中,工具要么全开要么全关——谁来了都能调用关键工具。但在多用户、多 Agent、多渠道的场景下,这种"一刀切"存在严重安全风险:

Per-Sender Tool Policy 完美解决了这些问题。

OpenClaw 实战:配置 Tool Policy

基本配置示例

# 在 openclaw.yaml 中配置 Tool Policy
agents:
  defaults:
    tools:
      # 默认:所有渠道可用安全工具
      policy:
        allow:
          - "web_fetch"
          - "web_search"
          - "read"
        deny: []
  
  # 特定于 channel 的策略
  channel:
    discord:
      tools:
        policy:
          # Discord 来的用户不能调用 shell 命令
          deny:
            - "exec"
            - "write"
          allow:
            - "web_fetch"
            - "read"
            - "web_search"
    
    feishu:
      tools:
        policy:
          # 飞书来的用户可以调用更多工具
          allow:
            - "web_fetch"
            - "exec"
            - "write"
            - "read"
  
  # 按 Agent 分组配置
  group:
    devops:
      tools:
        policy:
          allow:
            - "exec"
            - "write"
            - "read"
          deny:
            - "browser"

Per-Sender 精细化控制

# v2026.5.12 新特性:按发件人身份配置
agents:
  defaults:
    tools:
      # 全局默认策略
      policy:
        allow:
          - "web_fetch"
          - "web_search"
          - "read"
          - "message"
      
      # Per-sender 覆盖
      senderPolicies:
        # 管理员身份
        admin@miaoquai.com:
          allow:
            - "exec"
            - "write"
            - "delete"
            - "browser"
            - "web_fetch"
        
        # 普通用户 - 飞书
        "chat:feishu:oc_xxx":
          allow:
            - "web_fetch"
            - "read"
            - "web_search"
          deny:
            - "exec"
            - "write"
        
        # 公开频道
        "channel:discord:general":
          allow:
            - "web_fetch"
            - "web_search"
          deny:
            - "exec"
            - "write"
            - "read"
            - "message"
            - "browser"

Tool Policy 的核心原理

OpenClaw 的 Tool Policy 遵循三层匹配机制:

  1. 全局默认:最基础的允许/拒绝策略
  2. 渠道策略:按 channel(Discord、Feishu、Telegram 等)覆盖
  3. Per-Sender 策略:按具体发件人身份匹配,优先级最高

匹配算法采用 Deny-First(拒绝优先)原则:只要任意一层拒绝某工具,该工具就不可用。允许则是"并集"——所有层的允许列表合并生效。

// 策略匹配的简化逻辑
function canAccessTool(sender, toolName, policies) {
  // 1. 检查 per-sender deny
  if (policies.sender[sender]?.deny?.includes(toolName)) return false
  
  // 2. 检查 channel deny
  if (policies.channel[sender.channel]?.deny?.includes(toolName)) return false
  
  // 3. 检查 global deny
  if (policies.global.deny?.includes(toolName)) return false
  
  // 4. 检查任何一层 allow
  if (policies.sender[sender]?.allow?.includes(toolName)) return true
  if (policies.channel[sender.channel]?.allow?.includes(toolName)) return true
  if (policies.global.allow?.includes(toolName)) return true
  
  // 5. 默认拒绝(Zero-Trust)
  return false
}

实际应用场景

场景策略效果
公开 Discord 频道仅允许 web_fetch + web_search防止信息泄露和恶意操作
内部飞书群允许 exec + write + read团队可执行脚本和修改文件
个人私聊完全开放所有工具Operator 拥有全部控制权
GitHub Webhook仅允许 web_fetch + read防止自动化操作被滥用

妙趣小结

Tool Policy 就像你家里的钥匙盘——客厅钥匙给客人,书房钥匙给家人,保险柜钥匙只给自己。在 Agent 分布式协作越来越复杂的今天,没个权限门禁系统,就像把大门钥匙挂在门外,谁都能来你家搬东西。

Per-Sender 策略的引入,把 OpenClaw 的安全体系从"小区大门"升级到了"每家每户独立门禁"的级别。对于运营多用户 Agent 的同学来说,这玩意儿应该列入必配清单。

📅 更新于 2026-05-18 · 妙趣AI · 🦞