Skip to content

管理员权限

yongfeigao edited this page Jul 15, 2021 · 2 revisions

一、背景

rocketmq从4.4.0开始支持acl,但是默认没有开启,也就是任何人使用管理工具或rocketmq api就可以直接操纵线上集群

经过调查4.4.0提供的acl,发现其并不适合现有的情况,理由如下:

  1. 只希望限制一些增删改类的管理员级别的操作。
  2. 不希望对现有客户端有影响,因为现有客户端有各种版本,有的并不支持acl(不强制所有客户端升级)。

二、改进

借鉴rocketmq现有的acl机制,参考:https://cloud.tencent.com/developer/article/1458090。只实现涉及管理员的acl,任遵守rocketmq现有的acl流程:

img

但是权限校验部分的验证流程改造如下:

img

另外,管理员请求的code可以自己定义,并支持热加载,admin_broker_acl.yml配置如下:

accessKey: mqcloud
secretKey: ******
adminRequestCode: 
  - 17 # RequestCode.UPDATE_AND_CREATE_TOPIC 更新创建topic
  - 215 # RequestCode.DELETE_TOPIC_IN_BROKER 删除topic
  - 200 # RequestCode.UPDATE_AND_CREATE_SUBSCRIPTIONGROUP 更新创建订阅
  - 207 # RequestCode.DELETE_SUBSCRIPTIONGROUP 删除订阅

NameServer的admin_ns_acl.yml配置如下:

accessKey: mqcloud
secretKey: ******
adminRequestCode: 
  - 103 # RequestCode.REGISTER_BROKER broker注册(防止随便启动一个broker进行注册)
  - 104 # RequestCode.UNREGISTER_BROKER broker解除注册(防止线上broker被解除注册)
  - 205 # RequestCode.WIPE_WRITE_PERM_OF_BROKER 擦除broker写权限
  - 216 # RequestCode.DELETE_TOPIC_IN_NAMESRV 删除topic
  - 206 # RequestCode.GET_ALL_TOPIC_LIST_FROM_NAMESERVER 获取所有topic
  - 106 # RequestCode.GET_BROKER_CLUSTER_INFO 查询集群配置信息

相较于rocketmq自身的acl机制来说,仅对核心操作进行鉴权,并且NameServer加上了鉴权机制,并且不会影响rocketmq自身的acl,即如果后期需要更为精细的权限控制,可以直接开启rocketmq的acl。

三、测试

MQCloud NameServer Broker 预期表现 测试情况
不配置acl 不配置acl 不配置acl NameServer非管理员请求正常 测试通过
NameServer管理员请求正常 测试通过
broker非管理员请求正常 测试通过
broker管理员请求正常 测试通过
 broker可以正常注册 测试通过
不配置acl 不配置acl 配置acl NameServer非管理员请求正常 测试通过
NameServer管理员请求正常 测试通过
broker非管理员请求正常 测试通过
broker管理员请求不正常 测试通过
broker可以正常注册 测试通过
不配置acl 配置acl 不配置acl NameServer非管理员请求正常 测试通过
      NameServer管理员请求不正常 测试通过
      broker非管理员请求正常 未测试
      broker管理员请求不正常
      broker不可以正常注册 测试通过
不配置acl 配置acl 配置acl NameServer非管理员请求正常 测试通过
      NameServer管理员请求不正常 测试通过
      broker非管理员请求正常 测试通过
      broker管理员请求不正常 测试通过
      broker可以正常注册 测试通过
配置acl 配置acl 配置acl NameServer非管理员请求正常  测试通过
      NameServer管理员请求正常 测试通过
      broker非管理员请求正常  测试通过
      broker管理员请求正常 测试通过
      broker可以正常注册  测试通过

热加载测试:直接修改admin_acl.yml的内容和mqcloud的配置可以无需重启实现变更,测试通过,日志如下:

2019-12-18 15:59:31 INFO FileWatchService - The admin acl yml changed, reload the context
2019-12-18 15:59:31 INFO FileWatchService - Broker admin acl conf data is:{"SecretKey":"*****","AccessKey":"mqcloud"}

四、更新步骤

经过上面的测试可以知道,NameServer开启acl后,可能对broker注册造成影响,故:

  1. 开启mqcloud acl。
  2. 更新并配置broker acl。
  3. 更新并配置NameServer acl。

参照以上顺序更新,不会带来影响。