Skip to content

访问控制列表

访问控制列表(ACL)提供了一种更细化的授权方法,它会按照自上而下的顺序进行授权检查。当一个规则匹配到当前客户端时,规则允许或拒绝的动作就会生效,后面的规则不再继续检查。

配置项

字段名数据类型必填描述
permitenum规则权限:允许:allow;拒绝:deny
actionenum指定动作:发布:publish;订阅:subscribe;发布/订阅: pubsub
topicsArray[String]主题或主题过滤器数组
usernameString用户名若输入值为 "#",表示所有用户
clientidString客户端 ID 若输入值为 "#",表示所有客户端
andArray[Map]与操作
orArray[Map]或操作

配置示例

在以下配置文件中,我们为不同的用户和主题定义了不同的访问规则,实现了灵活的授权检查机制。请以正确的格式将规则写入 nanomq_acl.conf 文件,并在 nanomq.confinclude,可参照 访问控制介绍。 示例:

创建访问控制规则

bash
rules = [
  ## 允许用户名为"dashboard" 的 MQTT 客户端通过订阅"$SYS/#"主题
  {"permit": "allow", "username": "dashboard", "action": "subscribe", "topics": ["$SYS/#"]}

  ## 拒绝"所有用户"订阅"$SYS/#" "#"主题
  {"permit": "deny", "username": "#", "action": "subscribe", "topics": ["$SYS/#", "#"]}

  ## 允许任何其他发布/订阅操作
  {"permit": "allow"}
]

其中,topic项中可以将${clientid}${username}作为占位符使用。当客户端ID为nmq_c的客户端触发检查时,t/${clientid}将精确匹配t/nmq_c主题。

在配置文件中引用

bash
acl = {include "/etc/nanomq_acl.conf"}

通过 KV 格式配置

希望使用 KV 配置格式的用户,可参考以下格式,将配置写入 nanomq_old.conf 文件,相关设置将在 NanoMQ 重启后生效。

完整的配置项列表,可参考配置说明 - v013

语法

acl.rule.<No>=<Spec>

示例

bash
## Allow MQTT client using username "dashboard"  to subscribe to "$SYS/#" topics
acl.rule.1={"permit": "allow", "username": "dashboard", "action": "subscribe", "topics": ["$SYS/#"]}

## Deny "All Users" subscribe to "$SYS/#" "#" Topics
acl.rule.2={"permit": "deny", "username": "#", "action": "subscribe", "topics": ["$SYS/#", "#"]}

## Allow any other publish/subscribe operation
acl.rule.3={"permit": "allow"}