🔐 OpenClaw Agent权限分级

世界上有一种安全感叫权限分级,Agent知道自己能做什么、不能做什么,不会越界搞事...

"删除所有数据库记录!"——客服Agent收到这条指令。如果它真的执行了,公司就完了。权限分级就是这道安全门:客服Agent只能查数据,不能删数据。

📋 功能介绍

🎯 RBAC权限体系

角色 权限范围 可执行操作
管理员 全局 所有工具、配置修改、用户管理
开发者 项目级 代码执行、调试、文件读写
运营者 业务级 数据查询、内容发布、报告生成
客服 服务级 查询、回答、转人工
访客 受限 仅查询公开信息

💡 权限控制维度

🚀 使用方法

1. 角色定义

# roles.yaml - 角色定义
roles:
  admin:
    name: 管理员
    description: 全局权限,可执行所有操作
    permissions:
      tools: "*"  # 所有工具
      data: "*"   # 所有数据
      operations: ["read", "write", "delete", "admin"]
      
  developer:
    name: 开发者
    permissions:
      tools: ["code_execute", "file_read", "file_write", "git"]
      data: ["project_*"]  # 项目数据
      operations: ["read", "write"]
      
  support:
    name: 客服
    permissions:
      tools: ["database_query", "web_search", "send_message"]
      data: ["orders", "customers", "products"]
      operations: ["read"]  # 只能读
      restrictions:
        - 不能删除数据
        - 不能修改配置
        
  visitor:
    name: 访客
    permissions:
      tools: ["web_search"]
      data: ["public_*"]
      operations: ["read"]

2. Agent角色分配

# 为Agent分配角色
agents:
  customer-service:
    name: 客服小美
    role: support  # 客服角色
    
    # 角色权限自动继承
    # 可用工具: database_query, web_search, send_message
    # 可用数据: orders, customers, products
    # 可用操作: read
    
    # 额外限制
    restrictions:
      # 不能查询其他用户数据
      data_scope: "user_id == {{current_user_id}}"
      
  code-assistant:
    name: 代码助手
    role: developer
    # 继承开发者权限

3. 敏感操作审批

# 需审批的操作
operations:
  delete_user:
    permission: admin
    approval:
      required: true
      approver: admin
      timeout: 300s  # 5分钟内审批
      auto_reject_after: true
      
  modify_config:
    permission: admin
    approval:
      required: true
      approver: ["admin", "developer"]  # 多角色可审批
      
  publish_content:
    permission: operator
    approval:
      required: false  # 默认不需审批
      escalate_on:
        - contains_sensitive_keywords
        - affects_more_than_100_users

4. 权限检查

# 权限检查配置
agents:
  safe-agent:
    security:
      # 自动权限检查
      permission_check:
        enabled: true
        mode: strict  # strict/permissive
        
      # 工具调用前检查
      check_before_tool_call: true
      
      # 数据访问前检查
      check_before_data_access: true
      
      # 权限拒绝时的行为
      on_permission_denied:
        action: reject  # reject/escalate/notify
        message: "权限不足,无法执行此操作"

✨ 最佳实践

💡 权限设计原则
⚠️ 常见风险
📝 实战权限配置
# 完整的权限配置示例
agents:
  financial-agent:
    name: 财务助手
    
    role: financial_operator
    
    permissions:
      # 可用工具
      tools:
        - database_query
        - report_generator
        - email_send
        
      # 数据范围
      data:
        tables:
          - transactions  # 可查交易记录
          - invoices      # 可查发票
        scope:
          - "date >= '2024-01-01'"  # 只能查今年数据
          
      # 操作限制
      operations:
        - read           # 可读
        - report         # 可生成报告
        # 无 write/delete
        
    # 敏感操作审批
    approvals:
      send_financial_report:
        required: true
        approver: financial_manager
        reason_required: true
        
    # 审计
    audit:
      enabled: true
      log_all_operations: true
      alert_on_sensitive_access: true

💻 代码示例

权限检查

from openclaw import Agent
from openclaw.security import RBAC

# 创建RBAC权限系统
rbac = RBAC.from_yaml("roles.yaml")

# 创建带权限的Agent
agent = Agent(
    name="customer-service",
    role="support",
    rbac=rbac
)

# 检查权限
if agent.can("database_query"):
    result = agent.execute("database_query", query="...")
else:
    print("权限不足")

# 尝试执行越权操作
try:
    agent.execute("database_delete", table="users")
except PermissionDenied as e:
    print(f"权限拒绝: {e}")

审批流程

from openclaw.security import ApprovalWorkflow

# 需审批操作
approval = ApprovalWorkflow(
    operation="delete_user",
    approvers=["admin"],
    timeout=300
)

# 请求审批
request = approval.request(
    agent="customer-service",
    reason="用户请求删除账号",
    context={"user_id": "12345"}
)

# 等待审批
status = request.wait_for_approval()

if status.approved:
    # 执行操作
    execute_delete_user("12345")
else:
    print("审批被拒绝")

权限审计

from openclaw.security import AuditLog

# 查看权限使用日志
audit = AuditLog()

# 查看Agent的操作记录
logs = audit.get_agent_logs("customer-service", days=7)

# 统计
print(logs.summary())
# {
#   "total_operations": 1234,
#   "by_tool": {
#     "database_query": 500,
#     "web_search": 300,
#     "send_message": 434
#   },
#   "denied_operations": 12,
#   "escalated_operations": 3
# }

# 检查异常操作
anomalies = audit.detect_anomalies()
# 如发现异常多的敏感访问,发出警报

动态权限

# 动态调整权限
agent.set_permission(
    tool="database_write",
    enabled=True,
    expires_in="1h"  # 临时权限,1小时后失效
)

# 条件权限
agent.add_permission_rule(
    tool="send_email",
    condition="recipient in trusted_domains"
)

# 权限继承
child_agent = agent.spawn(
    inherit_permissions=True,  # 继承父Agent权限
    additional_permissions=["file_read"]  # 额外权限
)

🔗 相关链接

📊 权限矩阵示例

操作 管理员 开发者 运营者 客服
查询数据
修改数据 需审批
删除数据 需审批
执行代码
修改配置 需审批