有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

名词解释

角色(role):TDMQ 的“角色”是 TDMQ 内专有的概念,区别于腾讯云的“角色”,是用户自行在 TDMQ 内部做权限划分的最小单位,用户可以添加多个角色并为其赋予不同命名空间下的生产和消费权限。
密钥(token):TDMQ 的“密钥”是一种鉴权工具,用户可以通过在客户端中添加密钥来访问 TDMQ 进行消息的生产消费。密钥和角色一一对应,每种角色都有其对应的唯一密钥。
TDMQ RocketMQ 版继承了这些概念,在 TDMQ RocketMQ 版中,开源 client 中定义的 ACL_ACCESS_KEY 对应 TDMQ 的密钥(token)。

使用场景

用户需要安全地使用 TDMQ 进行消息的生产消费。
用户需要对不同的命名空间设置不同角色的生产消费权限。
例如:一个公司有 A 部门和 B 部门,A 部门的系统产生交易数据,B 部门的系统根据这些交易数据做数据分析和展示。那么遵循权限最小化原则,可以配置两种角色,A 部门角色只授予往交易系统命名空间中生产消息的权限,B 部门则只授予消费消息的权限。这样可以很大程度避免由于权限不清带来的数据混乱、业务脏数据等问题。

操作步骤

新增角色

1. 登录 TDMQ 控制台,在左侧导航栏单击 角色管理,进入角色管理页面。
2. 在角色管理页面顶部选择需要设置的 RocketMQ 集群,单击新建进入新建角色页面。
3. 在新建角色页面,填写角色名称和说明:
角色:最长为32个字符,支持数字、大小写字母和分隔符("_","-")。
说明(选填):不得超过100个字符。
4. 单击保存,完成当前集群命名空间的创建。



角色授权

1. 在 TDMQ 控制台的 角色管理 中,找到新建的角色,通过以下任一种方式复制角色密钥:
方式一:密钥列复制
方式二:操作列查看并复制
单击密钥列的复制



单击操作列的查看密钥,在查看密钥弹框中单击复制图标。



注意
密钥泄露很可能导致您的数据泄露,请妥善保管您的密钥。
2. 将复制的角色密钥添加到客户端的参数中。如何在客户端代码中添加密钥参数请参考 RocketMQ 的 代码示例
以下给出一种推荐的方式。
2.1 声明ACL_SECRET_KEYACL_SECRET_ACCESS两个字段,使用各类框架的话建议从配置文件中读取。
private static final String ACL_ACCESS_KEY = "eyJr****";
private static final String ACL_SECRET_KEY = "bigdata"; //使用上图页面的角色名称即可
2.2 声明一个静态函数,用于载入一个 RocketMQ Client 的 RPCHook对象。
static RPCHook getAclRPCHook() {
return new AclClientRPCHook(new SessionCredentials(ACL_ACCESS_KEY, ACL_SECRET_KEY));
}
2.3 在创建 RocketMQ producerpushConsumerpullConsumer的时候,引入 RPCHook对象。 以下为创建一个 producer 的代码示例:
DefaultMQProducer producer = new DefaultMQProducer("rocketmq-mw***|namespace", "ProducerGroupName", getAclRPCHook());
3. 在 TDMQ RocketMQ 控制台选择之前设定了角色的集群后,切换到命名空间,选择需要配置生产消费权限的一个命名空间,单击操作列的配置权限



4. 单击添加角色,在下拉列表中找到刚刚新创建的角色,勾选上需要的权限,单击保存


5. 检查权限是否生效。 您可以运行配置好的客户端访问对应命名空间中的 Topic 资源,按照刚刚配置的权限进行生产或消费,看是否会产生没有权限的报错信息,如果没有即代表配置成功。

编辑权限

1. 在 TDMQ RocketMQ 控制台的命名空间中,找到需要配置生产消费权限的一个命名空间,单击操作列的配置权限,进入配置权限列表。
2. 在配置权限列表中,找到需要编辑权限的角色,单击操作列的编辑
3. 在编辑的弹框中,修改权限信息后,单击保存

删除权限

注意
删除权限为危险操作,请确保当前业务已经没有使用该角色进行消息的生产消费再进行此项操作,否则可能会出现客户端无法生产消费而导致的异常。
当角色还有配置在各命名空间中的权限时,不可删除。
1. 在 TDMQ RocketMQ 控制台的命名空间中,找到需要配置生产消费权限的一个命名空间,单击操作列的配置权限,进入配置权限列表。
2. 在配置权限列表中,找到需要删除权限的角色,单击操作列的删除
3. 在删除的弹框中,单击删除,即可删除该权限。