扩展知识:RocketMQ 如何开启 ACL 验证

devtools/2024/10/18 12:32:49/

扩展知识:RocketMQ 如何开启 ACL 验证

RocketMQ 在 4.4.0 版本开始支持 ACL 功能,ACL 验证的主要作用就是保证消息的安全性,实现权限控制功能,比如控制可以发送和订阅消息的群体,如某些主题只能被订阅,某些主题只有指定的IP,或者只有携带账号密码才可以订阅和发布等。

了解 ACL 配置

在 RocketMQ 的 conf 目录下有一个 plain_acl.yml 文件,打开这个文件就可以看到有如下默认配置:

globalWhiteRemoteAddresses:
- 10.10.103.*
- 192.168.0.*accounts:
- accessKey: RocketMQsecretKey: 12345678whiteRemoteAddress:admin: falsedefaultTopicPerm: DENYdefaultGroupPerm: SUBtopicPerms:- topicA=DENY- topicB=PUB|SUB- topicC=SUBgroupPerms:# the group should convert to retry topic- groupA=DENY- groupB=PUB|SUB- groupC=SUB- accessKey: rocketmq2secretKey: 12345678whiteRemoteAddress: 192.168.1.*# if it is admin, it could access all resourcesadmin: true

下面详细解释上述 plain_acl.yml 配置文件中的各项配置及其作用:

  1. globalWhiteRemoteAddresses
    • 这是全局的白名单IP地址列表。
    • 配置中的10.10.103.*和192.168.0.*表示所有以这些前缀开头的IP地址都可以访问RocketMQ服务,无需进一步的身份验证。
    • 注意:这里定义的是全局白名单,意味着这些IP地址将绕过后续的账户验证,直接可以访问RocketMQ服务。
  2. accounts
    • 这是一个账户列表,每个账户下面都定义了一系列的访问权限。
    • accessKey 和 secretKey
      • accessKey是账户的用户名。
      • secretKey是账户的密码,与accessKey成对使用。
    • whiteRemoteAddress
      • 这个字段定义了账户的IP白名单。只有来自这些IP地址的客户端才能使用这个账户进行身份验证。
      • 如果为空(如第一个账户),则没有IP限制。
    • admin
      • 如果设置为true,则该账户拥有管理员权限,可以访问所有资源。
      • 如果设置为false或未设置,则账户将受到topicPerms和groupPerms中定义的权限限制。
    • defaultTopicPerm 和 defaultGroupPerm
      • 当某个主题或组在topicPerms或groupPerms中没有明确指定权限时,将使用这些默认值。
      • 在上面的例子中,对于账户RocketMQ,如果某个主题没有在topicPerms中指定,那么默认是DENY(拒绝访问)。
      • 同样,对于组也是这样的逻辑。
    • topicPerms
      • 这个字段定义了账户对各个主题的访问权限。
      • 权限可以是PUB(发布)、SUB(订阅)或DENY(拒绝)。
      • 可以使用|来组合多个权限,如PUB|SUB表示同时具有发布和订阅权限。
      • 在上面的例子中,账户RocketMQ对topicA有DENY权限(即拒绝访问),对topicB有发布和订阅权限,对topicC只有订阅权限。
    • groupPerms
      • 这个字段定义了账户对各个消费者组的访问权限。
      • 权限与topicPerms中的类似。
      • 在上面的例子中,账户RocketMQ对groupA有DENY权限,对groupB有发布和订阅权限,对groupC只有订阅权限。但请注意,在RocketMQ中,消费者组通常只涉及订阅操作,所以发布权限可能在这里没有实际意义。

对于第二个账户rocketmq2,由于设置了admin: true,所以它将拥有对所有资源和主题的访问权限,无论是否在topicPerms或groupPerms中明确指定了权限。同时,它的IP白名单被限制为192.168.1.*。

如何开启 ACL

开启 ACL 只需要在 broker.conf 增加如下配置:aclEnable=true # 打开acl验证

如何使用

