すべてのプロダクト
Search
ドキュメントセンター

ApsaraMQ for RabbitMQ:RAM ID のカスタムポリシーの作成

最終更新日:Aug 08, 2026

Resource Access Management (RAM) は、一般的なアクセス制御シナリオ向けにシステムポリシーを提供しています。システムポリシーの粒度が不足している場合は、ApsaraMQ for RabbitMQ リソースへの最小権限アクセスを実現するために、カスタムポリシーを作成してください。

代表的な権限プロファイル

ポリシーをゼロから記述する前に、ご利用のユースケースに該当するアクセスパターンを特定します。

アクセスパターン範囲ポリシー例
パブリッシュのみ単一 vhost例 2:メッセージのパブリッシュ
コンシュームのみ単一 vhost例 3:メッセージのコンシューム
パブリッシュおよびコンシューム単一 vhost例 4:メッセージのパブリッシュとコンシューム
完全なメッセージング単一 vhost(認証情報管理を含む)例 1:vhost への完全なメッセージングアクセス
認証情報管理単一インスタンス例 5:静的アカウント認証情報の管理
インスタンス作成アカウント全体例 6:インスタンスの作成
制限付きインスタンス作成アカウント全体(条件付き)例 7:インターネットアクセスなしの Platinum Edition インスタンスの作成
インスタンスの完全管理単一インスタンス例 8:単一インスタンスへの完全アクセス

カスタムポリシーの基本

Alibaba Cloud が管理するシステムポリシーとは異なり、カスタムポリシーはお客様ご自身で作成および保守する必要があります。

  • アタッチ:カスタムポリシーを RAM ユーザー、ユーザーグループ、または RAM ロールにアタッチすることで、権限が有効になります。

  • 削除:ポリシーを削除する前に、すべてのプリンシパルからのアタッチを解除してください。未アタッチのポリシーは直接削除できます。

  • バージョン管理:RAM ではカスタムポリシーのバージョン管理機能が提供されています。RAM コンソールまたは API を使用してポリシーバージョンを管理してください。

関連操作

リソース ARN フォーマット

ApsaraMQ for RabbitMQ のすべてのリソースは、次の Alibaba Cloud リソースネーム (ARN) フォーマットを使用します。

acs:amqp:$region:$accountid:/instances/$instanceId/...
変数説明
$regionリソースが存在するリージョン。すべてのリージョンを指定する場合は * を使用します。cn-hangzhou
$accountidAlibaba Cloud アカウント ID。任意のアカウントを指定する場合は * を使用します。1234567890
$instanceIdApsaraMQ for RabbitMQ インスタンス IDamqp-cn-xxxxx
$vhostNameVhost 名my-vhost
$exchangeNameエクスチェンジ名my-exchange
$queueNameキュー名my-queue

リソース階層

