名词解释
RocketMQ 的“角色”是 RocketMQ 内专有的概念,区别于腾讯云的“角色”,是用户自行在 RocketMQ 内部做权限划分的最小单位,用户可以添加多个角色并为其赋予不同集群下的生产和消费权限。每种角色都有其对应的唯一密钥,用户可以通过在客户端中添加密钥来访问 RocketMQ 进行消息的生产消费。
使用场景如下:
用户需要安全地使用 RocketMQ 进行消息的生产消费。
用户需要对不同的集群设置不同角色的生产消费权限。
例如:一个公司有 A 部门和 B 部门,A 部门的系统产生交易数据,B 部门的系统根据这些交易数据做数据分析和展示。那么遵循权限最小化原则,可以配置两种角色,A 部门角色只授予往交易系统集群中生产消息的权限,B 部门则只授予消费消息的权限。这样可以很大程度避免由于权限不清带来的数据混乱、业务脏数据等问题。
操作步骤
添加角色并授权
新建角色
1. 登录 RocketMQ 控制台。
2. 在左侧导航栏选择集群管理,选择地域后,点击要配置角色的集群的“ ID ”,进入基本信息页面。
3. 在页面上方选择集群权限页签,单击添加角色,输入角色名称,并配置好生产和消费权限。
4. 单击保存,完成角色创建。

检查权限是否生效
1. 在集群权限列表复制角色密钥。

