RabbitMQ 消息队列中 VirtualHost介绍与权限管理

2019-09-09 0 By admin

一、VirtualHost

像mysql服务有数据库的概念并且可以设置用户对库和表等对象的操作权限,RabbitMQ也有类似的权限管理。
在RabbitMQ中可以虚拟消息服务器 VirtualHost,每个VirtualHost 相当于一个相对独立的RabbitMQ服务器,每个VirtualHost之间是相互隔离的。exchange、queue、message不能互通。
在 RabbitMQ 中无法通过AMQP创建 VirtualHost,可以通过 RabbitMQ 的WEB管理界面创建,也可以通过下面的命令行创建:
rabbitmqctl add_vhost [vhostname]

二、用户权限管理

2.1、新建用户

可以使用命令行形式创建新的用户,也可以通过RabbitMQ的web界面创建用户。
rabbitmqctl add_user wyt wyt

2.2、配置权限

set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
可以使用正则匹配。如’^$’表达式,不匹配任何资源。

  1. exchange和queue的declare与delete分别需要exchange和queue上的配置权限
  2. exchange的bind与unbind需要exchange的读写权限
  3. queue的bind与unbind需要queue写权限exchange的读权限 发消息(publish)需exchange的写权限
  4. 获取或清除(get、consume、purge)消息需queue的读权限

示例:我们赋予superrd在“/”下面的全部资源的配置和读写权限。
rabbitmqctl set_permissions -p / superrd ".*" ".*" ".*"
注意:”/”代表是virtual host的名称,和其他virtual host 是平级对等关系;与linux系统中的根目录不同。

2.3、配置角色

rabbitmqctl set_user_tags [user] [role]
RabbitMQ中的角色分为如下五类:none、management、policymaker、monitoring、administrator

1、none
不能访问 management plugin

2、management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。

3、policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters

4、 monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息

5、administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connections

如下示例将wyt设置成administrator角色。
rabbitmqctl set_user_tags wyt administrator