用户身份识别

为提高数据安全性,云消息队列 RocketMQ 版服务端会在客户端接入时对客户端进行身份验证,仅通过验证的客户端才能连接服务端进行消息收发。同时云消息队列 RocketMQ 版支持ACL身份识别,您可以按需为指定ACL用户赋予具体的Topic或Group的发布订阅权限,实现客户端权限的精细化控制。

使用限制

若实例未开通用户身份识别功能,则需要提交工单申请开通,申请通过后控制台才会出现访问控制的操作入口。

功能原理

云消息队列 RocketMQ 版的访问控制支持两种类型:智能身份识别和ACL身份识别,实例需要至少选择其中一种访问控制类型,用于控制客户端接入服务端时的认证方式。具体操作,请参见访问控制操作

  • 智能身份识别:实例默认的认证方式。客户端通过用户名密码进行认证,只有通过认证的客户端才能接入云消息队列 RocketMQ 版服务端进行消息收发。

  • ACL身份识别:提供更精确的权限控制。除了客户端身份进行识别外,还支持对实例下的具体Topic和Group资源进行权限控制。

  • 双认证方式:如果同时选择了两种认证方式,系统会根据客户端填写的用户名密码自动匹配。默认用户名匹配智能身份识别,自定义用户名匹配ACL身份识别。

智能身份识别认证流程(实例默认配置)

image
  • 智能身份识别方式下,VPC访问支持免身份识别,系统会根据VPC接入点智能识别用户身份,无需设置用户名密码。

  • 若使用公网访问,或关闭免身份识别功能,则客户端接入时,必须在客户端代码中设置用户名密码。

  • 系统会为每个实例初始化生成一个唯一的默认用户名密码,智能身份识别方式下,客户端中需要设置的用户名密码即为待访问实例的默认用户名密码。获取方式,请参见获取实例的默认用户名密码

  • 实例默认的用户名具备访问该实例下所有Topic和Group的消息发送和订阅权限,即客户端使用系统默认用户名密码通过认证后,可使用实例下的所有Topic和Group进行消息收发。

ACL身份识别认证流程

image
  • ACL身份识别是基于ACL用户进行权限控制,您需要自定义创建一个ACL用户,再为其授予指定资源的权限。具体操作,请参见创建ACL用户为ACL用户授权

  • 使用ACL身份识别时,客户端代码中必须设置ACL用户名密码进行身份认证。认证通过后,客户端仅对授予了相关权限的资源有操作权限。

    例如给user1授予了Topic A的消息发布权限,则客户端使用user1的用户名密码通过了身份认证后,只能向Topic A发送消息,不能订阅Topic A的消息。

  • 若ACL用户创建后未进行授权,则该用户默认没有任何消息发布和订阅的权限。

访问控制操作

  1. 登录云消息队列 RocketMQ 版控制台,在左侧导航栏单击实例列表

  2. 在顶部菜单栏选择地域,如华东1(杭州),然后在实例列表中,单击目标实例名称。

  3. 在左侧导航栏单击访问控制,然后在访问控制类型后单击编辑

  4. 在弹出的提示框中勾选智能身份识别ACL身份识别至少一种访问控制类型,然后单击确定

智能身份识别

重要
  • 仅当访问控制类型勾选智能身份识别时,控制台才显示智能身份识别相关操作入口。

  • 修改系统默认用户名密码、禁用用户名会导致使用默认用户名密码进行认证的客户端无法访问云消息队列 RocketMQ 版实例,请谨慎操作。

设置内网免身份识别

  1. 在左侧导航栏访问控制,单击智能身份识别页签。

  2. 内网免身份识别选择开启或关闭开关。

    • 内网免身份识别开启时(默认状态):通过VPC访问的客户端无需设置用户名密码,系统通过客户端访问接入点智能识别用户身份;公网访问时,客户端需要设置用户名密码以进行身份验证。

    • 内网免身份识别关闭时:VPC访问和公网访问场景下,客户端都需要设置用户名密码。

获取实例的默认用户名密码

当实例的访问控制类型为智能身份识别时,公网访问或VPC访问关闭内网免身份识别场景下,客户端消息收发代码中需要填写实例的默认用户名密码。

  1. 访问控制页面单击智能身份识别页签。

  2. 在用户名列表中查看实例的默认用户名并复制实例密码。

ACL身份识别

使用ACL身份识别进行访问控制时,您需要创建ACL用户,并且为ACL用户授予指定资源的权限,新创建的ACL用户默认没有任何资源的权限。

客户端在进行连接时,需要设置已创建并授权的ACL用户和密码,用于服务端对客户端进行身份认证,认证通过后,客户端只可以使用ACL权限范围内的资源进行消息收发。

重要
  • 仅当访问控制类型勾选ACL身份识别时,控制台才显示ACL用户ACL权限相关操作入口。

  • 禁用或删除ACL用户名会导致使用该ACL用户名密码进行认证的客户端无法访问云消息队列 RocketMQ 版实例,请谨慎操作。

单ACL用户操作

  1. 创建ACL用户

    1. 在左侧导航栏单击访问控制,然后单击ACL用户页签。

    2. ACL用户页面单击新增用户,在弹出的面板中输入相关参数完成创建。

  2. 为ACL用户授权

    1. 访问控制页面单击ACL权限页签,然后单击添加权限

    2. 添加权限面板填写相关参数,然后单击确定

    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用户操作

  1. 创建多个ACL用户,可以通过导出/导入模板的方式快速批量创建。

    1. 访问控制页面单击ACL用户页签。

    2. ACL用户页面单击导出文件导入文件

      1. 若ACL用户列表为空,需先创建一个ACL用户,然后导出模板。

      2. 在模板中填写需要批量创建的ACL用户信息,再导入模板完成批量创建。

      3. 导入模板时,可选择是否覆盖已存在的用户:

        • 覆盖关闭:若待导入的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

  2. 批量为ACL用户授权,可以通过导出/导入模板方式快速批量创建。

    1. 访问控制页面单击ACL权限页签。

    2. ACL权限页面单击导出文件导入文件

      1. 若当前实例下的ACL权限列表为空,需先创建一个ACL权限,然后导出模板。

      2. 在模板中填写需要批量创建的ACL权限信息,再通过导入模板完成批量创建。

      3. 导入模板时,可选择是否覆盖已存在的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用户名和密码,以便服务端对客户端身份进行认证。

  1. 在左侧导航栏单击访问控制,然后单击ACL用户页签。

  2. ACL用户页面的用户列表中查看已创建的ACL用户并复制密码。