🔐 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: "权限不足,无法执行此操作"
✨ 最佳实践
💡 权限设计原则
- 最小权限 - 只给必要权限,不多给
- 职责分离 - 关键操作需要多人审批
- 默认拒绝 - 未明确授权则拒绝
- 定期审计 - 检查权限使用情况
⚠️ 常见风险
- 权限过大,Agent越界操作
- 审批机制缺失,敏感操作无人把关
- 权限过期未清理,离职员工仍有权限
- 共享权限,多Agent共用同一权限
📝 实战权限配置
# 完整的权限配置示例
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"] # 额外权限
)
🔗 相关链接
- OpenClaw Agent安全 - 安全架构
- OpenClaw工具权限管理 - 工具级权限
- OpenClaw审批升级流程 - 审批机制
- OpenClaw Agent信任与安全 - 安全策略
- ClawHub入门指南 - 发现更多Skills
📊 权限矩阵示例
| 操作 | 管理员 | 开发者 | 运营者 | 客服 |
|---|---|---|---|---|
| 查询数据 | ✓ | ✓ | ✓ | ✓ |
| 修改数据 | ✓ | ✓ | 需审批 | ✗ |
| 删除数据 | ✓ | 需审批 | ✗ | ✗ |
| 执行代码 | ✓ | ✓ | ✗ | ✗ |
| 修改配置 | ✓ | 需审批 | ✗ | ✗ |