Skip to content

客户端授权

客户端通过认证后,FlowMQ 对其发布、订阅、消费等每一次操作执行授权校验,仅放行策略允许的操作。

授权采用基于策略(Policy)的模型:每条策略声明哪些主体(principals,即通过认证确立的身份)可以对哪些资源执行哪些操作,以及允许还是拒绝。显式拒绝(DENY)始终优先于允许(ALLOW)。授权能力在所有计划上均可用,授权配置与策略按项目隔离,各项目互不影响。

授权在 Dashboard 的 Authorization(授权)页面管理:开启授权、创建与管理策略。

启用授权

Authorization 页面的授权配置区设置两项,再点击保存配置

配置项说明
执行授权策略是否执行策略校验。关闭时仍可管理策略,但所有请求不经校验直接放行。默认关闭,确保开箱即用。
未匹配行为未命中任何策略的请求如何处理:拒绝未匹配请求(安全默认)或允许未匹配请求

配置即时生效并持久化,无需重启。

TIP

对未配置认证器(匿名接入)的协议,若开启了执行授权策略未匹配行为为拒绝,则没有匹配策略时所有操作都会被拒绝。此时应将未匹配行为设为允许,或显式编写一条允许匿名主体的策略。

创建策略

Authorization 页面点击添加策略进入创建向导,依次完成四步:基本信息资源操作预览

基本信息

填写策略的基本属性,并选择它对哪些主体生效。

  • 策略名称:唯一标识,用于后续查看与管理。
  • 描述:可选备注。
  • 效果:**允许(ALLOW)授予访问,或拒绝(DENY)**阻止访问。
  • 主体:选择本策略对谁生效。
    • 所有主体:适用于所有人。
    • 指定主体:按条件匹配,可组合以下维度(维度之间为“且”,留空的维度不设限):
      • 主体 ID:每行一个,支持通配符(glob)。
      • 认证器:每行一个,格式 类型:名称(如 password:builtin),用于“仅对某认证器认证的主体生效”。
      • 属性:键 + 值(值以逗号分隔)。多个属性之间为“且”,同一属性的多个值之间为“或”;属性来自密码用户或 Webhook 认证时下发。

资源

添加一个或多个资源,声明策略适用于哪些资源。每个资源由资源类型匹配模式资源模式组成。

资源类型沿用各协议自身的术语:

资源类型对应协议含义
主题(topic)MQTTMQTT 主题
流(stream)KafkaKafka 主题
队列(queue)AMQPAMQP 队列
交换机(exchange)AMQPAMQP 交换机
消费者组(consumer-group)KafkaKafka 消费组

INFO

目前授权校验在 MQTT、Kafka 的发布/订阅/消费路径上强制执行;队列、交换机、消费者组等资源类型已纳入模型,对应的策略执行将逐步完善。

匹配模式决定资源模式如何匹配请求的资源名。多数策略使用过滤器;仅当需要精确匹配资源名(+# 视为普通字符)时才选择精确

  • 过滤器(filter,默认):作为主题过滤器解释,+# 按 MQTT 通配规则展开,并支持下方占位符。对允许策略,过滤器需完整覆盖请求范围才放行;对拒绝策略,只要与请求有交集即拦截。例如:

    • 允许 + 过滤器 foo/+ 不放行订阅 foo/#foo/# 还能命中 foo/a/b,超出 foo/+ 的范围。
    • 拒绝 + 过滤器 secret/# 会拦截订阅 #:两者有交集。
  • 精确(literal):把资源模式当作普通字符串精确匹配,+# 视为字面字符。常用于精确禁止某个过宽的订阅,例如放行 foo/ 子树、同时禁止一次性订阅整棵子树:

    允许   过滤器   foo/#
    拒绝   精确     foo/#

    此时可订阅 foo/+foo/bar 等,而订阅 foo/# 被精确拦截(显式拒绝优先)。

资源模式中可使用占位符,在裁决时按当次连接展开,从而用一条策略表达“每个用户只能访问以自己命名的资源”这类规则:

占位符含义
${principal.id}主体标识(认证得到的身份 ID)
${principal.authenticator}通过认证的认证器名称
${principal.authenticatorType}认证器类型(如 passwordwebhook
${principal.attributes.<名称>}主体属性中的指定项(如 Webhook 下发的属性)
${connection.clientId}协议层客户端标识
${connection.sourceIP}客户端 IP
${connection.protocol}协议名

例如资源模式填 user/${principal.id}/#,可让每个主体只能访问以自身 ID 为前缀的资源。取不到的占位符展开为空串。

TIP

共享订阅按其底层主题过滤器授权,与普通订阅一致。

操作

选择本策略控制的操作:勾选所有操作,或选择具体操作。

操作说明
所有操作(ALL)匹配所有操作
写入(WRITE)写入 / 生产(发布、Produce)
读取(READ)读取 / 消费(订阅、Fetch)
创建(CREATE)创建资源
删除(DELETE)删除资源
查看(DESCRIBE)查看元数据
修改(ALTER)修改配置
列表(LIST)列出资源

各协议操作映射示例:MQTT 发布 → 主题 / 写入;MQTT 订阅 → 主题 / 读取;Kafka 生产 → 流 / 写入;Kafka 消费 → 流 / 读取;Kafka 创建、删除主题 → 流 / 创建、删除。

预览

预览步骤核对效果、主体、资源与操作,确认无误后点击创建策略。策略即时生效,无需重启。

决策流程

对每一次操作,FlowMQ 按如下顺序裁决:

  1. 若未开启执行授权策略,直接放行。
  2. 在匹配该主体与资源的策略中,只要存在一条拒绝(DENY),立即拒绝(显式拒绝优先)。
  3. 若存在匹配的**允许(ALLOW)**策略,则放行。
  4. 没有任何策略匹配时,按未匹配行为裁决:拒绝或放行。

管理策略

Authorization 页面的策略列表中可以查看编辑复制启用 / 禁用删除策略;每条策略均可单独启用或禁用而无需删除。授权配置与策略均按项目隔离,切换项目即查看与管理对应的规则。

跨协议资源语义

授权资源按协议独立:MQTT 使用主题,Kafka 使用,二者互不影响。跨协议互通通过主题过滤器绑定配置,不共享授权资源。