RocketMQProxy架构ACL动态授权

一、做的是什么

将mq让第三方作为接收端接入,第三方在在你这里创建topic,然后订阅,接收你的消息

二、难点

1、使用proxy代理架构

  • 是什么
    在nameServer和broker架构中增加一个proxy,用来对接接收端和发送端,在转发到各个broker
  • 为什么要用这个东西
    rocketmq5.0之前使用的是remoting协议,nameserver会将各个broker的地址同步给接收端,接收端再直连各个broker。现在接收端是第三方,使用这种模式就需要暴露很多个端口(多个broker)。
    5.0之后增加了proxy节点,只需要暴露一个端口即可(proxy端口),增加安全性
  • 怎么用
    不开启acl(鉴权)的话,增加一个proxy项目,启动时使用-n指定集群的nameServer就可以对外代理

2、动态授权

  • 是什么
    rocketmq官方自带acl系统作为鉴权方式,通过修改配置文件增加accessKey和secretKey作为鉴权的账号密码,还可以细化到不同group不同topic来规定不同权限
  • 为什么要用这个东西
    因为需要让第三方动态接入,所以需要加上鉴权,不然存在较大的安全风险
  • 怎么用
    在代码中可以使用rocketmq官方提供的MQAdminStartup工具类执行mqadmin命令修改rocketmq服务端的配置文件
    rocketMQ如何鉴权
    mqadmin命令

注意:
1、由于使用了proxy架构,接收端进行订阅时是通过proxy进行转发的,目前5.0.7版本proxy并没有转发鉴权的头部字段,所以鉴权只能放在proxy
2、使用MQAdminStartup无法修改proxy的配置文件,因此修改配置文件的动作只能放在broker,然后让proxy和broker的配置文件指定为同一个,进而达到修改proxy配置文件的目的
3、broker没有开启acl无法修改配置文件,因此broker也需要开启acl
4、broker开启acl后proxy需要在rmq-proxy.json配置文件中增加"enableAclRpcHookForClusterMode":true,字段,开启内部鉴权模式,否则proxy无法访问各个broker,tools配置文件中需要增加管理员ak和sk作为内部鉴权依据
5、MQAdminStartup工具类每次启动都会建立,断开一次链接,而且会初始化logback日志系统(影响系统原本的logback配置),并不符合日常的系统使用习惯,最好根据具体业务定制
6、proxy架构5.0.7版本并不支持自动创建topic(配置了也没用),因此topic需要手动创建,使用remoting协议则会有第一个消息后十秒左右的延迟限制,手动创建可解决
7、修改acl配置单个accessKey内不支持增量修改,但是也并不是全量修改,例如,原先权限为groupA=PUB,topicA=PUB,需要修改为groupA=SUB,那么你的mqadmin命令如果只写updateAclConfig -a xxx -b xxx -g groupA=SUB的话(没有-t参数)是无法删掉topicA=PUB的权限的,执行结果是groupA=SUB,topicA=PUB,我的解决方案是使用一个占位符,命令如下updateAclConfig -a xxx -b xxx -g groupA=SUB -t placeHoldingTopic=DENY,运行结果groupA=SUB,placeHoldingTopic=DENY,成功删掉TopicA的权限,当然也可以直接将TopicA置为DENY

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值