1、RocketMQ ACL
权限控制(ACL,全称access control list,俗称访问控制列表)主要为RocketMQ提供Topic资源级别的用户访问控制。
用户在使用RocketMQ权限控制时,可以在Client客户端通过 RPCHook注入AccessKey和SecretKey签名;同时,将对应的权限控制属性(包括Topic访问权限、IP白名单和AccessKey和SecretKey签名等)设置在distribution/conf/plain_acl.yml的配置文件中。
Broker端对AccessKey所拥有的权限进行校验,校验不过,抛出异常;
ACL客户端可以参考:org.apache.rocketmq.example.simple包下面的AclClient代码。
官方指南
RocketMQ_Multiple_ACL_Files_设计
ACL使用指南
2、开启ACL验证
在broker.conf文件配置aclEnable=true
aclEnable=true
在conf/plain_acl.yml配置ACL
# 设置IP白名单
globalWhiteRemoteAddresses:
- 10.10.103.*
- 192.168.0.*
# 配置用户信息
accounts:
- accessKey: RocketMQ
secretKey: 12345678
# 用户级别的IP地址白名单
whiteRemoteAddress:
# 当为true可以执行更新、删除主题或者订阅组
admin: false
# DENY拒绝、SUB订阅权限、PUB发送权限
defaultTopicPerm: DENY
defaultGroupPerm: SUB
topicPerms:
- topicA=DENY
- topicB=PUB|SUB
- topicC=SUB
groupPerms:
- groupA=DENY
- groupB=PUB|SUB
- groupC=SUB
3、权限控制的使用限制
如果ACL与高可用部署(Master/Slave架构)同时启用,那么需要在Broker Master节点的distribution/conf/plain_acl.yml配置文件中 设置全局白名单信息,即为将Slave节点的ip地址设置至Master节点plain_acl.yml配置文件的全局白名单中。
如果ACL与高可用部署(多副本Dledger架构)同时启用,由于出现节点宕机时,Dledger Group组内会自动选主,那么就需要将Dledger Group组 内所有Broker节点的plain_acl.yml配置文件的白名单设置所有Broker节点的ip地址。