RabbitMQ 的权限角色

  1. none: 不能登录管理控制台(启用management plugin的情况下)
  2. 普通管理者(management):仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
    • 用户可以通过AMQP做的任何事外加:
    • 列出自己可以通过AMQP登入的virtual hosts
    • 查看自己的virtual hosts中的queues, exchanges 和 bindings
    • 查看和关闭自己的channels 和 connections
    • 查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动
  3. 策略制定者(policymaker):可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。
    • management的权限外加:
    • 查看、创建和删除自己的virtual hosts所属的policies和parameters
  4. 监控者(monitoring):可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息。
    • management的权限外加:
    • 列出所有virtual hosts,包括他们不能登录的virtual hosts
    • 查看其他用户的connections和channels
    • 查看节点级别的数据如clustering和memory使用情况
    • 查看真正的关于所有virtual hosts的全局的统计信息
  5. 超级管理员(administrator):可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
    • policymaker和monitoring的权限外加:
    • 创建和删除virtual hosts
    • 查看、创建和删除users
    • 查看创建和删除permissions
    • 关闭其他用户的connections

RabbitMQ 的用户管理

  1. 新建用户:rabbitmqctl add_user {user_name} {user_passwd}
# rabbitmqctl add_user yang 123456
Adding user "yang" ...
  1. 查看创建的用户:rabbitmqctl list_users
# rabbitmqctl list_users
Listing users ...
user	tags
yang	[]
guest	[administrator]
  1. 设置用户角色:rabbitmqctl set_user_tags {user_name} {permissions}
# rabbitmqctl set_user_tags yang administrator
Setting tags for user "yang" to [administrator] ...
#
# rabbitmqctl list_users
Listing users ...
user	tags
yang	[administrator]
guest	[administrator]
  1. 修改指定用户的密码:rabbitmqctl change_password {username} {newpassword}
# rabbitmqctl change_password yang 12345678
Changing password for user "yang" ...
  1. 删除密码:rabbitmqctl clear_password {username}
# rabbitmqctl clear_password yang
Clearing password for user "yang" ...
  1. 删除指定用户:rabbitmqctl delete_user {username}
# rabbitmqctl delete_user yang
Deleting user "yang" ...
#
# rabbitmqctl list_users
Listing users ...
user	tags
guest	[administrator]

RabbitMQ 的权限控制

在上面添加完相关的用户后,就可以对其用户分配相关vhost的权限了。
vhost之于Rabbit就像虚拟机之于物理服务器一样,它们通过在各个实例间提供逻辑上分离,允许你为不同的应用程序安全保密地运行数据。而在RabbitMQ中相应的权限分为读、写、配置三部分。

  • 读:有关消费消息的任何操作,包括“清除”整个队列(同样需要绑定操作的成功)
  • 写:发布消息(同样需要绑定操作的成功)
  • 配置:队列和交换机的创建和删除

知道了RabbitMQ权限相关的配置后,就可以根据具体情况来配置相应的信息。

  1. 创建vhost:rabbitmqctl add_vhost {vhost}因为RabbitMQ的权限是以vhost为分隔的,所以我们需要确定一个vhost来确定相关的权限设置,默认的vhost是“/”。
# rabbitmqctl add_vhost tmp_vhost
Adding vhost "tmp_vhost" ...
  1. 列出所有的vhost:rabbitmqctl list_vhosts {vhostinfoitem ...}其中 {vhostinfoitem} 表示要展示的vhost的字段信息,展示的结果将按照 {vhostinfoitem} 指定的字段顺序展示。这些字段包括: name(名称) 和 tracing (是否为此vhost启动跟踪)。如果没有指定具体的字段项,那么将展示vhost的名称。
# rabbitmqctl list_vhosts
Listing vhosts ...
name
/
tmp_vhost
#
# rabbitmqctl list_vhosts tracing
Listing vhosts ...
tracing
false
false
  1. 删除一个vhost:rabbitmqctl delete_vhost {vhost}删除一个vhost将会删除该vhost的所有exchange、queue、binding、用户权限、参数和策略。
# rabbitmqctl delete_vhost tmp_vhost
Deleting vhost "tmp_vhost" ...
#
# rabbitmqctl list_vhosts
Listing vhosts ...
name
/
  1. 设置用户权限rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read},具体作用如下:
    • {vhost}表示待授权用户访问的vhost名称,默认为 “/”;
    • {user}表示待授权反问特定vhost的用户名称;
    • {conf}表示待授权用户的配置权限,是一个匹配资源名称的正则表达式;
    • {write}表示待授权用户的写权限,是一个匹配资源名称的正则表达式;
    • {read}表示待授权用户的读权限,是一个资源名称的正则表达式。
# rabbitmqctl set_permissions -p / yang "^mip-.*" ".*" ".*"
Setting permissions for user "yang" in vhost "/" ...

上面例子表示授权给用户 “yang” 具有所有资源名称以 “mip-” 开头的配置权限;所有资源的写权限和读权限。

  1. 列出具有权限访问指定vhost的所有用户、对vhost中的资源具有的操作权限:rabbitmqctl list_permissions [-p vhost]默认vhost为 “/”。注意,空字符串表示没有任何权限。
# rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user	configure	write	read
guest	.*	.*	.*
yang	^mip-.*	.*	.*
  1. 设置用户拒绝访问指定指定的vhost:rabbitmqctl clear_permissions [-p vhost] {username},host默认值为 “/”
# rabbitmqctl clear_permissions -p / yang
Clearing permissions for user "yang" in vhost "/" ...
#
# rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user	configure	write	read
guest	.*	.*	.*
  1. 列出指定用户的权限vhost,和在该vhost上的资源可操作权限:rabbitmqctl list_user_permissions {username}
# rabbitmqctl list_user_permissions guest
Listing permissions for user "guest" ...
vhost	configure	write	read
/	.*	.*	.*

常用命令:

查看各队列数据:rabbitmqctl list_queues

# rabbitmqctl list_queues
Timeout: 60.0 seconds ...
Listing queues for vhost / ...
name	messages
tmp_vhost	0

查看连接数:rabbitmqctl list_connections

# rabbitmqctl list_connections
Listing connections ...
user        peer_host        peer_port        state
yang        192.168.50.30        44812        running