RabbitMQ訪問控制
Access Control (Authentication, Authorisation) in RabbitMQ
認證和授權這兩個概念經常容易被混淆,甚至被互換使用。在RabbitMQ中這是錯的,它們是兩個獨立的概念。可以簡單的這樣理解,認證就是“識別這個用戶是誰”,而授權就是“決定哪些用戶不能這麽做”。
Default Virtual Host and User
當服務器第一次啟動運行的時候,並且檢測到它的數據庫沒有被初始化或者已經被刪除了,那麽它將用下面這樣的資源配置初始化一個新的數據庫:
- 一個虛擬主機,名字叫/
- 一個名字叫guest的用戶,並且密碼也是guest,它可以訪問/下面的所有資源
我們建議刪除guest用戶,或者修改它的密碼,尤其是當你的MQ是公共訪問的時候。
"guest" user can only connect via localhost
默認情況下,guest用戶被禁止通過遠程連接到RabbitMQ,它只能用localhost連接。你自己創建的其它的用戶不會受限於這一條。
這個配置是通過配置文件中的loopback_users來設置的。
如果你希望guest用戶從遠程主機連接上來,你應該設置loopback_users為none。一個完整的配置應該是這樣的:
或者在rabbitmq.config中這樣配置:
How Permissions Work
當一個RabbitMQ客戶端和服務器建立一個連接的時候,它指定一個它打算操作的虛擬主機。第一個級別的訪問控制就在這個這裏,這個時候服務器會檢查這個用戶是否有權限訪問該虛擬主機。
資源,比如:交換機和隊列,它們是在一個特定的虛擬主機下被命名的實體。相同名字在不同的虛擬主句中表示不同的資源。第二級別的訪問控制就是強制檢查對資源的某個確定的操作是否被允許執行。
RabbitMQ對一個資源有configure(配置)、read(讀)、write(寫)操作。(PS:簡單的理解就是讀、寫、執行這三種操作,俗稱rwx)
- configure操作指的是創建或者銷毀資源
- write操作指的是註入一個消息到資源中
- read操作指的是從資源中檢索一個消息
小結:
第一級別的訪問控制是在客戶端與服務器建立連接的時候檢查用戶對虛擬主機是否有訪問權限
第二級別的訪問控制是在執行操作的時候檢查用戶是否對資源有相應的訪問權限
為了在資源上執行操作,用戶必須被授權相應的權限。下面這個表顯示的是在執行AMQP命令的時候需要哪些權限:
權限用正在表達式來表示
參考 http://www.rabbitmq.com/access-control.html
RabbitMQ訪問控制