RabbitMQ管理(1)——多租户与权限
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-management-of-vhost/
每一個(gè)RabbitMQ服務(wù)器都能創(chuàng)建虛擬的消息服務(wù)器,我們稱(chēng)之為虛擬主機(jī)(virtual host),簡(jiǎn)稱(chēng)為vhost。每一個(gè)vhost本質(zhì)上是一個(gè)獨(dú)立的小型RabbitMQ服務(wù)器,擁有自己獨(dú)立的隊(duì)列、交換器以及綁定關(guān)系等待,并且它擁有自己獨(dú)立的權(quán)限。vhost就像是虛擬機(jī)與物理服務(wù)器一樣,它們?cè)诟鱾€(gè)實(shí)例間提供邏輯上的分離,允許你為不同程序安全保密地運(yùn)行數(shù)據(jù),它既能將同一個(gè)RabbitMQ的中眾多客戶區(qū)分開(kāi),又可以避免隊(duì)列和交換器等命令沖突。vhost之間是絕對(duì)隔離的,你無(wú)法將vhost1中的交換器與vhost2中的隊(duì)列進(jìn)行綁定,這樣既保證了安全性,又可以確保可移植性。如果在使用RabbitMQ達(dá)到一定規(guī)模的時(shí)候,建議用戶對(duì)業(yè)務(wù)功能、場(chǎng)景進(jìn)行歸類(lèi)區(qū)分,并為之分配獨(dú)立的vhost。
vhost是AMQP概念的基礎(chǔ),客戶端在連接的時(shí)候必須制定一個(gè)vhost。RabbitMQ默認(rèn)已創(chuàng)建的vhost為“/”,如果不需要多個(gè)vhost或者對(duì)vhost的概念不是很理解,那么就用這個(gè)默認(rèn)的vhost也是非常合理的,使用默認(rèn)的用戶名guest和密碼guest就可以訪問(wèn)它。但是為了安全以及方便,建議重新建立一個(gè)新的用戶來(lái)訪問(wèn)它。
可以使用rabbitmqctl add_vhost {vhost}命令創(chuàng)建一個(gè)新的vhost,大括號(hào)里的參數(shù)表示vhost的名稱(chēng)。示例如下:
[root@node1 ~]# rabbitmqctl add_vhost vhost1 Creating vhost "vhost1"可以使用rabbitmqctl list_vhosts [vhostinfoitem…]來(lái)羅列當(dāng)前vhost的相關(guān)信息。目前vhostinfoitem的取值有2個(gè):
示例如下:
[root@node1 ~]# rabbitmqctl list_vhosts name tracing Listing vhosts vhost1 false / false [root@node1 ~]# rabbitmqctl trace_on Starting tracing for vhost "/" [root@node1 ~]# rabbitmqctl list_vhosts name tracing Listing vhosts vhost1 false / true對(duì)應(yīng)的刪除的vhost的命令是:rabbitmqctl delete_vhost {vhost},其中大括號(hào)里面的參數(shù)表示vhost的名稱(chēng)。刪除一個(gè)vhost同時(shí)也會(huì)刪除其下所有的隊(duì)列、交換器、綁定關(guān)系、用戶權(quán)限、參數(shù)以及策略等信息。示例如下:
[root@node1 ~]# rabbitmqctl delete_vhost vhost1 Deleting vhost "vhost1" [root@node1 ~]# rabbitmqctl list_vhosts Listing vhostsAMQP協(xié)議中并沒(méi)有指定權(quán)限在vhost級(jí)別還是在服務(wù)器端級(jí)別實(shí)現(xiàn),由具體的應(yīng)用自定義。在RabbitMQ中,權(quán)限控制則是以vhost為單位的。當(dāng)創(chuàng)建一個(gè)用戶時(shí),用戶通常會(huì)被指派給至少一個(gè)vhost,并且只能訪問(wèn)被指派vhost內(nèi)的隊(duì)列、交換器以及綁定關(guān)系。因此,RabbitMQ中的授予權(quán)限是指在vhost級(jí)別對(duì)用戶而言的權(quán)限授予。
相關(guān)的授予權(quán)限命令為:rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}。其中各個(gè)參數(shù)的含義為:
注:可配置指的是隊(duì)列和交換器的創(chuàng)建以及刪除之類(lèi)的操作;可寫(xiě)指的是發(fā)布消息;可讀指與消息有關(guān)的操作,包括讀取消息以及清空整個(gè)隊(duì)列等。
授予用戶root可訪問(wèn)虛擬主機(jī)vhost1,并在所有資源上都具備可配置、可寫(xiě)以及可讀的權(quán)限。示例如下:
[root@node1 ~]# rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*" Setting permissions for user "root" in vhost "vhost1"授予用戶root可訪問(wèn)虛擬主機(jī)vhost2,在以“queue”開(kāi)頭的資源上具備可配置權(quán)限,并在所有資源上擁有可寫(xiě)、可讀的權(quán)限,示例如下:
[root@node1 ~]# rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*" Setting permissions for user "root" in vhost "vhost2"清除權(quán)限也是在vhost級(jí)別對(duì)用戶而言的清除權(quán)限。清除權(quán)限的命令為:rabbitmqctl clear_permissions [-p vhost] {username}。其中vhost用于設(shè)置禁止用戶訪問(wèn)的虛擬主機(jī)的名稱(chēng),默認(rèn)為“/”;username表示禁止訪問(wèn)特定虛擬主機(jī)的用戶名稱(chēng)。示例如下:
[root@node1 ~]# rabbitmqctl clear_permissions -p vhost1 root Clearing permissions for user "root" in vhost "vhost1"在RabbitMQ中有兩個(gè)shell命令可以列舉權(quán)限信息。第一個(gè)命令是:rabbitmqctl list_permissions [-p vhost],用來(lái)顯示虛擬主機(jī)上的權(quán)限;第二個(gè)命令是:rabbitmqctl list_user_permissions {username},用來(lái)顯示用戶的權(quán)限。示例如下:
[root@node1 ~]# rabbitmqctl list_permissions -p vhost1 Listing permissions in vhost "vhost1" root .* .* .* [root@node1 ~]# rabbitmqctl list_user_permissions root Listing permissions for user "root" / .* .* .* vhost1 .* .* .*細(xì)心的讀者可能會(huì)注意到本章節(jié)中用到的所有命令都是rabbitmqctl工具的擴(kuò)展命令,rabbitmqctl工具是用來(lái)管理RabbitMQ中間件的命令行工具,它通過(guò)連接各個(gè)RabbitMQ節(jié)點(diǎn)來(lái)執(zhí)行所有操作。如果有節(jié)點(diǎn)沒(méi)有運(yùn)行,將會(huì)顯示診斷信息、不能到達(dá),或因不匹配的Erlang cookie(有關(guān)Erlang cookie的細(xì)節(jié)可以參考7.1章節(jié))而拒絕連接。rabbitmqctl工具的標(biāo)準(zhǔn)語(yǔ)法如下:
rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...][-n node]
默認(rèn)節(jié)點(diǎn)是"rabbit@hostname",此處的hostname是主機(jī)名稱(chēng)。在一個(gè)名為"node.hidden.com"的主機(jī)上, RabbitMQ Erlang node 的節(jié)點(diǎn)名稱(chēng)通常是rabbit@node (除非RABBITMQ_NODENAME參數(shù)在啟動(dòng)時(shí)設(shè)置了非默認(rèn)值)。 hostname -s 的輸出通常是"@" 標(biāo)志后的東西。
[-q]
使用-q標(biāo)志來(lái)啟用quiet模式,這樣可以屏蔽一些消息的輸出。 默認(rèn)不開(kāi)啟quiet模式。
[-t timeout]
操作超時(shí)時(shí)間(秒為單位)。只適用于“l(fā)ist”類(lèi)型的命令。 默認(rèn)是無(wú)窮大。
下面來(lái)演示下[-q]和[-t timeout]參數(shù)的用法和效果:
歡迎跳轉(zhuǎn)到本文的原文鏈接:https://honeypps.com/mq/rabbitmq-management-of-vhost/
歡迎支持筆者新作:《深入理解Kafka:核心設(shè)計(jì)與實(shí)踐原理》和《RabbitMQ實(shí)戰(zhàn)指南》,同時(shí)歡迎關(guān)注筆者的微信公眾號(hào):朱小廝的博客。
總結(jié)
以上是生活随笔為你收集整理的RabbitMQ管理(1)——多租户与权限的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: RabbitMQ之惰性队列(Lazy Q
- 下一篇: RabbitMQ管理(2)——用户管理