Bot 角色与权限
Bot 角色是平台管控 Bot 行为的核心机制。通过角色,你可以精确控制 Bot 能访问哪些资源、使用哪些工具、操作哪些参数范围。
概述
Monstrum 的权限设计围绕一个原则:平台强制,而非 AI 自律。权限不是”告诉 Bot 不要做什么”,而是从架构上保证 Bot 做不了未授权的事。
权限控制发生在两个层面:
- 工具可见性(Pre-LLM):Bot 只能看到被授权的工具。未绑定的资源及其工具对 Bot 完全不可见
- 参数级校验(Post-LLM):即使 Bot 调用了可见的工具,参数也必须在约束范围内
核心流程
Bot 的权限来自你配置的资源。整体配置流程为:
1. 创建资源(Resource + Credential)
↓
2. 创建 Bot 角色,在角色中引用这些资源并设置权限
↓
3. 将角色分配给 Bot → Bot 自动获得角色中定义的资源访问权限
你也可以跳过角色,直接在 Bot 上绑定资源(直接绑定),但角色更适合需要在多个 Bot 间复用相同权限配置的场景。
Bot 角色
Bot 角色是一组权限条目的集合。每个权限条目指定一个资源以及 Bot 在该资源上的操作权限。
创建角色
- 在左侧导航栏点击 Bot 角色
- 点击 创建 Bot 角色
- 填写基本信息:
- 角色名称:如”只读运维”、“仓库管理员”
- 描述:简要说明角色用途
- 父角色(可选):继承另一个角色的权限
添加权限条目
角色的核心是权限条目(Permission Entry)。每个条目关联一个你已创建的资源,定义 Bot 在该资源上的操作权限。
点击 添加权限条目,配置:
| 配置项 | 说明 | 必填 |
|---|---|---|
| 选择资源 | 从你在资源管理中已创建的资源中选择 | 是 |
| 选择凭据 | 指定使用哪个凭据。不选则表示”使用该资源的所有凭据” | 否 |
| 选择操作 | 勾选允许的操作或工具。不选则表示”允许所有操作” | 否 |
| 参数约束 | 为各权限维度设置约束值(如主机白名单、命令白名单) | 否 |
一个角色可以包含多个权限条目,分别引用不同的资源。例如一个”运维”角色可以同时包含 SSH 资源和 Web 资源的权限条目。
操作选择
操作列表取决于资源类型:
- 静态工具类型(SSH、Bot、Web3、Web):展示固定操作列表,按功能分组
- 动态工具类型(MCP、Monstrum Agent):展示该资源已发现的工具列表
操作支持 glob 模式,例如:
*— 允许所有操作issue.*— 允许所有 issue 相关操作issue.read— 仅允许读取 issue
参数约束(Scope Constraints)
参数约束以”只允许 [维度名] [值列表]“的形式配置,限制 Bot 调用工具时的参数范围:
- 只允许 主机白名单
10.0.1.*、prod-web-* - 只允许 命令白名单
ls *、cat /var/log/* - 只允许 仓库白名单
org/repo-* - 只允许 域名白名单
*.github.com
值使用 glob 模式匹配(fnmatch 语法),* 匹配任意字符。
各资源类型的权限维度
| 资源类型 | 权限维度 | 说明 |
|---|---|---|
| SSH | hosts | 允许连接的主机(glob) |
| SSH | commands | 允许执行的命令(glob) |
| Web | domains | 允许抓取的域名(glob) |
| Web3 | operations | 允许的操作类型(read/write) |
| Web3 | recipients | 允许转账的地址 |
| Web3 | contracts | 允许调用的合约 |
| Web3 | functions | 允许的合约函数(glob) |
| Bot | bots | 允许调用的目标 Bot |
| MCP | tools | 允许调用的工具(glob) |
| Agent | tools | 允许调用的工具(glob) |
| Agent | paths | 允许的文件路径(glob) |
| Agent | commands | 允许的命令(glob) |
角色继承
角色支持父子继承关系。子角色继承父角色的所有权限条目,并可以进一步收窄(不能放大)。
例如:
- 父角色”运维”:允许 SSH 所有操作
- 子角色”只读运维”:继承”运维”,但命令白名单限制为
cat *、ls *、tail *
将角色分配给 Bot
创建好角色后,将其分配给 Bot:
- 进入 Bot 详情页 → 资源配置 Tab
- 在 Bot 角色 区域,点击 分配角色
- 选择要分配的角色
- 角色中定义的所有资源绑定自动生效
分配后,Bot 角色区域展示已分配的角色及其包含的资源绑定数量。
角色绑定 vs 直接绑定
Bot 的资源配置页面分为两个区域:
| 区域 | 说明 |
|---|---|
| Bot 角色 | 通过角色间接绑定的资源。修改角色即可批量更新 |
| 直接资源绑定 | 不经过角色,直接在 Bot 上绑定的资源 |
两种方式可以并存。角色适合标准化场景(多个 Bot 共享相同权限),直接绑定适合一次性的特殊配置。
资源分配概览
在 Bot 角色 页面的 资源分配概览 Tab 中,可以查看整个工作区的角色分配情况:
- 按 Bot 分组,展示每个 Bot 的所有资源绑定
- 每个绑定标注其来源(来自哪个角色)
- 支持按角色、资源筛选
委派约束(Delegate Scope)
当 Bot A 通过 Bot 资源调用 Bot B 时,可以为这次委托设置约束,限制 Bot B 在执行委托任务时的有效权限。
为什么需要委派约束
考虑这个场景:
- Bot A 是一个编排 Bot,绑定了 Bot B(运维 Bot)和 Bot C(开发 Bot)
- Bot B 有 SSH 全权限
- Bot A 委托 Bot B 执行一个运维任务
如果没有委派约束,Bot B 会使用自己的全部权限执行任务。但 Bot A 可能只希望 Bot B 在这次委托中执行特定的命令。委派约束解决的就是这个问题。
配置委派约束
在 Bot A 绑定 Bot B 的资源配置中,设置委派约束:
- 工具白名单:限制 Bot B 在委托任务中可用的工具
- 参数约束:进一步限制 Bot B 的参数范围
权限交集原则
Bot B 执行委托任务时的有效权限 = Bot A 的委派约束 ∩ Bot B 的自身权限。
这意味着:
- 委派约束只能收窄 Bot B 的权限,不能放大
- 如果 Bot A 的委派约束允许
hosts: ["*"],但 Bot B 自身只允许hosts: ["10.0.*"],那么有效范围是10.0.* - 反之亦然:如果 Bot B 允许所有主机,但 Bot A 的委派只允许
10.0.*,有效范围也是10.0.*
工作区成员权限
除了 Bot 的工具权限,Monstrum 还有工作区成员的管理权限。这是用户层面的权限,与上述 Bot 层面的权限是独立的两套体系。
成员角色
| 角色 | 权限 |
|---|---|
| 所有者(Owner) | 完全控制,包括删除工作区 |
| 管理员(Admin) | 管理 Bot、资源、成员,但不能删除工作区 |
| 成员(Member) | 使用 Bot、查看资源,不能管理配置 |
| 访客(Viewer) | 只读访问 |
管理成员
- 进入工作区的 成员管理 页面
- 邀请新成员:输入邮箱地址并选择角色
- 修改成员角色:在成员列表中更改
- 移除成员:从工作区中移除
常见用法
最小权限原则
为每个 Bot 只配置完成工作所需的最小权限:
- SSH Bot:只允许
cat、ls、tail命令,限制特定主机 - Web3 Bot:只允许
balance.get(只读),不允许transfer和contract.send - 编排 Bot:通过委派约束限制子 Bot 的权限范围
角色复用
为常见场景创建角色模板,分配给多个 Bot:
- “只读运维”:SSH 资源只允许读取命令
- “仓库只读”:GitHub 资源只允许
issue.read、pr.read - “搜索专员”:Web 资源只允许
web.search
审计权限变更
所有权限检查结果(通过/拒绝)都记录在审计日志中。在 数据中心 的日志审计 Tab 可以查看权限校验的详细记录。
常见问题
Bot 调用工具被拒绝
- 检查 Bot 是否绑定了对应的资源(通过角色或直接绑定)
- 检查权限条目中的操作是否包含该工具
- 检查参数约束是否覆盖了调用的参数值
- 在数据中心的日志审计中查看拒绝原因
分配角色后 Bot 看不到工具
- 确认角色中的权限条目引用的资源仍然存在且凭据有效
- 确认角色中的操作选择不为空
委派约束太严格,子 Bot 无法工作
检查委派约束与子 Bot 自身权限的交集。确保交集中包含子 Bot 完成任务所需的工具和参数范围。