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集群如何进行权限机制的控制?的主要内容,如果未能解决你的问题,请参考以下文章

RocketMQ企业级部署方案

RocketMQ:消息ACK机制源码解析

一文带你理解 RocketMQ 广播模式实现机制

rocketmq各节点间的关系

一文带你理解 RocketMQ 广播模式实现机制

17 Rocketmq集群双主双从同步搭建