开源身份验证和权限管理
云消息队列 RabbitMQ 版支持开源RabbitMQ身份验证和权限管理方式来实现对云消息队列 RabbitMQ 版资源的管理。
使用限制
-
支持以下版本的新购实例,存量实例不支持:
-
Serverless系列:(独享)预留+弹性、(共享)预留+弹性、(共享)按累积量
-
预付费系列:铂金版、企业版
-
-
禁止默认账户guest的创建和权限管理。
-
不支持User Tags 的权限管理。控制台和OpenAPI的管理权限请参见使用RAM进行访问控制。
-
开源身份验证和权限管理方式和阿里云访问控制(RAM)两种身份验证和权限模式仅支持选择其中一种,不支持更改。
-
当Serverless系列独享实例选择开源身份验证和权限管理方式的身份验证和权限模式后,不支持降配为共享实例。
功能原理
云消息队列 RabbitMQ 版支持以Vhost为维度通过configure、write和read对实例资源(Exchange和Queue)操作权限进行细粒度控制。其中对configure、write和read的配置通过正则表达式(Regex)来实现,规则如下:
-
.*表示所有资源。 -
^$表示只匹配空字符串,覆盖所有资源并阻止用户执行任何操作。 -
'^(amq\.gen.*|amq\.default)$'表示可以访问系统资源和default Exchange。
执行操作、资源和权限的对应关系如下:
|
AMQP 0-9-1 Operation |
configure |
write |
read |
|
|
exchange.declare |
(passive=false) |
exchange |
||
|
exchange.declare |
(passive=true) |
|||
|
exchange.declare |
(with AE) |
exchange |
exchange (AE) |
exchange |
|
exchange.delete |
exchange |
|||
|
queue.declare |
(passive=false) |
queue |
||
|
queue.declare |
(passive=true) |
|||
|
queue.declare |
(with DLX) |
queue |
exchange (DLX) |
queue |
|
queue.delete |
queue |
|||
|
exchange.bind |
exchange (destination) |
exchange (source) |
||
|
exchange.unbind |
exchange (destination) |
exchange (source) |
||
|
queue.bind |
queue |
exchange |
||
|
queue.unbind |
queue |
exchange |
||
|
basic.publish |
exchange |
|||
|
basic.get |
queue |
|||
|
basic.consume |
queue |
|||
|
queue.purge |
queue |
权限认证流程主要包括两个步骤:
-
当RabbitMQ客户端与服务器建立连接并进行身份验证时,它会指定一个Vhost。此时系统将执行第一级访问控制,服务器将检查用户是否具备访问该Vhost的权限,若无权限,则拒绝连接。
-
在对Exchange和Queue进行操作时,将会执行第二级访问控制,此时会验证是否具备对该Exchange和Queue的操作权限。
安全性
在开源身份验证和权限管理方式下,云消息队列 RabbitMQ 版通过以下方案来提升网络及数据的安全性。
|
网络类型 |
方案 |
|
VPC网络 |
开源身份验证和权限管理 + 私网接入点 |
|
公网 |
开源身份验证和权限管理 + 公网接入点(详情请参见公网IP白名单) |
白名单不生效排查
若设置公网 IP 白名单后仍无法正常访问,可参考以下排查思路:
-
白名单在 AMQP 协议层生效,而非 ICMP 层。因此能 ping 通实例 IP 不代表白名单已生效;若创建 AMQP connection 时仍被拦截,请从白名单配置入手排查,而非仅通过 ping 结果判断。
-
白名单 IP 必须以网段形式设置(例如 x.x.x.x/30),不支持单 IP 或 x.x.x.x/32 格式。
-
排查时,可在控制台的白名单列表中确认已设置的 IP 是否为正确的网段格式。
操作
云消息队列 RabbitMQ 版支持在控制台实现用户创建和权限配置,详情请参见用户和权限管理。