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