RocketMQ ACL使用指南

2、ACL基本流程图


在讲解如何使用ACL之前,我们先简单看一下RocketMQ ACL的请求流程:

在这里插入图片描述

对于上述具体的实现,将在后续文章中重点讲解,本文的目的只是希望给读者一个大概的了解。

3、如何配置ACL


3.1 acl配置文件

acl默认的配置文件名:plain_acl.yml,需要放在${ROCKETMQ_HOME}/store/config目录下。下面对其配置项一一介绍。

3.1.1 globalWhiteRemoteAddresses

全局白名单,其类型为数组,即支持多个配置。其支持的配置格式如下:

表示不设置白名单,该条规则默认返回false。

  • “*”

表示全部匹配,该条规则直接返回true,将会阻断其他规则的判断,请慎重使用。

  • 192.168.0.{100,101}

多地址配置模式,ip地址的最后一组,使用{},大括号中多个ip地址,用英文逗号(,)隔开。

  • 192.168.1.100,192.168.2.100

直接使用,分隔,配置多个ip地址。

  • 192.168.*._或192.168.100-200.10-20

每个IP段使用 “_” 或"-"表示范围。

3.1.2 accounts

配置用户信息,该类型为数组类型。拥有accessKey、secretKey、whiteRemoteAddress、admin、defaultTopicPerm、defaultGroupPerm、topicPerms、groupPerms子元素。

3.1.2.1 accessKey

登录用户名,长度必须大于6个字符。

3.1.2.2 secretKey

登录密码。长度必须大于6个字符。

3.1.2.3 whiteRemoteAddress

用户级别的IP地址白名单。其类型为一个字符串,其配置规则与globalWhiteRemoteAddresses,但只能配置一条规则。

3.1.2.4 admin

boolean类型,设置是否是admin。如下权限只有admin=true时才有权限执行。

  • UPDATE_AND_CREATE_TOPIC

更新或创建主题。

  • UPDATE_BROKER_CONFIG

更新Broker配置。

  • DELETE_TOPIC_IN_BROKER

删除主题。

  • UPDATE_AND_CREATE_SUBSCRIPTIONGROUP

更新或创建订阅组信息。

  • DELETE_SUBSCRIPTIONGROUP

删除订阅组信息。

3.1.2.5 defaultTopicPerm

默认topic权限。该值默认为DENY(拒绝)。

3.1.2.6 defaultGroupPerm

默认消费组权限,该值默认为DENY(拒绝),建议值为SUB。

3.1.2.7 topicPerms

设置topic的权限。其类型为数组,其可选择值在下节介绍。

3.1.2.8 groupPerms

设置消费组的权限。其类型为数组,其可选择值在下节介绍。可以为每一消费组配置不一样的权限。

3.2 RocketMQ ACL权限可选值

  • DENY

拒绝。

  • PUB

拥有发送权限。

  • SUB

拥有订阅权限。

3.3、权限验证流程

上面定义了全局白名单、用户级别的白名单,用户级别的权限,为了更好的配置ACL权限规则,下面给出权限匹配逻辑。

在这里插入图片描述

4、使用示例


4.1 Broker端安装

首先,需要在broker.conf文件中,增加参数aclEnable=true。并拷贝distribution/conf/plain_acl.yml文件到${ROCKETMQ_HOME}/conf目录。

broker.conf的配置文件如下:

brokerClusterName = DefaultCluster

brokerName = broker-b

brokerId = 0

deleteWhen = 04

fileReservedTime = 48

brokerRole = ASYNC_MASTER

flushDiskType = ASYNC_FLUSH

listenPort=10915

storePathRootDir=E:/SH2019/tmp/rocketmq_home/rocketmq4.5MB/store

storePathCommitLog=E:/SH2019/tmp/rocketmq_home/rocketmq4.5MB/store/commitlog

namesrvAddr=127.0.0.1:9876

autoCreateTopicEnable=false

aclEnable=true

plain_acl.yml文件内容如下:

globalWhiteRemoteAddresses:

accounts:

  • accessKey: RocketMQ

secretKey: 12345678

whiteRemoteAddress:

admin: false

defaultTopicPerm: DENY

defaultGroupPerm: SUB

topicPerms:

  • TopicTest=PUB

groupPerms:

the group should convert to retry topic

  • oms_consumer_group=DENY

  • accessKey: admin

secretKey: 12345678

whiteRemoteAddress:

if it is admin, it could access all resources

admin: true

从上面的配置可知,用户RocketMQ只能发送TopicTest的消息,其他topic无权限发送;拒绝oms_consumer_group消费组的消息消费,其他消费组默认可消费。

4.2 消息发送端示例

public class AclProducer {

public static void main(String[] args) throws MQClientException, InterruptedException {

DefaultMQProducer producer = new DefaultMQProducer(“please_rename_unique_group_name”, getAclRPCHook());

producer.setNamesrvAddr(“127.0.0.1:9876”);

producer.start();

for (int i = 0; i < 1; i++) {

try {

Message msg = new Message(“TopicTest3” ,“TagA” , ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));

SendResult sendResult = producer.send(msg);

System.out.printf(“%s%n”, sendResult);

} catch (Exception e) {

e.printStackTrace();

Thread.sleep(1000);

}

}

producer.shutdown();

}

static RPCHook getAclRPCHook() {

return new AclClientRPCHook(new SessionCredentials(“rocketmq”,“12345678”));

}

}

运行效果如图所示:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值