41 企业级的RocketMQ集群如何进行权限机制的控制?
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了41 企业级的RocketMQ集群如何进行权限机制的控制?相关的知识,希望对你有一定的参考价值。
如果一个公司有很多技术团队,每个技术团队都会使用RocketMQ集群中的部分Topic,那么可能会有一个问题,如果订单团队使用的 Topic,被商品团队不小心写入了错误的脏数据,那就可可能会导致订单团队的Topic里的数据出错,此时该怎么办?
此时就需要在RocketMQ中引入权限功能,也就是说规定好订单团队的用户,只能使用“OrderTopic” ,然后商品团队的用户只能使用 “ProductTopic” ,不能混乱的使用别人的 Topic。
而要在RocketMQ中实现权限控制,首先需要在 broker 端放一个额外的 ACL 权限控制配置文件,里面需要规定好权限,包括什么用户对哪些Topic有什么操作权限,这样的话,每个 broker 才知道每个用户的权限。
首先在每个 Broker的配置文件里需要设置 aclEnable=true这个配置,开启权限控制。
其次,在每个Broker部署机器的 ${ROCKETMQ_HOME}/store/config 目录下,可以放一个 plain_acl.yml 的配置文件,在这里面就可以进行权限配置,如下:
# 这个参数就是全局性的白名单
# 这里定义的ip地址,都是可以访问Topic的
globalWhiteRemoteAddresses:
- 13.21.33.*
- 192.168.0.*
# 这个accounts就是说,你在这里可以定义很多账号
# 每个账号都可以在这里配置对哪些Topic具有一些操作权限
accounts:
- accessKey: OrderTeam # 这个accessKey其实就是用户名的意思,比如我们这里叫做“订单技术团队”
secretKey: 123456 # 这个secretKey其实就是这个用户名的密码1
whiteRemoteAddress: # 这个是当前这个用户名下哪些机器要加入白名单的
admin:false # admin指的是这个账号是不是管理员账号
# 这个指的是默认情况下这个账号的Topic权限和ConsumerGroup权限
defaultTopicPerm: DENY
defaultGroupPerm: SUB
# 这个就是账号具体的堆一些账号的权限
# 下面就是说当前这个账号对两个Topic,都具备PUB|SUB权限,就是发布和订阅的权限
# PUB就是发布消息的权限,SUB就是订阅消息的权限
# DENY就是拒绝你这个账号访问这个Topic
topicPerms:
- CreateOrderInformTopic=PUB|SUB
- PaySuccessInformTopic=PUB|SUB
# 下面就是对ConsumerGroup的权限,也是同理的
groupPerms:
- groupA=DENY
- groupB=PUB|SUB
- groupC=SUB
# 下面就是另外一个账号了,比如是商品技术团队的账号
- accessKey:ProductTeam
secretKey:12345678
whiteRemoteAddress: 192.168.1.*
# 如果admin设置为true,就是具备一切权限
admin: true
上面的配置中,需要注意一点,如果你的一个账号没有对某个Topic显式的指定权限,那么就是会采用默认Topic权限。
在生产者和消费者里,指定你的团队分配到的RocketMQ的账号,当你使用一个账号的时候,就只能访问你有权限的Topic。
DefaultMQProducer producer = new DefaultMQProducer(
"OrderProducerGroup",
new AclClientRPCHook(new SessionCredentials(OrderTeam,"123456"))
);
上面的代码中就是在创建Producer的时候,传入进去一个AclClientRPCHook,里面可以设置你这个Producer的账号密码,对于创建Consumer也是同理的。通过这样的方式,就可以在Broker端设置好每个账号对Topic的访问权限,然后你不同的技术团队就用不同的账号就可以了。
说明:acl功能在4.4.0版本后才有的。
以上是关于41 企业级的RocketMQ集群如何进行权限机制的控制?的主要内容,如果未能解决你的问题,请参考以下文章