rabbitmq 許可權和角色管理
翻看官方的release文件後,得知由於賬號guest具有所有的操作許可權,並且又是預設賬號,出於安全因素的考慮,guest使用者只能通過localhost登陸使用,並建議修改guest使用者的密碼以及新建其他賬號管理使用rabbitmq(該功能是在3.3.0版本引入的)。
1. 使用者管理
使用者管理包括增加使用者,刪除使用者,檢視使用者列表,修改使用者密碼。
相應的命令
(1) 新增一個使用者
rabbitmqctl add_user Username Password
(2) 刪除一個使用者
rabbitmqctl delete_user Username
(3) 修改使用者的密碼
rabbitmqctl change_password Username Newpassword
(4) 檢視當前使用者列表
rabbitmqctl list_users
2.RabbitMQ的使用者角色分類:
none、management、policymaker、monitoring、administratorRabbitMQ各類角色描述:
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的運維,例如:
- $sudo rabbitmqctl add_user user_admin passwd_admin
- $sudo rabbitmqctl set_user_tags user_admin administrator
可以建立RabbitMQ監控使用者,負責整個MQ的監控,例如:
- $sudo rabbitmqctl add_user user_monitoring passwd_monitor
- $sudo rabbitmqctl set_user_tags user_monitoring monitoring
可以建立某個專案的專用使用者,只能訪問專案自己的virtual hosts
- $sudo rabbitmqctl add_user user_proj passwd_proj
- $sudo rabbitmqctl set_user_tags user_proj management
建立和賦角色完成後檢視並確認:
- $sudo rabbitmqctl list_users
3. 使用者許可權
使用者許可權指的是使用者對exchange,queue的操作許可權,包括配置許可權,讀寫許可權。配置許可權會影響到exchange,queue的宣告和刪除。讀寫許可權影響到從queue裡取訊息,向exchange傳送訊息以及queue和exchange的繫結(bind)操作。
例如: 將queue繫結到某exchange上,需要具有queue的可寫許可權,以及exchange的可讀許可權;向exchange傳送訊息需要具有exchange的可寫許可權;從queue裡取資料需要具有queue的可讀許可權。詳細請參考官方文件中"How permissions work"部分。
相關命令為:
(1) 設定使用者許可權
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
(2) 檢視(指定hostpath)所有使用者的許可權資訊
rabbitmqctl list_permissions [-p VHostPath]
(3) 檢視指定使用者的許可權資訊
rabbitmqctl list_user_permissions User
(4) 清除使用者的許可權資訊
rabbitmqctl clear_permissions [-p VHostPath] User
為使用者賦權:
- $sudo rabbitmqctl set_permissions -p /vhost1 user_admin '.*' '.*' '.*'
檢視許可權:
- $sudo rabbitmqctl list_user_permissions user_admin
- Listing permissions for user "user_admin" ...
- /vhost1<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*