-
Notifications
You must be signed in to change notification settings - Fork 273
管理员权限
yongfeigao edited this page Jul 15, 2021
·
2 revisions
rocketmq从4.4.0开始支持acl,但是默认没有开启,也就是任何人使用管理工具或rocketmq api就可以直接操纵线上集群。
经过调查4.4.0提供的acl,发现其并不适合现有的情况,理由如下:
- 只希望限制一些增删改类的管理员级别的操作。
- 不希望对现有客户端有影响,因为现有客户端有各种版本,有的并不支持acl(不强制所有客户端升级)。
借鉴rocketmq现有的acl机制,参考:https://cloud.tencent.com/developer/article/1458090。只实现涉及管理员的acl,任遵守rocketmq现有的acl流程:
但是权限校验部分的验证流程改造如下:
另外,管理员请求的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不可以正常注册 | 测试通过 | |||
不配置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注册造成影响,故:
- 开启mqcloud acl。
- 更新并配置broker acl。
- 更新并配置NameServer acl。
参照以上顺序更新,不会带来影响。