java">@Test
void producer() throws Exception{// 1.创建生产者,并配置 aclRPCHook acl = new AclClientRPCHook(new SessionCredentials("rocketmq","12345678"));DefaultMQProducer defaultMQProducer = new DefaultMQProducer("test-producer-group", acl);// 2.连接 name serverdefaultMQProducer.setNamesrvAddr("localhost:9876");// 3.启动生产者defaultMQProducer.start();// 4.创建消息并设置主题和消息体Message message = new Message("test-topic", "测试消息".getBytes());// 5.同步发送消息for (int i = 0; i < 3; i++) {System.out.println("开始发送第"+i+"条消息");SendResult send = defaultMQProducer.send(message);// 等待发送结果才能继续向下执行......System.out.println("第"+i+"条消息发送状态:" + send.getSendStatus());}// 等待发送结果才能继续向下执行......System.out.println("发送消息状态:" + send.getSendStatus());System.out.println("继续下面业务逻辑...");// 6.关闭生产者 defaultMQProducer.shutdown();
}
java">@Test
void consumer() throws Exception{// 1.创建 Push 消费,并设置组名和aclRPCHook acl = new AclClientRPCHook(new SessionCredentials("rocketmq","12345678"));DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(acl);consumer.setConsumerGroup("test-consumer-group");// 2.连接 name serverconsumer.setNamesrvAddr("sitrmqsrv.axa.cn:9876");// 3.订阅主题 "*" 表示订阅这个主题的全部消息consumer.subscribe("test-topic","*");// 4.同步监听消息consumer.registerMessageListener(new MessageListenerOrderly() {@Overridepublic ConsumeOrderlyStatus consumeMessage(List<MessageExt> list, ConsumeOrderlyContext consumeOrderlyContext) {MessageExt messageExt = list.get(0);System.out.println("收到的消息内容:" + new String(messageExt.getBody()));return ConsumeOrderlyStatus.SUCCESS;}});// 5.启动消费者consumer.start();// 挂在jvmSystem.in.read();
}

如果使用的是 SpringBoot 集成 RocketMQ 可以加上如下配置:

rocketmq:  name-server: 127.0.0.1:9876  # RocketMQ NameServer地址  producer:  group: my-producer-group   # 生产者组名  access-key: RocketMQ       # 生产者使用的accessKey  secret-key: 12345678       # 生产者使用的secretKey  consumer:  group: my-consumer-group   # 消费者组名  access-key: RocketMQ       # 消费者使用的accessKey(可以与生产者相同或不同)  secret-key: 12345678       # 消费者使用的secretKey(可以与生产者相同或不同)

http://www.ppmy.cn/devtools/48235.html

相关文章

【机器学习】机器学习引领AI:重塑人类社会的新纪元

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀机器学习引领AI &#x1f4d2;1. 引言&#x1f4d5;2. 人工智能&#xff08;AI&#xff09;&#x1f308;人工智能的发展&#x1f31e;应用领…

无码高清?Stable DIffusion教程 | 如何利用 Stable Diffusion webui 将图片变得更清晰?全方位对比4种放大方法!

大家好&#xff0c;我是大师兄 1、引言 “高分放大”&#xff08;有时候也叫“超分放大”或“高清修复”&#xff09;描述了在确保图像清晰度的前提下提升图片分辨率的过程。例如&#xff0c;将一张512 x 512的图片放大四倍&#xff0c;得到的就是2048 x 2048分辨率的图片&am…

为什么要选择AWS?AWS的优势有哪些?

亚马逊云服务器&#xff08;Amazon Web Services&#xff0c;AWS&#xff09;是全球领先的云计算服务提供商之一&#xff0c;其提供的云服务器是在全球范围内可用的弹性计算服务。对于很多用户来说&#xff0c;他们可能会担心亚马逊云服务器是否会对服务器的使用进行限制。以下…

【Docker学习】docker login/logout

docker login和docker logout是两个相反的操作&#xff0c;分别是登入/登出注册表&#xff08;镜像仓库&#xff09;。我们一般说的公共镜像仓库&#xff08;docker hub&#xff09;是不需要登入的&#xff0c;但私有的镜像仓库通常是需要登入&#xff08;安全考虑&#xff09;…

IIS漏洞

IIS7.5解析漏洞 安装IIS7.5 安装完成之后直接访问浏览器&#xff1a; 安装phpstudy for IIS 安装这个的目的是方便&#xff0c;不用自己去配置 解压开傻瓜式安装即可。然后查看探针&#xff1a; 漏洞原理 IIS7/7.5在Fast-CGI运行模式下,在一个文件路径(/shell.jpg)后面加上/…

Building Systems with the ChatGPT API

目录 提问范式与token 评估输入--分类 检查输入--审核 审核 Prompt注入 使用恰当的分隔符 进行监督分类 处理输入--思维链推理 思维链提示设计 内心独白 处理输入--链式 提取产品和类别 检索详细信息 生成查询答案 检查结果 搭建一个带评估的端到端问答系统 提…

【网络安全的神秘世界】web应用程序安全与风险

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 第一章&#xff1a;web应用程序安全与风险 web攻击基础知识 1、什么是web应用攻击 web攻击的本质&#xff0c;就是通过http协议篡改应用程序&#xff0…

通过搭建 24 点小游戏应用实战,带你了解 AppBuilder 的技术原理

本文将通过一个 24 点小游戏的案例&#xff0c;详细介绍百度智能云千帆 AppBuilder 的基本技术原理和使用方法&#xff0c;帮助读者快速掌握 AI 原生应用的开发流程。 1 三步构建 AI 原生应用方法论 AI 原生应用与传统应用的最大区别是交互形态彻底的拟人化&#xff0c;通过…