我們在使用mq搭建系統的時候,經常要開放佇列給外接系統訪問。外接系統的穩定性是不可控的。為了防止外接系統不穩定導致誤操作破壞了mq的配置或資料,需要對mq做比較精細的許可權控制。
我的需求是這樣的:
我有乙個資料查詢服務,並且通過mq推送資料變動訊息。對接mq的每個系統都會有自己乙個獨立的佇列來讀取訊息。所有訊息通過乙個扇形交換機廣播到所有佇列。我需要這個交換機和所有佇列都由管理員統一建立好。而其他系統使用的使用者,均沒有建立交換機和佇列的許可權。資料查詢服務只擁有推送訊息的許可權,其他對接mq的系統只擁有從自己佇列讀取訊息的許可權。
我們使用的mq是rabbitmq。我在網上搜了一下,大部分講的是使用者角色配置。對於mq的資源授權管理講的比較少。以下內容將主要講解rabbitmq許可權控制的基本概念和模型。理解了這些基本概念後,應該可以愉快地使用rabbitmq管理介面進行授權操作。如果你們只有命令列可用,也能很輕鬆地找到相應的命令。
rabbitmq初次啟動時,初始建立這兩個東西:
第一級控權單位是virtual host,virtual host下面第二級的控權單位是resource(包含exchange和queue)。兩個相同名稱的resource如果分屬不同的virtual host,則算是不同的resource。
什麼是virtual host:當使用者訪問mq時,首先觸發第一級控權,判斷使用者是否有訪問該virtual host的許可權。rabbitmq is multi-tenant system: connections, exchanges, queues, bindings, user permissions, policies and some other things belong to virtual hosts, logical groups of entities.
就是說rabbitmq是多租戶系統,簡單理解就是把多virtual host當做多個mq系統來用就好了……
若可訪問,則進行第二級控權,判斷使用者是否具有操作(operation)所請求的資源的許可權。
rabbitmq定義了操作(operation)有這麼三種:
後面有個**列出了具體的對應關係。
當管理員對乙個使用者進行授權時,要配置兩個元素:
允許什麼操作,即configure、write、read三種operation;
操作什麼resource。使用者是否擁有某資源的許可權,通過對該資源的名稱與授權時配置的正則進行匹配來判斷。
下面這張表詳細描述了operation、resource和使用者可執行的操作的關係:
例子:本文內容基本來自官網手冊,如果需要更詳細的說明——比如說topic的授權,可以直接看手冊。很多時候,當你剛接觸乙個新工具時,比起在網際網路上瞎逛,直接閱讀官方手冊效率會高很多。雖然手冊比較冗長,而且大部分只有純英文,但畢竟最遠的路,就是最快的捷徑。
RabbitMQ使用者增刪及許可權控制
不能訪問 management plugin,通常就是普通的生產者和消費者。僅可登陸管理控制台 啟用management plugin的情況下 無法看到節點資訊,也無法對policies進行管理。使用者可以通過amqp做的任何事外加 列出自己可以通過amqp登入的virtual hosts 檢視自己...
RabbitMQ使用者角色及許可權控制
user 有5種 tags management 訪問 management plugin policymaker 訪問 management plugin 和管理自己 vhosts 的策略和引數 monitoring 訪問 management plugin 和檢視所有配置和通道以及節點資訊 ad...
Git 許可權控制原理
git是一款可以替代svn對 版本進行管理的工具,近幾年,這款由大神linus開發,託管著linux核心 的小軟體大有在國內徹底取代svn的架勢。git雖說很強大,不論是多分支開發,分布式 庫都像重慶小火鍋一樣讓人吃上一口就再也無法停下來,但是git也有乙個很 嚴重 的問題,那就是沒有許可權控制功能...