RabbitMQ 的权限角色
- none: 不能登录管理控制台(启用management plugin的情况下),只能发送和接收消息, 所以一般生产者和消费者默认角色就是这个
- 普通管理者(management):仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
- 用户可以通过AMQP做的任何事外加:
- 列出自己可以通过AMQP登入的virtual hosts
- 查看自己的virtual hosts中的queues, exchanges 和 bindings
- 查看和关闭自己的channels 和 connections
- 查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动
- 策略制定者(policymaker):可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。
- management的权限外加:
- 查看、创建和删除自己的virtual hosts所属的policies和parameters
- 监控者(monitoring):可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息。
- management的权限外加:
- 列出所有virtual hosts,包括他们不能登录的virtual hosts
- 查看其他用户的connections和channels
- 查看节点级别的数据如clustering和memory使用情况
- 查看真正的关于所有virtual hosts的全局的统计信息
- 超级管理员(administrator):可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
- policymaker和monitoring的权限外加:
- 创建和删除virtual hosts
- 查看、创建和删除users
- 查看创建和删除permissions
- 关闭其他用户的connections
RabbitMQ 的用户管理
- 新建用户:
rabbitmqctl add_user {user_name} {user_passwd}
# rabbitmqctl add_user yang 123456
Adding user "yang" ...
- 查看创建的用户:
rabbitmqctl list_users
# rabbitmqctl list_users
Listing users ...
user tags
yang []
guest [administrator]
- 设置用户角色:
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]
- 修改指定用户的密码:
rabbitmqctl change_password {username} {newpassword}
# rabbitmqctl change_password yang 12345678
Changing password for user "yang" ...
- 删除密码:
rabbitmqctl clear_password {username}
# rabbitmqctl clear_password yang
Clearing password for user "yang" ...
- 删除指定用户:
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权限相关的配置后,就可以根据具体情况来配置相应的信息。
- 创建vhost:
rabbitmqctl add_vhost {vhost}
因为RabbitMQ的权限是以vhost为分隔的,所以我们需要确定一个vhost来确定相关的权限设置,默认的vhost是“/”。
# rabbitmqctl add_vhost tmp_vhost
Adding vhost "tmp_vhost" ...
- 列出所有的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
- 删除一个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
/
- 设置用户权限
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-” 开头的配置权限;所有资源的写权限和读权限。
- 列出具有权限访问指定vhost的所有用户、对vhost中的资源具有的操作权限:
rabbitmqctl list_permissions [-p vhost]
默认vhost为 “/”。注意,空字符串表示没有任何权限。
# rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user configure write read
guest .* .* .*
yang ^mip-.* .* .*
- 设置用户拒绝访问指定指定的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 .* .* .*
- 列出指定用户的权限vhost,和在该vhost上的资源可操作权限:
rabbitmqctl list_user_permissions {username}
# rabbitmqctl list_user_permissions guest
Listing permissions for user "guest" ...
vhost configure write read
/ .* .* .*