RabbitMQ ユーザーと権限の管理:コマンドラインガイド
ユーザーの管理とアクセス権の定義は、メッセージブローカーインフラストラクチャを保護する上で基本的な側面です。強力なメッセージブローカーであるRabbitMQは、主にrabbitmqctlコマンドラインユーティリティを通じて、ユーザー認証と認可のための堅牢なメカニズムを提供します。このガイドは、rabbitmqctlを使用してユーザー管理をマスターすることに専念し、作成、ロールの割り当て、仮想ホスト全体にわたる詳細な権限設定まで、すべてを網羅します。
適切に設定された権限により、アプリケーションと管理者は必要な場所でのみブローカーと対話できるようになり、セキュリティリスクと運用上の混乱が最小限に抑えられます。これらのコマンドラインツールを活用することで、複雑なセキュリティ設定を効率的にスクリプト化および自動化できます。
前提条件
続行する前に、以下を確認してください。
- RabbitMQサーバーのインストール: ブローカーが実行されている必要があります。
rabbitmqctlへのアクセス: 実行中のRabbitMQインスタンスに対してコマンドを実行するために必要な権限(通常は管理者権限)が必要です。コマンドは通常、RabbitMQサーバーをホストするマシンから実行されます。
rabbitmqctlによるユーザー管理
rabbitmqctlツールは、すべてのユーザー関連操作にuser_*ファミリのコマンドを使用します。RabbitMQユーザーはオペレーティングシステムユーザーとは別のものであることを理解することが重要です。
1. 既存ユーザーのリスト表示
現在ブローカーにアクセスできるユーザーを確認するには、list_usersコマンドを使用します。
rabbitmqctl list_users
出力例:
Listing users ...
user: guest tags: [administrator]
user: app_prod tags: [policymaker]
2. 新規ユーザーの作成
新しいサービスアカウントまたは管理者を設定する場合、ユーザーを作成し、初期パスワードを割り当てる必要があります。
api_userという名前でパスワードsecurepassのユーザーを作成するには:
rabbitmqctl add_user api_user securepass
3. ユーザータグ(ロール)の変更
ユーザータグは、特定の管理者権限を付与する事前定義されたロールを定義します。最も一般的なタグは、administrator、policymaker、managementです。
administrator: ユーザー、権限、vhostを変更し、クラスターパラメータを設定できます。policymaker: ポリシー(例:高可用性またはメッセージTTL)を設定できます。management: Management Pluginインターフェース(インストールされている場合)を使用できます。
現在のタグの表示
現在のロールを表示するには、list_user_tagsを使用します。
rabbitmqctl list_user_tags api_user
タグの設定または上書き
api_userにmanagementタグを割り当てるには:
rabbitmqctl set_user_tags api_user management
既存のタグに加えてpolicymakerタグを追加するには、add_tagコマンドを使用します。
rabbitmqctl set_user_tags api_user administrator policymaker
タグの削除
特定のタグを削除するには:
rabbitmqctl clear_user_tags api_user policymaker
4. ユーザーパスワードの変更
資格情報をローテーションする必要がある場合は、change_passwordコマンドを使用します。
rabbitmqctl change_password api_user newsecurepass123
5. ユーザーの削除
ユーザーを完全に削除し、関連するすべてのアクセスを無効にするには:
rabbitmqctl delete_user api_user
警告: セキュリティ上の理由から、本番環境では
guestユーザーの削除が一般的に推奨されますが、これにはまず新しい管理者ユーザーを作成する必要があります。
仮想ホスト権限の管理
RabbitMQの権限は、仮想ホスト(vhost)ごとに定義されます。vhostは、キュー、交換、バインディングの名前空間として機能します。デフォルトでは、RabbitMQには/という名前のルートvhostがあります。
1. vhostのリスト表示
まず、利用可能なvhostを特定します。
rabbitmqctl list_vhosts
2. vhost上のユーザーに対する権限の設定
set_permissionsコマンドは、アプリケーションセキュリティにとって最も重要です。これにより、ユーザーは特定のvhost内のリソースを設定、読み取り、または書き込む権利が付与されます。
構文: set_permissions <vhost> <user> <conf> <read> <write>
権限の値は正規表現です(.*はすべてリソースを意味します)。
例:特定のvhostへのフルアクセス権の付与
app_prodが/prod_vhostに対してのみ完全なCRUD(設定、読み取り、書き込み)アクセス権を持つようにしたい場合:
rabbitmqctl set_permissions -p /prod_vhost app_prod "^.*" "^.*" "^.*"
| 権限 | 意味(正規表現) | 説明 |
|---|---|---|
設定 (conf) |
.* |
交換、キュー、バインディングの作成/削除、vhostパラメータの設定ができます。 |
読み取り (read) |
.* |
メッセージの消費、キュー/交換ステータスの取得ができます。 |
書き込み (write) |
.* |
メッセージの発行、バインディングの作成ができます。 |
例:ユーザーを書き込みのみに制限する
ファイアホースプロデューサーの一般的なパターンは、書き込みのみに制限することです。
# ユーザー'publisher'は書き込みはできますが、/analytics_vhostでメッセージを設定したり読み取ったりすることはできません。
rabbitmqctl set_permissions -p /analytics_vhost publisher "^$" "^$" "^.*$"
3. 権限のクリア
ユーザーが特定のvhostで持つすべての権限を完全に削除するには、clear_permissionsを使用します。
rabbitmqctl clear_permissions -p /prod_vhost app_prod
4. ユーザー権限のリスト表示
vhost上の特定のユーザーに付与された権限を確認するには:
rabbitmqctl list_permissions -p /prod_vhost app_prod
ユーザー管理のベストプラクティス
- 最小権限の原則(PoLP): アプリケーションまたはユーザーが機能するために必要な最小限の権限のみを常に付与してください。
administratorタグは、絶対に必要ない限り使用しないでください。 - 専用vhost: 異なる環境(例:
dev、staging、prod)ごとに異なる仮想ホストを使用し、それらの間のアクセスを厳密に制御してください。 - guestユーザーの回避: セキュリティのため、デフォルトの
guestユーザーは無効にするか制限する必要があります(デフォルトではlocalhostからのみアクセス可能です)。 - スクリプティング: これらのコマンドはすべて冪等であり、コマンドラインベースであるため、一貫したデプロイのためにユーザー設定および解除ルーチンをスクリプト化してください。
これらのrabbitmqctlコマンドをマスターすることで、メッセージブローカーリソースに誰がアクセスできるかについて、細かく制御可能なスクリプト可能な制御を得ることができ、より安全で管理しやすいRabbitMQデプロイメントにつながります。