EMQX—EMQX之订阅发布ACL机制

Posted 敲代码的小小酥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EMQX—EMQX之订阅发布ACL机制相关的知识,希望对你有一定的参考价值。

1.什么是订阅发布ACL

发布订阅ACL是指对发布(publish)/订阅(subscribe)操作的权限控制。例如拒绝用户 emq-demo 向 testTopic/a主题发布消息。 EMQ X 支持通过客户端发布订阅 ACL 进行客户端权限的管理。

2.ACL插件

EMQ X 支持使用配置文件、外部主流数据库和自定义 HTTP API 作为 ACL 数据源。
连接数据源、进行访问控制功能是通过插件实现的,使用前需要启用相应的插件。
客户端订阅主题、发布消息时插件通过检查目标主题(Topic)是否在指定数据源允许/禁止列表内来实现对客户端的发布、订阅权限管理。

配置文件
内置 ACL:使用配置文件提供认证数据源,适用于变动较小的 ACL 管理。

外部数据库
mysql ACL
PostgreSQL ACL
Redis ACL
MongoDB ACL

外部数据库可以存储大量数据、动态管理 ACL,方便与外部设备管理系统集成。

HTTP ACL
HTTP ACL 能够实现复杂的 ACL 管理。

ACL 功能包含在认证鉴权插件中,更改插件配置后需要重启插件才能生效,

3.ACL规则

ACL 是允许与拒绝条件的集合,EMQ X 中使用以下元素描述 ACL 规则:

“允许(Allow) / 拒绝(Deny)” “谁(Who)” “订阅(Subscribe) / 发布(Publish)” “主题列表(Topics)”

同时具有多条 ACL 规则时,EMQ X 将按照规则排序进行合并,以 ACL 文件中的默认 ACL 为例,ACL 文件中配置了默认的 ACL 规则,规则从下至上加载:

  1. 第一条规则允许客户端发布订阅所有主题
  2. 第二条规则禁止全部客户端订阅 $SYS/# 与 # 主题
  3. 第三条规则允许 ip 地址为 127.0.0.1 的客户端发布/订阅 $SYS/# 与 # 主题,为第二条开了特例
  4. 第四条规则允许用户名为 dashboard 的客户端订阅 $SYS/# 主题,为第二条开了特例
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}. 
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}. 
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}. 
{allow, all}.

3.授权结果

任何一次 ACL 授权最终都会返回一个结果:
允许:经过检查允许客户端进行操作
禁止:经过检查禁止客户端操作
忽略(ignore):未查找到 ACL 权限信息(no match),无法显式判断结果是允许还是禁止,交由下一ACL 插件或默认 ACL 规则来判断

以上是关于EMQX—EMQX之订阅发布ACL机制的主要内容,如果未能解决你的问题,请参考以下文章

解决 EMQX 4.3 规则引擎获取消息中文乱码

EMQ etc/emqx.conf etc/acl.conf etc/plugins/*.conf配置文件

如何使用 NodeJS mqtt、emqx 订阅所有主题/消息

EMQX v4.4.5 发布:新增排他订阅及 MQTT 5.0 发布属性支持

EMQX—认证机制

基于 MySQL 的 EMQ X Auth & ACL