扩展知识:RocketMQ 如何开启 ACL 验证
RocketMQ 在 4.4.0 版本开始支持 ACL 功能,ACL 验证的主要作用就是保证消息的安全性,实现权限控制功能,比如控制可以发送和订阅消息的群体,如某些主题只能被订阅,某些主题只有指定的IP,或者只有携带账号密码才可以订阅和发布等。
了解 ACL 配置
在 RocketMQ 的 conf 目录下有一个 plain_acl.yml 文件,打开这个文件就可以看到有如下默认配置:
globalWhiteRemoteAddresses:
- 10.10.103.*
- 192.168.0.*
accounts:
- accessKey: RocketMQ
secretKey: 12345678
whiteRemoteAddress:
admin: false
defaultTopicPerm: DENY
defaultGroupPerm: SUB
topicPerms:
- topicA=DENY
- topicB=PUB|SUB
- topicC=SUB
groupPerms:
# the group should convert to retry topic
- groupA=DENY
- groupB=PUB|SUB
- groupC=SUB
- accessKey: rocketmq2
secretKey: 12345678
whiteRemoteAddress: 192.168.1.*
# if it is admin, it could access all resources
admin: true
下面详细解释上述 plain_acl.yml 配置文件中的各项配置及其作用:
- globalWhiteRemoteAddresses
- 这是全局的白名单IP地址列表。
- 配置中的10.10.103.*和192.168.0.*表示所有以这些前缀开头的IP地址都可以访问RocketMQ服务,无需进一步的身份验证。
- 注意:这里定义的是全局白名单,意味着这些IP地址将绕过后续的账户验证,直接可以访问RocketMQ服务。
- accounts
- 这是一个账户列表,每个账户下面都定义了一系列的访问权限。
- accessKey 和 secretKey
- accessKey是账户的用户名。
- secretKey是账户的密码,与accessKey成对使用。
- whiteRemoteAddress
- 这个字段定义了账户的IP白名单。只有来自这些IP地址的客户端才能使用这个账户进行身份验证。
- 如果为空(如第一个账户),则没有IP限制。
- admin
- 如果设置为true,则该账户拥有管理员权限,可以访问所有资源。
- 如果设置为false或未设置,则账户将受到topicPerms和groupPerms中定义的权限限制。
- defaultTopicPerm 和 defaultGroupPerm
- 当某个主题或组在topicPerms或groupPerms中没有明确指定权限时,将使用这些默认值。
- 在上面的例子中,对于账户RocketMQ,如果某个主题没有在topicPerms中指定&#