EMQ acl 配置文件说明
最近在弄设备接入的问题,关于acl接入认证以及对应的topic subscribe、pubsub、publish 权限搞了半天也没弄好(没有开启第三方插件 类似mysql、redis等),使用emq_auth_username 插件认证
由于以前使用的时候没有开启对应的权限认证和用户名密码认证,导致后面出现以下数据安全方面的问题,后续因为项目的需要,需要将以前的设备加入到权限认证,以及新得设备兼容。以下配置需要开启 emq_auth_username 插件,是否可以和其它插件配合使用暂不清楚,理论上可行。开启方法请参考官方文档 https://developer.emqx.io/docs/emq/v3/cn/plugins.html#emqx-auth-username 推荐使用命令添加用户
使用版本 2.3.1 正式版
首先看官网的配置说明:
是否开启匿名认证 默认开启,
允许任意客户端登录: ## Allow Anonymous authentication
allow_anonymous = true
实际最简单得方法就是将这个参数设置为false,这样不接受匿名得用户连接,特别适合新的项目,只有通过认证得用户才能连接
默认访问控制(ACL)文件 EMQ X 支持基于 etc/acl.conf 文件或 MySQL、 PostgreSQL 等插件的访问控制规则。
## ACL nomatch. Enum: allow, deny
acl_nomatch = allow
## Default ACL File
acl_file = etc/acl.conf
## Enable ACL cache. Enum: on, off
enable_acl_cache = on
## Default ACL cache size
acl_cache_max_size = 32
## Default time-to-live of
cache size acl_cache_ttl = 1m
上面标黄得那个我们配置的关键,当acl规则没有匹配到的时候就会找的这个参数,如果为true,则会通过验证,为false就会不通过验证
这是官方的说明
下面是真正的配置文件
%% 允许'dashboard'用户订阅 '$SYS/#'
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.
%% 允许本机用户发布订阅全部主题
{allow, {ipaddr, "127.0.0.1"}, pubsub, ["$SYS/#", "#"]}.
%% 拒绝用户订阅'$SYS#'与'#'主题
{deny, all, subscribe, ["$SYS/#", {eq, "#"}]}.
%% 上述规则无匹配,允许
{allow, all}.
以上需要注意几个点
1、注释方式,推荐使用 %%,(不知道是不是我写的有毛病还是什么原因, # 和 ## 注释没有用) ,
2、每个规则后面的 . 不要忘了
3、subscribe 和pubsub和配合使用
我的配置
业务需求:OPCloud 用户能订阅 +/out,+/Realtime,+/History,$SYS/# 主题,能向+/in主题推送数据,其它用户可以向 +/out,+/Realtime,+/History 推送数据,能订阅 +/in 数据