Rabbitmq - 多租户与权限

Rabbitmq 多租户与权限

虚拟主机vhost

rabbitmq 是一个多租户系统,每个rabbitmq服务器都可以创建多个虚拟的消息服务器,简称为vhost。每个vhost拥有自己的队列、交换器、绑定关系,且每个vhost是隔离的互不影响。类似nginx中的vhost。

客户端在连接的时候必须指定一个vhost,通过授权后,只能在该vhost中进行交换、队列、绑定等操作

rabbitmq中默认创建的vhost的为"/"。

创建虚拟主机

[root@node1 ~]# rabbitmqctl add_vhost v1
Adding vhost "v1" ...
[root@node1 ~]# 

创建虚拟主机需要在每个节点都执行一些操作,可能会阻塞整个集群范围的事物

列出当前的虚拟主机

[root@node1 ~]# rabbitmqctl list_vhosts
Listing vhosts ...
name
v1
/
[root@node1 ~]#

删除虚拟主机

[root@node1 ~]# rabbitmqctl delete_vhost v1
Deleting vhost "v1" ...
[root@node1 ~]#

用户管理

在Rabbitmq中,用户是访问控制的基本单元,使用用户名和密码来认证用户,每个用户可以跨越多个vhost授权,互不影响。

创建用户

[root@node1 ~]# rabbitmqctl add_user first_user 123
Adding user "first_user" ...
[root@node1 ~]# 

用户名:first_user
密 码: 123

查看用户

[root@node1 ~]# rabbitmqctl list_users
Listing users ...
user	tags
first_user	[]
guest	[administrator]
[root@node1 ~]# 

user:用户名
tags: 用户角色  

删除用户

[root@node1 ~]# rabbitmqctl delete_user first_user
Deleting user "first_user" ...
[root@node1 ~]#

改变用户密码

rabbitmqctl change_password {username} {newpassword} # 格式

[root@node1 ~]# rabbitmqctl change_password first_user 1234
Changing password for user "first_user" ...
[root@node1 ~]#

密码验证

rabbitmqctl authenticate_user {username} {password} # 格式

[root@node1 ~]# rabbitmqctl authenticate_user first_user 1234
Authenticating user "first_user" ...
Success
[root@node1 ~]#

角色

用户的角色分为五种
none: 没有任何角色,新创建的用户角色默认为none
management: 拥有访问web管理页面的权限
policymaker: 包含management的所有权限,并且可以管理策略(Policy)和参数(Parameter)。
monitoring: 包含management的所有权限,并且可以看到连接、信道及节点相关的信息
administrator: 最高权限。包含monitoring的所有权限,并且可以管理用户、虚拟主机、权限、策略、参数等

[root@node1 harbor]# rabbitmqctl set_user_tags first_user administrator
Setting tags for user "first_user" to [administrator] ...

权限

AMQP协议中并没有指定权限控制是在服务器级别还是vhost级别实现,由mq应用自己定义。
在Rabbitmq中,权限控制以vhost为单位

授予权限的命令为

rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}

各个参数的含义:
vhost: 授予用户访问权限的vhost名称,可以设置为默认值,即vhost为“/”
user: 可以访问指定vhost的用户名
conf: 用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
write:用于匹配用户在哪些资源上拥有可写权限的正则表达式。
read: 用于匹配用户在哪些资源上拥有可读权限的正则表达式。

【注】 可配置指的是队列和交换器的创建及删除之类的操作;可写指的是发布消息;可读指与消息有关的操作,包括读取消息及清空整个队列

AMQP命令与权限的映射关系

1. 授予权限

授予first_user用户可以访问虚拟主机v1,并在所有资源上都具备可配置,可写、可读的权限

[root@node1 ~]# rabbitmqctl set_permissions -p v1 first_user ".*" ".*" ".*"  
Setting permissions for user "first_user" in vhost "v1" ...
[root@node1 ~]#

2. 授予权限

授予first_user用户可以访问虚拟主机v2,在以“queue”开头的资源上具有可配置权限,并在所有资源上拥有可写、可配置权限

[root@node1 ~]# rabbitmqctl set_permissions -p v2 first_user "^queue.*" ".*" ".*"
Setting permissions for user "first_user" in vhost "v2" ...
[root@node1 ~]#

3. 清除权限

清除权限也是在vhost级别对用户而言
rabbitmqctl clear_permissions [-p vhost] {username}
默认vhost为“/”

[root@node1 ~]# rabbitmqctl clear_permissions -p v2 first_user
Clearing permissions for user "first_user" in vhost "v2" ...
[root@node1 ~]#

4. 查看权限

  • 从虚拟主机角度看,哪些用户对此虚拟主机拥有权限
[root@node1 ~]# rabbitmqctl list_permissions -p v1 
Listing permissions for vhost "v1" ...
user	configure	write	read
first_user	.*	.*	.*
[root@node1 ~]#
  • 从用户角度看,此用户对哪些虚拟主机有权限
[root@node1 ~]# rabbitmqctl list_user_permissions first_user
Listing permissions for user "first_user" ...
vhost	configure	write	read
v1	.*	.*	.*
[root@node1 ~]#

参考
《RabbitMQ 实战指南》
 RabbitMQ官网  https://www.rabbitmq.com/documentation.html

posted @ 2019-05-27 16:12  漂泊的蒲公英  阅读(1826)  评论(0)    收藏  举报