注意:
密钥泄露很可能导致您的数据泄露,请妥善保管您的密钥。
2. 将复制的角色密钥添加到客户端的参数中。如何在客户端代码中添加密钥参数请参考 RocketMQ 的 代码示例。
以下给出一种推荐的方式。
2.1 声明
ACL_SECRET_KEY
和ACL_SECRET_ACCESS
两个字段,使用各类框架的话建议从配置文件中读取。private static final String ACL_ACCESS_KEY = "ak****";private static final String ACL_SECRET_KEY = "sk****"; /
2.2 声明一个静态函数,用于载入一个 RocketMQ Client 的
RPCHook
对象。static RPCHook getAclRPCHook() {return new AclClientRPCHook(new SessionCredentials(ACL_ACCESS_KEY, ACL_SECRET_KEY));}
2.3 在创建 RocketMQ
producer
、pushConsumer
或pullConsumer
的时候,引入 RPCHook
对象。2.4 以下为创建一个
producer
的代码示例:DefaultMQProducer producer = new DefaultMQProducer("rocketmq-mw***", "ProducerGroupName", getAclRPCHo
3. 运行配置好的客户端访问对应集群中的 Topic 资源,按照刚刚配置的权限进行生产或消费,看是否会产生没有权限的报错信息,如果没有即代表配置成功。
说明:
1. 登录 RocketMQ 控制台。
2. 在左侧导航栏选择集群管理,选择地域后,点击要配置角色的集群的“ ID ”,进入基本信息页面。
3. 在页面上方选择集群权限页签,单击添加角色,输入角色名称。5.x 专业版/铂金版集群和4.x通用集群支持根据不同的资源粒度来进行权限的细分,当前支持"集群" 和 "Topic&Group" 两种粒度的权限控制。
4. 如果选择 “集群” 粒度,选择生产和消费权限,选择单击保存,完成角色创建。
5. 如果选择 “Topic&Group” 粒度,需要单独针对 Topic 和 Group 配置生产和消费权限,如下图所示。
Topic 操作类型分为 生产 和 消费 两类。“生产消息”表示当前用户往选中 Topic 发消息的权限;“消费消息”表示当前用户消费选中 Topic 消息的权限,不勾选表示该用户无论使用任何 Group(即使在 Group 列表配置了消费权限)均无法消费选中的 Topic。
Group 操作类型分仅有 消费 选项,表示当前用户消费选中 Topic 的权限,不勾选表示该用户无论使用任何 Group(即使在 Topic 列表配置了消费权限)均无法消费选中的 Topic。
说明:
综上所述,如果要保证当前用户使用 GroupA 消费 TopicA 的消息,需要在 Topic 列表选择 TopicA,同时勾选 “消费消息”,同时在 Group 列表选择 GroupA,同时勾选 “消费消息”。

检查权限是否生效
1. 在集群权限列表复制角色密钥。

注意:
密钥泄露很可能导致您的数据泄露,请妥善保管您的密钥。
2. 将复制的角色密钥添加到客户端的参数中。如何在客户端代码中添加密钥参数请参考 RocketMQ 的 代码示例。
以下给出一种推荐的方式。
2.1 声明
ACL_SECRET_KEY
和ACL_SECRET_ACCESS
两个字段,使用各类框架的话建议从配置文件中读取。private static final String ACL_ACCESS_KEY = "****";private static final String ACL_SECRET_KEY = "****"; /
2.2 声明一个静态函数,用于载入一个 RocketMQ Client 的
RPCHook
对象。static RPCHook getAclRPCHook() {return new AclClientRPCHook(new SessionCredentials(ACL_ACCESS_KEY, ACL_SECRET_KEY));}
2.3 在创建 RocketMQ
producer
、pushConsumer
或pullConsumer
的时候,引入 RPCHook
对象。2.4 以下为创建一个
producer
的代码示例:DefaultMQProducer producer = new DefaultMQProducer("rocketmq-mw***", "ProducerGroupName", getAclRPCHo
3. 运行配置好的客户端访问对应集群中的 Topic 资源,按照刚刚配置的权限进行生产或消费,看是否会产生没有权限的报错信息,如果没有即代表配置成功。
新建角色
1. 登录 RocketMQ 控制台,点击 RocketMQ 集群的ID,进入目标集群的基础信息页面。
2. 在基础信息页面顶部选择需要 集群权限,单击添加角色进入新建角色页面。
3. 在新建角色页面,填写角色名称和说明:
角色:只支持数字 大小写字母 分隔符("_","-"),7 到 32 个字符。
说明(选填):不能超过 32 个字符。
4. 单击保存,完成当前集群命名空间的创建。

角色授权
1. 在集群权限列表复制角色密钥。

注意:
密钥泄露很可能导致您的数据泄露,请妥善保管您的密钥。
2. 将复制的角色密钥添加到客户端的参数中。如何在客户端代码中添加密钥参数请参考 RocketMQ 的 代码示例。
以下给出一种推荐的方式。
2.1 声明
ACL_SECRET_KEY
和ACL_SECRET_ACCESS
两个字段,使用各类框架的话建议从配置文件中读取。private static final String ACL_ACCESS_KEY = "eyJr****";private static final String ACL_SECRET_KEY = "****"; /
2.2 声明一个静态函数,用于载入一个 RocketMQ Client 的
RPCHook
对象。static RPCHook getAclRPCHook() {return new AclClientRPCHook(new SessionCredentials(ACL_ACCESS_KEY, ACL_SECRET_KEY));}
2.3 在创建 RocketMQ
producer
、pushConsumer
或pullConsumer
的时候,引入 RPCHook
对象。2.4 以下为创建一个
producer
的代码示例:DefaultMQProducer producer = new DefaultMQProducer("rocketmq-mw***|namespace", "ProducerGroupName", getAclRPCHo
3. 运行配置好的客户端访问对应集群中的 Topic 资源,按照刚刚配置的权限进行生产或消费,看是否会产生没有权限的报错信息,如果没有即代表配置成功。
编辑权限
1. 在集群权限列表中,找到需要编辑权限的角色,单击操作列的编辑。

2. 在编辑的弹框中,修改权限信息后,单击保存。

删除角色
注意
删除角色后,原先使用该角色进行生产或消费消息的密钥( AccessKey 和 SecretKey )将立即失效。请确保当前业务已经没有使用该角色进行消息的生产消费,否则可能会出现客户端无法生产消费而导致的异常。
1. 在集群权限列表中,找到需要删除权限的角色,单击操作列的删除。
2. 在删除的弹框中,单击删除,即可删除该角色。

导入/导出角色
您可以通过角色列表页右上角的 
按钮直接导出元数据,元数据的导出格式为 .xlsx 格式的表格文件。

如果您需要将一个集群的角色和权限导入到另一个集群内,在导出元数据后,您可以单击角色列表页右上角的 
按钮,将权限数据导入到指定的集群内。如果您的数据来源不是腾讯云的 RocketMQ,可以参考文件模板链接处找到对应的模板,进行相应的字段编辑后再导入文件。

