RabbitMQ概念篇 vhost


what is virtual_host

vhost是rabbitmq分配權限的最小細粒度。比如我們可以為一個用戶分配一個可以訪問哪個或者哪一些vhost的權限。
但是不能為用戶分配一個可以訪問哪一些exchange,或者queue的權限,因為rabbitmq的權限細粒度沒有細化到交換器和隊列,他的最小細粒度是vhost(vhost中包含許多的exchanges,queues,bingdings)。
所以如果exchangeA 和queueA 只能讓用戶A訪問,exchangeB 和queueB 只能讓用戶B訪問,要達到這種需求,只能為exchangeA 和queueA創建一個vhostA,為exchangeB 和queueB 創建vhostB,這樣就隔離開來了。

補充:一個broker可以開設多個vhost,用於不同用戶的權限分離

virtual host只是起到一個命名空間的作用,所以可以多個user共同使用一個virtual host,文章開頭寫的vritual_host = '/',這個是系統默認的,
就是說當我們創建一個到rabbitmq的connection時候,它的命名空間是'/',需要注意的是不同的命名空間之間的資源是不能訪問的,比如 exchang,queue ,bingding等

How does it work

查看rabbitmqctl工具相關命令

rabbitmqctl

查看所有虛擬主機

rabbitmqctl list_vhosts

添加vhost

rabbitmqctl add_vhost test_vhost
rabbitmqctl list_vhosts

可以看到有兩個,一個是系統默認的 '/', 還有一個就是我們新建的 test_host

add_user 添加用戶

rabbitmqctl add_user test1 123456
rabbitmqctl add_user test2 123456
rabbitmqctl list_users

用戶的管理命令

add_user <username> <password>
delete_user <username>
change_password <username> <newpassword>
clear_password <username>
authenticate_user <username> <password>
set_user_tags <username> <tag> ...
list_users

set_permissions 分配訪問權限

set_permissions [-p <vhost>] <user> <conf> <write> <read>

其中,權限控制(配置,讀,寫) 的位置分別用正則表達式來匹配特定的資源,如'^(amq.gen.*|amq.default) \('可以匹配server生成的和默認的exchange,'^\)'不匹配任何資源

需要注意的是RabbitMQ會緩存每個connection或channel的權限驗證結果、因此權限發生變化后需要重連才能生效。

rabbitmqctl set_permissions -p test_host  test1 ".*" ".*" ".*"
rabbitmqctl set_permissions -p test_host  test2 ".*" ".*" ".*"

角色

Comma-separated list of tags to apply to the user. Currently supported by the management plugin:

management

User can access the management plugin

policymaker

User can access the management plugin and manage policies and parameters for the vhosts they have access to.

monitoring

User can access the management plugin and see all connections and channels as well as node-related information.

administrator

User can do everything monitoring can do, manage users, vhosts and permissions, close other user's connections, and manage policies and parameters for all vhosts.

Note that you can set any tag here; the links for the above four tags are just for convenience.

RabbitMQ的用戶角色分類:
none、management、policymaker、monitoring、administrator

RabbitMQ各類角色描述:

none

不能訪問 management plugin

management

用戶可以通過AMQP做的任何事外加:
列出自己可以通過AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和關閉自己的channels 和 connections
查看有關自己的virtual hosts的“全局”的統計信息,包含其他用戶在這些virtual hosts中的活動。

policymaker

management可以做的任何事外加:
查看、創建和刪除自己的virtual hosts所屬的policies和parameters

monitoring

management可以做的任何事外加:
列出所有virtual hosts,包括他們不能登錄的virtual hosts
查看其他用戶的connections和channels
查看節點級別的數據如clustering和memory使用情況
查看真正的關於所有virtual hosts的全局的統計信息

administrator

policymaker和monitoring可以做的任何事外加:
創建和刪除virtual hosts
查看、創建和刪除users
查看創建和刪除permissions
關閉其他用戶的connections

創建用戶並設置角色:
可以創建管理員用戶,負責整個MQ的運維,例如:

rabbitmqctl add_user  user_admin  passwd_admin  

賦予其administrator角色:

rabbitmqctl set_user_tags user_admin administrator  

可以創建RabbitMQ監控用戶,負責整個MQ的監控,例如:

rabbitmqctl add_user  user_monitoring  passwd_monitor  

賦予其monitoring角色:

rabbitmqctl set_user_tags user_monitoring monitoring  

可以創建某個項目的專用用戶,只能訪問項目自己的virtual hosts

rabbitmqctl  add_user  user_proj  passwd_proj  

賦予其monitoring角色:

rabbitmqctl set_user_tags user_proj management  

創建和賦角色完成后查看並確認:

rabbitmqctl list_users  





參考資料





參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM