Bot 角色与权限

前置知识: 阅读本文前建议先了解 核心概念 中的权限模型部分,以及 资源与凭据

Bot 角色是平台管控 Bot 行为的核心机制。通过角色,你可以精确控制 Bot 能访问哪些资源、使用哪些工具、操作哪些参数范围。


概述

Monstrum 的权限设计围绕一个原则:平台强制,而非 AI 自律。权限不是”告诉 Bot 不要做什么”,而是从架构上保证 Bot 做不了未授权的事。

权限控制发生在两个层面:

  1. 工具可见性(Pre-LLM):Bot 只能看到被授权的工具。未绑定的资源及其工具对 Bot 完全不可见
  2. 参数级校验(Post-LLM):即使 Bot 调用了可见的工具,参数也必须在约束范围内

核心流程

Bot 的权限来自你配置的资源。整体配置流程为:

1. 创建资源(Resource + Credential)

2. 创建 Bot 角色,在角色中引用这些资源并设置权限

3. 将角色分配给 Bot → Bot 自动获得角色中定义的资源访问权限

你也可以跳过角色,直接在 Bot 上绑定资源(直接绑定),但角色更适合需要在多个 Bot 间复用相同权限配置的场景。


Bot 角色

Bot 角色是一组权限条目的集合。每个权限条目指定一个资源以及 Bot 在该资源上的操作权限。

创建角色

  1. 在左侧导航栏点击 Bot 角色
  2. 点击 创建 Bot 角色
  3. 填写基本信息:
    • 角色名称:如”只读运维”、“仓库管理员”
    • 描述:简要说明角色用途
    • 父角色(可选):继承另一个角色的权限

添加权限条目

角色的核心是权限条目(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 语法),* 匹配任意字符。

各资源类型的权限维度

资源类型权限维度说明
SSHhosts允许连接的主机(glob)
SSHcommands允许执行的命令(glob)
Webdomains允许抓取的域名(glob)
Web3operations允许的操作类型(read/write)
Web3recipients允许转账的地址
Web3contracts允许调用的合约
Web3functions允许的合约函数(glob)
Botbots允许调用的目标 Bot
MCPtools允许调用的工具(glob)
Agenttools允许调用的工具(glob)
Agentpaths允许的文件路径(glob)
Agentcommands允许的命令(glob)

角色继承

角色支持父子继承关系。子角色继承父角色的所有权限条目,并可以进一步收窄(不能放大)。

例如:

  • 父角色”运维”:允许 SSH 所有操作
  • 子角色”只读运维”:继承”运维”,但命令白名单限制为 cat *ls *tail *

将角色分配给 Bot

创建好角色后,将其分配给 Bot:

  1. 进入 Bot 详情页 → 资源配置 Tab
  2. Bot 角色 区域,点击 分配角色
  3. 选择要分配的角色
  4. 角色中定义的所有资源绑定自动生效

分配后,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)只读访问

管理成员

  1. 进入工作区的 成员管理 页面
  2. 邀请新成员:输入邮箱地址并选择角色
  3. 修改成员角色:在成员列表中更改
  4. 移除成员:从工作区中移除

常见用法

最小权限原则

为每个 Bot 只配置完成工作所需的最小权限:

  • SSH Bot:只允许 catlstail 命令,限制特定主机
  • Web3 Bot:只允许 balance.get(只读),不允许 transfercontract.send
  • 编排 Bot:通过委派约束限制子 Bot 的权限范围

角色复用

为常见场景创建角色模板,分配给多个 Bot:

  • “只读运维”:SSH 资源只允许读取命令
  • “仓库只读”:GitHub 资源只允许 issue.readpr.read
  • “搜索专员”:Web 资源只允许 web.search

审计权限变更

所有权限检查结果(通过/拒绝)都记录在审计日志中。在 数据中心 的日志审计 Tab 可以查看权限校验的详细记录。


常见问题

Bot 调用工具被拒绝

  1. 检查 Bot 是否绑定了对应的资源(通过角色或直接绑定)
  2. 检查权限条目中的操作是否包含该工具
  3. 检查参数约束是否覆盖了调用的参数值
  4. 在数据中心的日志审计中查看拒绝原因

分配角色后 Bot 看不到工具

  • 确认角色中的权限条目引用的资源仍然存在且凭据有效
  • 确认角色中的操作选择不为空

委派约束太严格,子 Bot 无法工作

检查委派约束与子 Bot 自身权限的交集。确保交集中包含子 Bot 完成任务所需的工具和参数范围。