为提高数据安全性,云消息队列 RocketMQ 版服务端会在客户端接入时对客户端进行身份验证,仅通过验证的客户端才能连接服务端进行消息收发。同时云消息队列 RocketMQ 版支持ACL身份识别,您可以按需为指定ACL用户赋予具体的Topic或Group的发布订阅权限,实现客户端权限的精细化控制。
使用限制
若实例未开通用户身份识别功能,则需要提交工单申请开通,申请通过后控制台才会出现访问控制的操作入口。
功能原理
云消息队列 RocketMQ 版的访问控制支持两种类型:智能身份识别和ACL身份识别,实例需要至少选择其中一种访问控制类型,用于控制客户端接入服务端时的认证方式。具体操作,请参见访问控制操作。
智能身份识别:实例默认的认证方式。客户端通过用户名密码进行认证,只有通过认证的客户端才能接入云消息队列 RocketMQ 版服务端进行消息收发。
ACL身份识别:提供更精确的权限控制。除了客户端身份进行识别外,还支持对实例下的具体Topic和Group资源进行权限控制。
双认证方式:如果同时选择了两种认证方式,系统会根据客户端填写的用户名密码自动匹配。默认用户名匹配智能身份识别,自定义用户名匹配ACL身份识别。
智能身份识别认证流程(实例默认配置)
智能身份识别方式下,VPC访问支持免身份识别,系统会根据VPC接入点智能识别用户身份,无需设置用户名密码。
若使用公网访问,或关闭免身份识别功能,则客户端接入时,必须在客户端代码中设置用户名密码。
系统会为每个实例初始化生成一个唯一的默认用户名密码,智能身份识别方式下,客户端中需要设置的用户名密码即为待访问实例的默认用户名密码。获取方式,请参见获取实例的默认用户名密码。
实例默认的用户名具备访问该实例下所有Topic和Group的消息发送和订阅权限,即客户端使用系统默认用户名密码通过认证后,可使用实例下的所有Topic和Group进行消息收发。
ACL身份识别认证流程
访问控制操作
登录云消息队列 RocketMQ 版控制台,在左侧导航栏单击实例列表。
在顶部菜单栏选择地域,如华东1(杭州),然后在实例列表中,单击目标实例名称。
在左侧导航栏单击访问控制,然后在访问控制类型后单击编辑。
在弹出的提示框中勾选智能身份识别、ACL身份识别至少一种访问控制类型,然后单击确定。
智能身份识别
仅当访问控制类型勾选智能身份识别时,控制台才显示智能身份识别相关操作入口。
修改系统默认用户名密码、禁用用户名会导致使用默认用户名密码进行认证的客户端无法访问云消息队列 RocketMQ 版实例,请谨慎操作。
设置内网免身份识别
在左侧导航栏访问控制,单击智能身份识别页签。
在内网免身份识别选择开启或关闭开关。
内网免身份识别开启时(默认状态):通过VPC访问的客户端无需设置用户名密码,系统通过客户端访问接入点智能识别用户身份;公网访问时,客户端需要设置用户名密码以进行身份验证。
内网免身份识别关闭时:VPC访问和公网访问场景下,客户端都需要设置用户名密码。
获取实例的默认用户名密码
当实例的访问控制类型为智能身份识别时,公网访问或VPC访问关闭内网免身份识别场景下,客户端消息收发代码中需要填写实例的默认用户名密码。
在访问控制页面单击智能身份识别页签。
在用户名列表中查看实例的默认用户名并复制实例密码。
ACL身份识别
使用ACL身份识别进行访问控制时,您需要创建ACL用户,并且为ACL用户授予指定资源的权限,新创建的ACL用户默认没有任何资源的权限。
客户端在进行连接时,需要设置已创建并授权的ACL用户和密码,用于服务端对客户端进行身份认证,认证通过后,客户端只可以使用ACL权限范围内的资源进行消息收发。
仅当访问控制类型勾选ACL身份识别时,控制台才显示ACL用户和ACL权限相关操作入口。
禁用或删除ACL用户名会导致使用该ACL用户名密码进行认证的客户端无法访问云消息队列 RocketMQ 版实例,请谨慎操作。
单ACL用户操作
创建ACL用户
在左侧导航栏单击访问控制,然后单击ACL用户页签。
在ACL用户页面单击新增用户,在弹出的面板中输入相关参数完成创建。
为ACL用户授权
在访问控制页面单击ACL权限页签,然后单击添加权限。
在添加权限面板填写相关参数,然后单击确定。
ACL用户授权参数
参数
说明
示例
用户名
在下拉框中选择已创建的ACL用户,表示需要为哪个ACL用户授权。
user_mq
资源类型
TOPIC:为用户授予Topic级别权限。
GROUP:为用户授予Group资源权限。
TOPIC
资源名
指定授予权限的资源范围,根据资源类型输入Topic名称或Group名称。该参数支持以下设置方式
输入指定资源名称,表示只对该用户授予这一个Topic或Group的操作权限。
输入*表示进行全部资源匹配,表示授予该ACL用户实例下所有Topic或Group的操作权限。
输入字符加*进行后模糊匹配,将匹配上的资源的操作权限授予该ACL用户。
normal_topic
操作类型
表示需要对指定资源进行哪些操作。当资源类型为GROUP时,操作类型仅支持读取。
写入:表示被授予权限的ACL用户拥有指定Topic的消息发送权限。
读取:表示被授予权限的ACL用户拥有指定Topic或Group的消息订阅权限。
写入
IP白名单
设置允许访问资源的客户端IP地址或IP地址段,多个IP地址或地址段之间以英文分号(;)或者逗号(,)隔开。
若不设置,则表示不对客户端IP地址进行限制。
192.168.xx.xx
决策
允许:表示对上述操作类型中的权限允许执行。
拒绝:表示对上述操作类型中的权限拒绝执行。
说明当某个资源同时被授予了允许和拒绝的权限策略,则优先拒绝的策略生效。
允许
如表中示例值所示,客户端在接入服务端时,可使用ACL用户名 user_mq 及其密码进行身份认证。若客户端的IP地址为白名单中的
192.168.xx.xx
,则允许其接入并进行消息收发。该客户端接入后,只能向名为 normal_topic 的Topic中发送消息,不能操作实例下的其他Topic或Group资源。
批量ACL用户操作
创建多个ACL用户,可以通过导出/导入模板的方式快速批量创建。
在访问控制页面单击ACL用户页签。
在ACL用户页面单击导出文件或导入文件。
若ACL用户列表为空,需先创建一个ACL用户,然后导出模板。
在模板中填写需要批量创建的ACL用户信息,再导入模板完成批量创建。
导入模板时,可选择是否覆盖已存在的用户:
覆盖关闭:若待导入的ACL用户已存在,则导入失败。
覆盖开启:若待导入的ACL用户已存在,系统将更新该用户信息。
模板字段说明如下:
模板参数
说明
取值规范
Username
待创建ACL的用户名。
必须以字母开头。
只能包含字母、数字、下划线(_)和短划线(-)。
长度限制为3~64个字符。
Password
待创建ACL的用户密码。
长度限制为3~64个字符。
AccountStatus
用户名密码的可用状态。
ENABLE:可用状态
DISABLE:禁用状态
模板内容示例如下:
Username
Password
AccountStatus
user1
xxx
ENABLE
user2
xxx
DISABLE
user3
xxx
ENABLE
批量为ACL用户授权,可以通过导出/导入模板方式快速批量创建。
在访问控制页面单击ACL权限页签。
在ACL权限页面单击导出文件或导入文件。
若当前实例下的ACL权限列表为空,需先创建一个ACL权限,然后导出模板。
在模板中填写需要批量创建的ACL权限信息,再通过导入模板完成批量创建。
导入模板时,可选择是否覆盖已存在的ACL权限。系统以用户名+资源类型+资源名为依据判断是否是同一条ACL权限记录:
覆盖关闭:若待导入的ACL权限已存在,则导入失败,系统不会修改已有的ACL权限数据。
覆盖开启:若待导入的ACL权限已存在,系统将更新该ACL权限信息。
模板字段说明如下:具体参数取值规范,请参见上文ACL用户授权参数。
模板参数
说明
Username
待授权的ACL用户名。
填写的ACL用户名必须为已创建的ACL用户。
ResourceType
待授权的资源类型。
ResourceName
待授权的资源名称。
Actions
表示需要对指定资源进行哪些操作。
PUB:写入,即消息发送权限。
SUB:读取,即消息订阅权限。
PUB|SUB:同时拥有消息发送和订阅权限。仅在资源类型为Topic时生效。
SourceIps
设置允许访问资源的客户端IP地址或IP地址段
Decision
授予的权限决策。
Allow:表示允许使用相关权限。
Deny:表示拒绝使用相关权限。
模板内容示例如下:
Username
ResourceType
ResourceName
Actions
SourceIps
Decision
user1
TOPIC
topic_normal
PUB
0.0.0.0/0
Allow
user2
TOPIC
*
PUB|SUB
0.0.0.0/0
Allow
user3
GROUP
Group_a
SUB
192.168.xx.xx
Deny
获取ACL用户名密码
使用ACL身份识别进行访问控制时,不管是VPC访问还是公网访问,都需要客户端设置ACL用户名和密码,以便服务端对客户端身份进行认证。
在左侧导航栏单击访问控制,然后单击ACL用户页签。
在ACL用户页面的用户列表中查看已创建的ACL用户并复制密码。