MQTT——EMQX学习笔记04——ACL(发布与订阅权限)

目录标题

    • 一、什么是ACL
    • 二、配置ACL的方式
    • (一)配置文件
    • (二)外部数据库
    • (三)其他
    • 三、全局权限
    • 四、内置ACL配置详情
    • (一)配置公式
    • (二)默认权限
    • (三)ACL配置文件
    • (四)acl.conf编写规则
    • (五)载入规则
    • 五、使用 HTTP API 管理 ACL 规则

一、什么是ACL

发布订阅 ACL 指对 发布 (PUBLISH)/订阅 (SUBSCRIBE) 操作的 权限控制。例如拒绝用户名为 Anna 向 主题 open/elsa/door 发布消息。

二、配置ACL的方式

(一)配置文件

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

(二)外部数据库

MySQL ACL
PostgreSQL ACL
Redis ACL
MongoDB ACL
外部数据库可以存储大量数据、动态管理 ACL,方便与外部设备管理系统集成。
通过查询数据库判断用户是否有发布与订阅的权限。

(三)其他

HTTP ACL
HTTP ACL 能够实现复杂的 ACL 管理。
ACL 功能包含在认证鉴权插件中,更改插件配置后需要重启插件才能生效。
通过java搭建一个HTTP ACL服务器,使用服务器判断是否具有收发权限。(需要通过配置文件绑定HTTP ACL服务器)

三、全局权限

默认全部用户都能收发。我们可以通过修改配置文件进行更改。

[root@iz2zedg4ylq9iqtwm11wecz etc]# pwd
/my/emqx/conf/etc
[root@iz2zedg4ylq9iqtwm11wecz etc]# ls
acl.conf  emqx.conf  plugins  ssl_dist.conf
certs     lwm2m_xml  psk.txt  vm.args
[root@iz2zedg4ylq9iqtwm11wecz etc]# vim emqx.conf 

MQTT——EMQX学习笔记04——ACL(发布与订阅权限)_第1张图片
此处我们需要修改全局配置文件中关于acl的配置,将 acl_nomatch 配置项的值改为: deny
完成配置后使用 emqx restart 重启emqx broker服务

配置ACL规则:

%% 拒绝 "所有用户" 订阅 "$SYS/#" "admin" 主题
{deny, all, subscribe, ["$SYS/#", {eq, "admin"}]}.

# 重启emqx
[root@iz2zedg4ylq9iqtwm11wecz ~]# docker restart myemqx
myemqx

**测试:**使用lihua这个用户订阅主题为admin的消息。
MQTT——EMQX学习笔记04——ACL(发布与订阅权限)_第2张图片

四、内置ACL配置详情

可以直接看**官网教程**

(一)配置公式

## Allow-Deny Who Pub-Sub Topic
"允许(Allow) / 拒绝(Deny)"  "谁(Who)"  "订阅(Subscribe) / 发布(Publish)" "主题列表(Topics)"

(二)默认权限

也就是用户在没有匹配ACL规则时,默认给他一个兜底的规则。这个兜底的规则可以是授权(allow )\拒绝(deny)

# etc/emqx.conf
## ACL 未匹配时默认授权
## Value: allow | deny
acl_nomatch = allow

(三)ACL配置文件

默认ACL的配置文件是etc/acl.conf,当然你也可以自定义

# etc/emqx.conf
acl_file = etc/acl.conf

(四)acl.conf编写规则

直接看官网:
https://docs.emqx.cn/broker/v4.3/advanced/acl-file.html#acl-conf-%E7%BC%96%E5%86%99%E8%A7%84%E5%88%99

(五)载入规则

在修改acl.conf 文件后需要重新载入规则

# 进入docker容器
[root@iz2zedg4ylq9iqtwm11wecz ~]# docker exec -it myemqx /bin/bash
# 直接执行下面这条命令即可
bash-5.0$ ./bin/emqx_ctl modules reload emqx_mod_acl_internal
Module emqx_mod_acl_internal reloaded successfully.

五、使用 HTTP API 管理 ACL 规则

使用 vs code http 发送请求,之前的文章有教程。
MQTT——EMQX学习笔记04——ACL(发布与订阅权限)_第3张图片
示例:

  • 请求
###########添加ACL规则#############
POST http://{{hostname}}:{{port}}/api/v4/acl HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
                            # 注意:这里要空一行
{
  "clientid":"mqttjs_9a5c5ba78d",
  "topic":"Topic/A",
  "action":"pub",
  "access": "allow"
}
  • 响应:
HTTP/1.1 200 OK
connection: close
content-length: 114
content-type: application/json
date: Mon, 25 Oct 2021 08:34:40 GMT
server: Cowboy

{
  "data": {
    "topic": "Topic/A",
    "result": "ok",
    "clientid": "mqttjs_9a5c5ba78d",
    "action": "pub",
    "access": "allow"
  },
  "code": 0
}

更多可以参考**官网**按照实例进行修改即可

你可能感兴趣的:(MQTT,物联网,MQTT,EMQX)