RabbitMQ使用者角色及許可權控制
阿新 • • 發佈:2019-02-14
#######################
#使用者角色
#######################
RabbitMQ的使用者角色分類:
none、management、policymaker、monitoring、administrator
RabbitMQ各類角色描述:
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的運維,例如:
可以建立RabbitMQ監控使用者,負責整個MQ的監控,例如:
可以建立某個專案的專用使用者,只能訪問專案自己的virtual hosts
建立和賦角色完成後檢視並確認:
########################
#RabbitMQ 許可權控制:
########################
預設virtual host:"/"
預設使用者:guest
guest具有"/"上的全部許可權,僅能有localhost訪問RabbitMQ包括Plugin,建議刪除或更改密碼。可通過將配置檔案中loopback_users置孔來取消其本地訪問的限制:
[{rabbit, [{loopback_users, []}]}]
使用者僅能對其所能訪問的virtual hosts中的資源進行操作。這裡的資源指的是virtual hosts中的exchanges、queues等,操作包括對資源進行配置、寫、讀。配置許可權可建立、刪除、資源並修改資源的行為,寫許可權可向資源傳送訊息,讀許可權從資源獲取訊息。比如:
exchange和queue的declare與delete分別需要exchange和queue上的配置許可權
exchange的bind與unbind需要exchange的讀寫許可權
queue的bind與unbind需要queue寫許可權exchange的讀許可權
發訊息(publish)需exchange的寫許可權
獲取或清除(get、consume、purge)訊息需queue的讀許可權
對何種資源具有配置、寫、讀的許可權通過正則表示式來匹配,具體命令如下:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
其中,<conf> <write> <read>的位置分別用正則表示式來匹配特定的資源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和預設的exchange,'^$'不匹配任何資源
需要注意的是RabbitMQ會快取每個connection或channel的許可權驗證結果、因此許可權發生變化後需要重連才能生效。
為使用者賦權:
#使用者角色
#######################
RabbitMQ的使用者角色分類:
none、management、policymaker、monitoring、administrator
RabbitMQ各類角色描述:
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
賦予其administrator角色:$sudo rabbitmqctl set_user_tags user_admin administrator
可以建立RabbitMQ監控使用者,負責整個MQ的監控,例如:
$sudo rabbitmqctl add_user user_monitoring passwd_monitor
賦予其monitoring角色:$sudo rabbitmqctl set_user_tags user_monitoring monitoring
可以建立某個專案的專用使用者,只能訪問專案自己的virtual hosts
$sudo rabbitmqctl add_user user_proj passwd_proj
賦予其monitoring角色:$sudo rabbitmqctl set_user_tags user_proj management
建立和賦角色完成後檢視並確認:
$sudo rabbitmqctl list_users
########################
#RabbitMQ 許可權控制:
########################
預設virtual host:"/"
預設使用者:guest
guest具有"/"上的全部許可權,僅能有localhost訪問RabbitMQ包括Plugin,建議刪除或更改密碼。可通過將配置檔案中loopback_users置孔來取消其本地訪問的限制:
[{rabbit, [{loopback_users, []}]}]
使用者僅能對其所能訪問的virtual hosts中的資源進行操作。這裡的資源指的是virtual hosts中的exchanges、queues等,操作包括對資源進行配置、寫、讀。配置許可權可建立、刪除、資源並修改資源的行為,寫許可權可向資源傳送訊息,讀許可權從資源獲取訊息。比如:
exchange和queue的declare與delete分別需要exchange和queue上的配置許可權
exchange的bind與unbind需要exchange的讀寫許可權
queue的bind與unbind需要queue寫許可權exchange的讀許可權
發訊息(publish)需exchange的寫許可權
獲取或清除(get、consume、purge)訊息需queue的讀許可權
對何種資源具有配置、寫、讀的許可權通過正則表示式來匹配,具體命令如下:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
其中,<conf> <write> <read>的位置分別用正則表示式來匹配特定的資源,如'^(amq\.gen.*|amq\.default)$'可以匹配server生成的和預設的exchange,'^$'不匹配任何資源
需要注意的是RabbitMQ會快取每個connection或channel的許可權驗證結果、因此許可權發生變化後需要重連才能生效。
為使用者賦權:
$sudo rabbitmqctl set_permissions -p /vhost1 user_admin '.*' '.*' '.*'
該命令使使用者user_admin具有/vhost1這個virtual host中所有資源的配置、寫、讀許可權以便管理其中的資源檢視許可權:
$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>.*
$sudo rabbitmqctl list_permissions -p /vhost1
Listing permissions in vhost "/vhost1" ...
user_admin<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*<span style="white-space:pre"> </span>.*