Resource Access Management (RAM) ポリシーは、誰が ApsaraMQ for RocketMQ リソースにアクセスでき、どのようなアクションを実行できるかを制御します。組み込みのシステムポリシーの権限範囲が広すぎる場合は、カスタムポリシーを作成して最小権限アクセスを適用します。
カスタムポリシーを使用する状況
システムポリシーは、事前定義された権限のセットを付与します。次のような場合にカスタムポリシーを使用します。
特定のインスタンス、トピック、またはコンシューマーグループへのアクセスを制限する
インスタンスの作成やトピックの削除など、特定のアクションのみを許可する
単一のポリシーで複数の権限スコープを組み合わせる
仕組み
カスタムポリシーを作成した後、RAM ユーザー、RAM ユーザーグループ、または RAM ロールにアタッチして、指定された権限を付与します。
以下のルールにご注意ください。
削除前のデタッチ。プリンシパルにアタッチされていないポリシーは削除できます。ポリシーがプリンシパルにアタッチされている場合は、先にデタッチしてください。
バージョン管理の使用。カスタムポリシーはバージョニングをサポートしています。RAM が提供するバージョン管理メカニズムに基づいて、カスタムポリシーのバージョンを管理できます。
リソース ARN の形式
ポリシー内の各 Resource フィールドは、Alibaba Cloud リソース名 (ARN) を使用してターゲットを識別します。ApsaraMQ for RocketMQ の ARN 形式は次のとおりです。
acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}/topic/{TopicName}| セグメント | 説明 |
|---|---|
{regionId} | インスタンスが存在するリージョンです。詳細については、「エンドポイント」をご参照ください。 |
{accountId} | Alibaba Cloud アカウント ID です。 |
{InstanceId} | ApsaraMQ for RocketMQ インスタンスの ID です。 |
{TopicName} | トピック名です。 |
{ConsumerGroupId} | コンシューマーグループの ID です。 |
ワイルドカードを使用してスコープを広げることができます。
| パターン | スコープ |
|---|---|
instance/* | 指定されたリージョンのアカウント配下にあるすべてのインスタンス |
instance/{InstanceId}* | 特定のインスタンスとそのすべての子リソース (トピック、コンシューマーグループ) |
*:{accountId}:*/* | すべてのリージョンのアカウント配下にあるすべてのリソース |
ポリシーの例
以下の例にあるプレースホルダー値を、ポリシーを適用する前に実際のリソース識別子で置き換えてください。
特定のインスタンスへのフルアクセス権限の付与
このポリシーは、単一のインスタンスとその子リソースに対する ApsaraMQ for RocketMQ のすべての権限を付与します。インスタンスの一覧表示、特定のインスタンスの操作、診断クエリには異なるリソーススコープが必要なため、3つのステートメントを含みます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:ListInstances"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:*"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:ListAnalyticsQuery"
],
"Resource": [
"acs:rocketmq:*:{#accountId}:*/*"
]
}
]
}3つのステートメントは、それぞれ異なる目的を果たします。
インスタンスのリスト表示 -- すべてのインスタンス (
instance/*) に対するrocketmq:ListInstancesにより、ユーザーはコンソールで目的のインスタンスを閲覧して検索できます。インスタンスのフルアクセス:特定のインスタンス (
instance/{InstanceId}*) に対するrocketmq:*権限。末尾のワイルドカードは、すべての子リソースを対象とします。診断アクセス —
rocketmq:ListAnalyticsQueryは診断クエリを有効にします。ワイルドカードリージョン (*) は、クロスリージョンクエリを許可します。
インスタンス作成権限の付与
このポリシーにより、RAM ユーザーは特定のリージョンで ApsaraMQ for RocketMQ インスタンスを作成できます。作成時にはインスタンス ID がまだ不明なため、リソースは instance/* を使用します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:CreateInstance"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/*"
]
}
]
}特定のトピックの削除権限の付与
このポリシーは、DeleteTopic アクションを特定のインスタンス上の単一のトピックに制限します。このパターンを使用すると、より広範な権限を付与することなく、トピックのクリーンアップを委任できます。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:DeleteTopic"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}/topic/{TopicName}"
]
}
]
}インスタンス診断へのフルアクセス権限の付与
このポリシーは、分析クエリの送信、一覧表示、取得といった、診断に関連するすべての権限を付与します。ワイルドカードのリージョンとリソースのパターンにより、アカウント配下のすべてのインスタンスとリージョンにわたる診断へのアクセスが可能になります。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:GetAnalyticsQuery",
"rocketmq:SubmitAnalyticsQuery",
"rocketmq:ListAnalyticsQuery"
],
"Resource": [
"acs:rocketmq:*:{#accountId}:*/*"
]
}
]
}RAM ユーザーへのインスタンスリストの表示権限と特定インスタンスの操作権限の付与
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rocketmq:ListInstances",
"rocketmq:GetUserTags"
],
"Resource": [
"acs:rocketmq:*:*:instance/*"
]
},
{
"Effect": "Allow",
"Action": [
"rocketmq:*"
],
"Resource": [
"acs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*"
]
}
]
}この例は、リストタイプのアクションとインスタンス固有のアクション間での Resource 設定の違いを示しています。
リスト型アクション (例:
rocketmq:ListInstances、rocketmq:GetUserTags):Resource フィールドは、ワイルドカード形式acs:rocketmq:*:*:instance/*を使用する必要があります。リスト型アクションでは、Resource を特定のインスタンス ARN に制限することはできません。そのように制限した場合、アクションは失敗します。インスタンスの読み取り/書き込みアクション (例:
rocketmq:*): リソースをacs:rocketmq:{regionId}:{accountId}:instance/{InstanceId}*などの特定のインスタンス ARN に制限できます。
リストタイプのアクション権限を含めずに、RAM ユーザーに特定のインスタンスに対する権限のみを付与した場合、RAM ユーザーは NoPermission エラーを受け取るか、コンソールまたは API の呼び出し時にインスタンスリストを表示できなくなります。
次のステップ
よくある質問
Q: HTTP 経由で ApsaraMQ for RocketMQ にアクセスすると、"valid resource owner failed" または "AccessDenied (OwnerId forbidden)" というエラーが表示されるのはなぜですか?
原因:このエラーは通常、以下のいずれかの理由で発生します。
署名構築エラー: HTTP リクエスト署名が HMAC-SHA256 V4 仕様に準拠していません。一般的な問題として、正しく構築されていない Canonical String や不正な形式の
Authorizationヘッダーなどが挙げられます。RAM ポリシーのリソースの不一致: RAM ポリシーの
Resourceフィールドが、ターゲットトピックまたはインスタンスと完全に一致していません。 ApsaraMQ for RocketMQ のトピック名は大文字と小文字が区別されます。 HTTP プロトコルでメッセージを公開する場合、Resourceフィールドの正しいフォーマットはacs:mq:*:*:instance/{InstanceId}/topic/{TopicName}です。権限不足: リクエストに使用された AccessKey ペアまたは STS 認証情報に、メッセージを公開するための
mq:PUBなどの必要な権限がありません。
解決策:
HTTP リクエスト署名が、Canonical String、署名付きヘッダー、および
Authorizationヘッダーの正しい形式を含め、HMAC-SHA256 V4 仕様に厳密に従っていることを確認してください。RAM ポリシーの
Resourceフィールドが、実際のトピック名およびインスタンス名と完全に一致していることを確認してください。大文字と小文字の区別に注意してください。AccessKey ペアまたは STS 認証情報に、実行する操作に必要な権限 (例: メッセージを公開する場合の
mq:PUB権限) があることを確認してください。
推奨事項:HTTP 認証の複雑さや署名エラーの可能性を避けるために、リクエスト署名を自動的に処理する公式の RocketMQ SDK を使用することを推奨します。
Q: リクエスト ID を使用して、ApsaraMQ for RocketMQ の権限検証が失敗した具体的な理由を照会できますか?
いいえ。現在、Alibaba Cloud は、RequestId を使用した IAM (Identity and Access Management) のきめ細かい認証決定の詳細の照会をサポートしていません。権限検証が失敗した場合、バックエンドは一般的な AccessDenied エラーのみを返します。どのポリシーがリクエストを拒否したか、どの条件が満たされなかったかといった特定のポリシー評価の詳細は開示されません。
権限検証の失敗をトラブルシューティングするには、以下の方法をお試しください。
権限ポリシーの確認:RAM ユーザーまたはロールにアタッチされたポリシーを確認し、必要なすべてのアクションが明示的に許可されていることを検証してください。
リソース ARN の一致の確認: ポリシーの
Resourceフィールドが、正しいリージョン ID、アカウント ID、インスタンス ID、トピックまたはコンシューマーグループ名を含む実際のリソース ARN と一致することを確認してください。署名ロジックの確認:HTTP プロトコルを使用して ApsaraMQ for RocketMQ にアクセスしている場合は、リクエスト署名ロジックが正しいことを検証してください。
権限の境界と信頼ポリシーの確認:RAM ユーザーまたはロールが権限の境界または信頼ポリシーの対象である場合は、これらの設定が必要なアクションを制限していないことを検証してください。
Q: ApsaraMQ for RocketMQ のアラートを設定するために必要な Cloud Monitor の権限を RAM ユーザーに付与するにはどうすればよいですか?
ApsaraMQ for RocketMQ のカスタム権限ポリシーは ApsaraMQ for RocketMQ リソースへのアクセスのみを制御し、Cloud Monitor の権限は含んでいません。RAM ユーザーが Cloud Monitor で ApsaraMQ for RocketMQ のアラートを設定できるようにするには、RAM ユーザーに別途 Cloud Monitor の権限を付与する必要があります。
必要な Cloud Monitor の読み取り専用権限を付与するには、次の手順を実行します。
Alibaba Cloud アカウントまたは RAM 管理者アカウントを使用して RAM コンソールにログインします。
左側メニューで、[ID] > [ユーザー] を選択します。
[ユーザー] ページで、対象の RAM ユーザーを見つけ、[操作] 列の [権限の追加] をクリックします。
[権限の追加] パネルで、次の設定を構成します。
要件に基づいて [承認スコープ] を設定します。
[ポリシータイプ] を [システムポリシー] に設定します。
検索ボックスに
AliyunCloudMonitorReadOnlyAccessを入力し、検索結果からポリシーを選択します。[OK] をクリックして権限付与を保存します。
権限が付与されると、RAM ユーザーは Cloud Monitor のメトリクスを表示し、ApsaraMQ for RocketMQ インスタンスのアラートルールを設定できるようになります。
Q: ApsaraMQ for RocketMQ 5.0 の開発環境でメッセージ送信権限を制御するには、RAM カスタムポリシーとアクセスコントロールリスト (ACL) のどちらを使用すべきですか?
開発またはテスト環境でメッセージの送受信権限を制御するには、RAM カスタムポリシーではなく アクセスコントロールリスト (ACL) を使用します。
ACL:アプリケーションレベルでのメッセージ送受信権限の制御のために設計されています。ACL を使用すると、特定のユーザーまたはアプリケーションに、インスタンス内の特定のトピックへの発行または購読の権限を付与できます。これにより、メッセージフローをシミュレートしたり、どのアプリケーションが特定のトピックと対話できるかを制御したりする必要がある開発やテストのシナリオに ACL は適しています。
RAM カスタムポリシー:Alibaba Cloud アカウントレベルでのリソース管理のために設計されています。RAM ポリシーは、ApsaraMQ for RocketMQ インスタンス、トピック、コンシューマーグループの作成、変更、削除など、クラウドリソースに対する操作を制御します。RAM ポリシーは、誰がそれらのリソースを通じてメッセージを送受信できるかではなく、誰が ApsaraMQ for RocketMQ リソースを管理できるかを制御します。
要約:
シナリオ | 推奨される方法 |
どのアプリケーションがインスタンス内でメッセージを送受信できるかを制御する | ACL |
誰が ApsaraMQ for RocketMQ リソース (インスタンス、トピック、コンシューマーグループ) を作成、変更、または削除できるかを制御する | RAM カスタムポリシー |