instances/
├── $instanceId/
│   ├── vhosts/
│   │   └── $vhostName/
│   │       ├── exchanges/
│   │       │   └── $exchangeName/
│   │       │       └── messages/*
│   │       └── queues/
│   │           └── $queueName/
│   │               └── messages/*
│   └── staticAccount/*

サポートされているリージョンについては、「エンドポイント」をご参照ください。

アクションリファレンス

ApsaraMQ for RabbitMQ のアクションは、AMQP プロトコル操作用の クライアント API アクション と、コンソールおよび API を通じた管理操作用の コンソールおよび OpenAPI アクション の 2 種類に分類されます。

クライアント API アクション

クライアント APIアクションリソース説明
exchange.declare (passive=false)amqp:CreateExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/*エクスチェンジを宣言します。エクスチェンジが存在しない場合は作成し、存在する場合はプロパティを検証して不一致時にエラーを返します。
exchange.declare (passive=true)amqp:GetExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeNameエクスチェンジが存在するかどうかを確認します。エクスチェンジが存在しない場合はエラーを返します。
exchange.bindamqp:GetExchange (ソース)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (ソース)ソースエクスチェンジを送信先エクスチェンジにバインドします。
amqp:CreateExchange (送信先)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (送信先)
exchange.unbindamqp:GetExchange (ソース)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName (ソース)ソースエクスチェンジを送信先エクスチェンジからアンバインドします。
amqp:CreateExchange (送信先)acs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/* (送信先)
queue.declare (passive=false)amqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*キューを宣言します。キューが存在しない場合は作成し、存在する場合はプロパティを検証して不一致時にエラーを返します。
queue.declare (passive=true)amqp:GetQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueNameキューが存在するかどうかを確認します。キューが存在しない場合はエラーを返します。
queue.declare (デッドレター交換付き)amqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*デッドレター交換にバインドされたキューを宣言します。
amqp:GetQueueacs:amqp:$region:$accountid:/vhosts/$vhostName/queues/$queueName
amqp:CreateExchange (デッドレター)acs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName (デッドレター)
queue.bindamqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*キューをエクスチェンジにバインドします。
amqp:GetExchangeacs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName
queue.unbindamqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*キューをエクスチェンジからアンバインドします。
amqp:GetExchangeacs:amqp:$region:$accountid:/instances/$instanceName/vhosts/$vhostName/exchanges/$exchangeName
BasicRecoveramqp:BasicRecoveracs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*未応答のメッセージをコンシューマーに再配信します。
BasicCancelamqp:BasicCancelacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*コンシューマーサブスクリプションをキャンセルします。
BasicPublishamqp:BasicPublishacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeName/messages/*エクスチェンジにメッセージをパブリッシュします。
BasicConsumeamqp:BasicConsumeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*キュー上でコンシューマーを開始します。
BasicAckamqp:BasicAckacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*1 つ以上のメッセージを確認します。
BasicNackamqp:BasicNackacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*1 つ以上のメッセージを拒否します。
BasicRejectamqp:BasicRejectacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*単一のメッセージを拒否します。
BasicGetamqp:BasicGetacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*キュー内のメッセージに直接アクセスします。

RAM ワイルドカードマッチングルール

RAM ポリシー内のワイルドカード (*) は、アクション名のプレフィックス に基づいてマッチします。amqp:Get*Get で始まるすべてのアクション(例:amqp:GetInstanceamqp:GetQueue)にマッチし、他の単語で始まるアクションにはマッチしません。amqp:BasicGetBasic で始まるため、amqp:Get* にはマッチしません。メッセージのコンシュームに BasicGet を呼び出すには、アクションリストに明示的に amqp:BasicGet を追加する必要があります。

代表的な権限エラーと必要なアクション

API 呼び出しが UnauthorizedOperation を返し、AccessDeniedDetailNoPermissionType=ImplicitDeny が表示される場合、ポリシーに必要なアクションが不足しています。よくあるシナリオとして、amqp:BasicGet を追加せずに amqp:Get* を設定するケースがあります。このような場合は、明示的に amqp:BasicGet を追加してください。

ポリシー例:

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "amqp:Get*",
                "amqp:List*",
                "amqp:BasicGet"
            ],
            "Resource": "*"
        }
    ]
}

コンソールおよび OpenAPI アクション

API オペレーションアクションリソース説明
ListInstancesamqp:ListInstanceacs:amqp:$region:$accountid:/instances/*インスタンスの一覧を照会します。
CreateInstanceamqp:CreateInstanceacs:amqp:$region:$accountid:/instances/*インスタンスを作成します。条件キー をサポートしています。
DeleteInstanceamqp:DeleteInstanceacs:amqp:$region:$accountid:/instances/$instanceIdインスタンスを削除します。
GetInstanceamqp:GetInstanceacs:amqp:$region:$accountid:/instances/$instanceIdインスタンスを表示します。
ListVhostamqp:ListVhostacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/*vhost の一覧を照会します。
CreateVhostamqp:CreateVhostacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/*vhost を作成します。
DeleteVhostamqp:DeleteVhostacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostNamevhost を削除します。また、インスタンスに対して amqp:GetInstance が必要です。
ListExchangeamqp:ListExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/*エクスチェンジの一覧を照会します。また、インスタンスに対して amqp:GetInstance が必要です。
CreateExchangeamqp:CreateExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/*エクスチェンジを作成します。
DeleteExchangeamqp:DeleteExchangeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/exchanges/$exchangeNameエクスチェンジを削除します。
ListQueueamqp:ListQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*キューの一覧を照会します。また、インスタンスに対して amqp:GetInstance が必要です。
CreateQueueamqp:CreateQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/*キューを作成します。
DeleteQueueamqp:DeleteQueueacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueNameキューを削除します。
QueuePurgeamqp:QueuePurgeacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*キューをパージします。
ListStaticAccountsamqp:ListStaticAccountsacs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/*ユーザー名とパスワードを表示します。また、インスタンスに対して amqp:GetInstance が必要です。
FetchStaticAccountamqp:FetchStaticAccountacs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/*ユーザー名とパスワードを作成します。また、インスタンスに対して amqp:GetInstance が必要です。
DeleteStaticAccountamqp:DeleteStaticAccountacs:amqp:$region:$accountid:/instances/$instanceId/staticAccount/*ユーザー名とパスワードを削除します。
キュー別メッセージ照会amqp:BasicGetacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*キュー内のメッセージにアクセスします。
メッセージ ID 別メッセージ照会amqp:BasicGetacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*キュー内のメッセージにアクセスします。
メッセージの再送信amqp:BasicGet, amqp:BasicPublishacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*メッセージを再送信します。
メッセージ送信amqp:BasicPublishacs:amqp:$region:$accountid:/instances/$instanceId/vhosts/$vhostName/queues/$queueName/messages/*メッセージを送信します。

CreateInstance の条件キー

CreateInstance アクションでは、インスタンス作成を制限するために次の条件キーがサポートされています。詳細については、「条件」をご参照ください。

条件キータイプ有効な値説明
amqp:InstanceTypeStringenterprise (Enterprise Edition), vip (Platinum Edition)RAM ID が作成できるインスタンスエディションを制限します。
amqp:SupportEIPStringtrue, falseインスタンスがインターネットアクセスをサポートするかどうかを制限します。

システムポリシー

Resource Access Management (RAM) は、ApsaraMQ for RabbitMQ 向けに次のシステムポリシーを提供しています。

ポリシー名説明粒度
AliyunAMQPFullAccessApsaraMQ for RabbitMQ の完全な管理権限を付与します (Action: amqp:*, Resource: *)。アカウント全体
PowerUserAccessRAM、IMS などの管理操作を除外する NotAction 文を使用して、Alibaba Cloud サービスおよびリソースへの完全なアクセスを付与します。amqp:* は除外リストに含まれていないため、このポリシーは ApsaraMQ for RabbitMQ の完全な権限も付与します。アカウント全体

どちらのシステムポリシーもアカウント全体に適用され、特定のキューにスコープを限定することはできません。キュー単位の詳細な権限を付与するには、カスタムポリシーを作成し、Resource フィールドにキューの ARN を指定してください。例については、本トピック後半の「例 9:異なる RAM ユーザーに異なるキューへのアクセスを許可」をご参照ください。

ポリシー例

重要

以下の例に含まれるプレースホルダー変数は、実際の値に置き換えてください。各変数の詳細については、「リソース ARN フォーマット」をご参照ください。

例 1:vhost への完全なメッセージングアクセス

特定の 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:メッセージのパブリッシュ

プロデューサークライアントが特定の vhost 内のエクスチェンジにメッセージをパブリッシュするために必要な最小限の権限を付与します。具体的には、エクスチェンジおよびキューの宣言、メッセージのパブリッシュ、配信の応答を行います。

{
    "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:メッセージのコンシューム

コンシューマークライアントが特定の vhost 内のキューからメッセージをコンシュームするために必要な最小限の権限を付与します。具体的には、エクスチェンジおよびキューの宣言、メッセージのコンシューム、応答の管理を行います。

{
    "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:メッセージのパブリッシュとコンシューム

特定の vhost 内でメッセージのパブリッシュおよびコンシュームを行う権限を付与します。「例 2」および「例 3」のアクションを組み合わせています。

{
    "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:静的アカウント認証情報の管理

特定のインスタンスの静的アカウント認証情報(ユーザー名とパスワードのペア)を一覧表示、作成、削除する権限を付与します。

{
    "Version": "1",
    "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"
        }
    ]
}

例 6:インスタンスの作成

任意のリージョンで任意のエディションの ApsaraMQ for RabbitMQ インスタンスを作成する権限を付与します。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "amqp:CreateInstance",
            "Resource": "acs:amqp:*:$accountid:/instances/*"
        }
    ]
}

例 7:インターネットアクセスなしの Platinum Edition インスタンスの作成

条件キーを使用して、インスタンス作成を Platinum Edition (vip) かつインターネットアクセスをサポートしない (SupportEIP: false) インスタンスに制限します。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "amqp:CreateInstance",
            "Resource": "acs:amqp:*:$accountid:/instances/*",
            "Condition": {
                "StringEquals": {
                    "amqp:InstanceType": [
                        "vip"
                    ],
                    "amqp:SupportEIP": [
                        "false"
                    ]
                }
            }
        }
    ]
}

例 8:単一インスタンスへの完全アクセス

単一インスタンスに対する ApsaraMQ for RabbitMQ のすべての権限(vhost 管理、メッセージング操作、静的アカウント管理を含む)を付与します。amqp:ListInstance アクションはすべてのインスタンスに対してスコープが設定されているため、ターゲットインスタンスがコンソールのインスタンス一覧に表示されます。

{
    "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"
        }
    ]
}

例 9:異なる RAM ユーザーに異なるキューへのアクセスを許可

RAM ユーザー A が キュー A にのみアクセスでき、RAM ユーザー B が キュー B にのみアクセスできるようにするには、2 つの個別のカスタムポリシーを作成し、それぞれ対応する RAM ユーザーにアタッチします。これにより、各 RAM ユーザーは自身のポリシーで指定されたキューに対してのみ許可された操作を実行できます。

RAM ユーザー A 向けのポリシー(queueA へのアクセスを許可):

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "amqp:BasicConsume",
                "amqp:BasicPublish",
                "amqp:BasicAck",
                "amqp:BasicNack",
                "amqp:GetQueue"
            ],
            "Resource": [
                "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/queues/queueA"
            ]
        }
    ]
}

RAM ユーザー B 向けには、Resource 値が queueB を指すようにした同一のポリシーを 2 つ目に作成し、RAM ユーザー B にアタッチします。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "amqp:BasicConsume",
                "amqp:BasicPublish",
                "amqp:BasicAck",
                "amqp:BasicNack",
                "amqp:GetQueue"
            ],
            "Resource": [
                "acs:amqp:*:*:/instances/$instanceId/vhosts/$vhostName/queues/queueB"
            ]
        }
    ]
}

参考資料