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 规则,规则从下至上加载:
- 第一条规则允许客户端发布订阅所有主题
- 第二条规则禁止全部客户端订阅 $SYS/# 与 # 主题
- 第三条规则允许 ip 地址为 127.0.0.1 的客户端发布/订阅 $SYS/# 与 # 主题,为第二条开了特例
- 第四条规则允许用户名为 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机制的主要内容,如果未能解决你的问题,请参考以下文章
EMQ etc/emqx.conf etc/acl.conf etc/plugins/*.conf配置文件
如何使用 NodeJS mqtt、emqx 订阅所有主题/消息