システムポリシーが要件を満たさない場合は、カスタムポリシーを作成して最小権限を実現できます。カスタムポリシーは、詳細な権限コントロールを提供し、リソースのセキュリティを向上させます。このトピックでは、ApsaraMQ for RabbitMQ のカスタムポリシーのシナリオと例について説明します。
カスタムポリシーとは
Resource Access Management (RAM) ポリシーは、システムポリシーとカスタムポリシーに分類されます。カスタムポリシーを維持する必要があります。
カスタムポリシーを作成した後、ポリシーで指定された権限をプリンシパルに付与できるように、RAM ユーザー、ユーザーグループ、または RAM ロールにアタッチする必要があります。
プリンシパルにアタッチされていない RAM ポリシーは削除できます。RAM ポリシーがプリンシパルにアタッチされている場合は、RAM ポリシーを削除する前に、プリンシパルから RAM ポリシーをデタッチする必要があります。
カスタムポリシーはバージョンコントロールをサポートしています。RAM が提供するバージョン管理メカニズムに基づいて、カスタムポリシーのバージョンを管理できます。
リファレンス
カスタム権限付与ポリシー
ApsaraMQ for RabbitMQ は、次のカスタムポリシーをサポートしています。
クライアント API 権限
クライアント API | アクション | リソース | 説明 |
exchange.declare (passive=false) | amqp:CreateExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* | Exchange を宣言し、Exchange が存在するかどうかを確認します。
|
exchange.declare (passive=true) | amqp:GetExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName | Exchange を宣言し、Exchange が存在するかどうかを確認します。
|
exchange.bind | amqp:GetExchange (ソース Exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (ソース Exchange) | ソース Exchange を宛先 Exchange にバインドします。 |
amqp:CreateExchange (宛先 Exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (宛先 Exchange) | ||
exchange.unbind | amqp:GetExchange (ソース Exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (ソース Exchange) | ソース Exchange を宛先 Exchange からアンバインドします。 |
amqp:CreateExchange (宛先 Exchange) | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (宛先 Exchange) | ||
queue.declare (passive=false) | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | キューを宣言し、キューが存在するかどうかを確認します。
|
queue.declare (passive=true) | amqp:GetQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName | キューを宣言し、キューが存在するかどうかを確認します。
|
queue.declare (with dead-letter exchange) | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | デッドレター Exchange にバインドされているキューを宣言します。 |
amqp:GetQueue | acs:amqp:$region:$accountid:/vhosts/$vhostName/queues/$queueName | ||
amqp:CreateExchange (デッドレター Exchange) | acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName (デッドレター Exchange) | ||
queue.bind | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | キューを Exchange にバインドします。 |
amqp:GetExchange | acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName | ||
queue.unbind | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | キューを Exchange からアンバインドします。 |
amqp:GetExchange | acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName | ||
BasicRecover | amqp:BasicRecover | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | コンシューマーによって確認応答 (Ack) されていないメッセージを再配信します。 |
BasicCancel | amqp:BasicCancel | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | サブスクリプションをキャンセルします。 |
BasicPublish | amqp:BasicPublish | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName/messages/* | メッセージをパブリッシュします。 |
BasicConsume | amqp:BasicConsume | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | コンシューマーを開始します。 |
BasicAck | amqp:BasicAck | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | 1 つ以上のメッセージを確認応答します。 |
BasicNack | amqp:BasicNack | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | 1 つ以上のメッセージを拒否します。 |
BasicReject | amqp:BasicReject | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | メッセージを拒否します。 |
BasicGet | amqp:BasicGet | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | キュー内のメッセージに直接アクセスします。 |
コンソール OpenAPI と機能権限
コンソール OpenAPI/機能 | アクション | リソース | 説明 |
ListInstances | amqp:ListInstance | acs:amqp:$region:$accountid:/instances/* | インスタンスのリストを照会します。 |
CreateInstance | amqp:CreateInstance | acs:amqp:$region:$accountid:/instances/* | インスタンスを作成します。 CreateInstance API 操作のポリシーは、次の条件キーをサポートしています。詳細については、「条件」をご参照ください。
|
DeleteInstance | amqp:DeleteInstance | acs:amqp:$region:$accountid:/instances/$instanceId | インスタンスを削除します。 |
GetInstance | amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | インスタンスを表示します。 |
ListVhost | amqp:ListVhost | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/* | vhost のリストを照会します。 |
CreateVhost | amqp:CreateVhost | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/* | vhost を作成します。 |
DeleteVhost | amqp:DeleteVhost | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName | vhost を削除します。この操作には、amqp:GetInstance API 権限も必要です。 |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
ListExchange | amqp:ListExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* | Exchange のリストを照会します。この操作には、amqp:GetInstance API 権限も必要です。 |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
CreateExchange | amqp:CreateExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* | Exchange を作成します。 |
DeleteExchange | amqp:DeleteExchange | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName | Exchange を削除します。 |
ListQueue | amqp:ListQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | キューのリストを照会します。この操作には、amqp:GetInstance API 権限も必要です。 |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
CreateQueue | amqp:CreateQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/* | キューを作成します。 |
DeleteQueue | amqp:DeleteQueue | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName | キューを削除します。 |
QueuePurge | amqp:QueuePurge | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | キューをパージします。 |
ListStaticAccounts | amqp:ListStaticAccounts | acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* | ユーザー名とパスワードを表示します。この操作には、amqp:GetInstance API 権限も必要です。 |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
FetchStaticAccount | amqp:FetchStaticAccount | acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* | ユーザー名とパスワードを作成します。この操作には、amqp:GetInstance API 権限も必要です。 |
amqp:GetInstance | acs:amqp:$region:$accountid:/instances/$instanceId | ||
DeleteStaticAccount | amqp:DeleteStaticAccount | acs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/* | ユーザー名とパスワードを削除します。 |
キューによるメッセージの照会 | amqp:BasicGet | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | キュー内のメッセージにアクセスします。 |
メッセージ ID によるメッセージの照会 | amqp:BasicGet | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | キュー内のメッセージにアクセスします。 |
メッセージの再送信 |
| acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | メッセージを再送信します。 |
メッセージの送信 | amqp:BasicPublish | acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/* | メッセージを送信します。 |
カスタムポリシーの例
カスタムポリシーを作成するときは、次の例のパラメーター変数を実際の値に置き換えてください。
$region: リソースが存在するリージョンの ID。詳細については、「エンドポイント」をご参照ください。
$accountid: 権限付与オブジェクトの Alibaba Cloud アカウントの ID。
$instanceId: ApsaraMQ for RabbitMQ インスタンスの ID。
$vhostName: vhost の名前。
$queueName: キューの名前。
$exchangeName: Exchange の名前。
例 1: vhost でメッセージを送受信する権限を付与する
{ "Version":"1", "Statement":[ { "Action":[ "amqp:GetInstance", "amqp:ListVhost", "amqp:GetVhost" ], "Resource":[ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName", "acs:amqp:*:*:/instances/$instanceId/vhosts/*" ], "Effect":"Allow" }, { "Action":[ "amqp:ListExchange", "amqp:CreateExchange", "amqp:DeleteExchange", "amqp:ListQueue", "amqp:DeleteQueue", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicCancel", "amqp:BasicPublish", "amqp:BasicConsume", "amqp:BasicAck", "amqp:BasicNack", "amqp:BasicReject", "amqp:QueuePurge", "amqp:BasicGet", "amqp:GetExchange", "amqp:GetQueue" ], "Resource":"acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect":"Allow" }, { "Action":[ "amqp:ListStaticAccounts", "amqp:FetchStaticAccount", "amqp:DeleteStaticAccount" ], "Resource":"acs:amqp:*:*:/instances/$instanceId/staticAccount/*", "Effect":"Allow" } ] }例 2: メッセージをパブリッシュする権限を付与する
{ "Version": "1", "Statement": [ { "Action": [ "amqp:GetInstance" ], "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName" ], "Effect": "Allow" }, { "Action": [ "amqp:CreateExchange", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicPublish", "amqp:BasicAck", "amqp:BasicNack", "amqp:GetExchange", "amqp:GetQueue" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect": "Allow" } ] }例 3: メッセージをサブスクライブする権限を付与する
{ "Version": "1", "Statement": [ { "Action": [ "amqp:GetInstance", "amqp:GetVhost" ], "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName" ], "Effect": "Allow" }, { "Action": [ "amqp:CreateExchange", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicCancel", "amqp:BasicConsume", "amqp:BasicAck", "amqp:BasicNack", "amqp:BasicReject", "amqp:QueuePurge", "amqp:BasicGet", "amqp:GetExchange", "amqp:GetQueue" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect": "Allow" } ] }例 4: メッセージをパブリッシュおよびサブスクライブする権限を付与する
{ "Version": "1", "Statement": [ { "Action": [ "amqp:GetInstance", "amqp:GetVhost" ], "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName" ], "Effect": "Allow" }, { "Action": [ "amqp:ListExchange", "amqp:CreateExchange", "amqp:DeleteExchange", "amqp:ListQueue", "amqp:DeleteQueue", "amqp:CreateQueue", "amqp:BasicRecover", "amqp:BasicCancel", "amqp:BasicPublish", "amqp:BasicConsume", "amqp:BasicAck", "amqp:BasicNack", "amqp:BasicReject", "amqp:QueuePurge", "amqp:BasicGet", "amqp:GetExchange", "amqp:GetQueue" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/*", "Effect": "Allow" } ] }例 5: ユーザー名とパスワードを管理する権限を付与する
{ "Statement": [ { "Effect": "Allow", "Action": [ "amqp:ListStaticAccounts", "amqp:FetchStaticAccount", "amqp:DeleteStaticAccount" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/staticAccount/*" }, { "Effect": "Allow", "Action": "amqp:GetInstance", "Resource": "acs:amqp:*:*:/instances/$instanceId" } ], "Version": "1" }例 6: RAM ユーザーにインスタンスを作成する権限を付与する
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "amqp:CreateInstance", "Resource": "acs:amqp:*:$accountid:/instances/*" } ] }例 7: RAM ユーザーにインターネットアクセスをサポートしない Platinum Edition インスタンスのみを作成する権限を付与する
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "amqp:CreateInstance", "Resource": "acs:amqp:*:$accountid:/instances/*", "Condition": { "StringEquals": { "amqp:InstanceType": [ "vip" ], "amqp:SupportEIP": [ "false" ] } } } ] }例 8: RAM ユーザーに単一インスタンスのすべての権限を付与する
{ "Version": "1", "Statement": [ { "Action": "amqp:ListInstance", "Resource": "acs:amqp:*:*:/instances/*", "Effect": "Allow" }, { "Action": "amqp:*", "Resource": [ "acs:amqp:*:*:/instances/$instanceId", "acs:amqp:*:*:/instances/$instanceId/vhosts/*" ], "Effect": "Allow" }, { "Action": [ "amqp:ListStaticAccounts", "amqp:FetchStaticAccount", "amqp:DeleteStaticAccount" ], "Resource": "acs:amqp:*:*:/instances/$instanceId/staticAccount/*", "Effect": "Allow" } ] }