Resource Access Management (RAM) を使用すると、Alibaba Cloud アカウントの AccessKey ペアを他のユーザーと共有することなく、ApsaraMQ for MQTT リソースへのアクセスを制御できます。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。RAM ユーザーを作成し、各ユーザーに必要な権限のみを付与できます。
アクセス制御の仕組み
ApsaraMQ for MQTT は、RAM ポリシーを通じてアクセスを承認します。各ポリシーは、RAM ユーザーがどのリソースに対してどのアクションを実行できるかを指定します。リソースタイプは 4 種類あります。
| リソースタイプ | 説明 | 命名規則 | 例 |
|---|---|---|---|
| インスタンス | MQTT ブローカーインスタンス | acs:mq:*:*:instance/{mqttInstanceId} | acs:mq:*:*:instance/post-cn-09k1noy**** |
| トピック | インスタンス内のメッセージトピック | acs:mq:*:*:topic/{mqttInstanceId}/{topic} | acs:mq:*:*:topic/post-cn-09k1noy**/Topic_** |
| グループ | インスタンス内のクライアントグループ | acs:mq:*:*:groupId/{mqttInstanceId}/{gid} | acs:mq:*:*:groupId/post-cn-09k1noy**/GID_** |
| ルール | インスタンス内のデータルーティングルール | acs:mq:*:*:rule/{mqttInstanceId}/{ruleId} | acs:mq:*:*:rule/post-cn-09k1noy**/111** |
利用可能なポリシーは 2 種類あります。
システムポリシー:Alibaba Cloud によって事前定義されています。すぐに使用できますが、編集はできません。
カスタムポリシー:ユーザーが定義および管理します。ポリシーのバージョンはユーザーが管理します。リソースレベルできめ細かなアクセス制御を提供します。
ポリシーの構文の詳細については、「ポリシーの構造と構文」をご参照ください。リソース要素のフォーマットについては、「リソース」をご参照ください。
インスタンスアクセスの前提条件
トピック、グループ、またはルールに対する権限を付与する前に、まず親インスタンスに対して mq:MqttInstanceAccess アクションを付与する必要があります。インスタンスレベルのアクセス権がないと、RAM ユーザーはそのインスタンス内のリソースに到達できません。
この前提条件は、コンソール操作、API 呼び出し、クライアントのパブリッシュ/サブスクライブなど、すべての権限カテゴリに適用されます。
権限付与のクイックリファレンス
以下のポリシー詳細を読む前に、このクイックリファレンスを使用して、付与すべき権限を確認してください。
システムポリシー (クイックセレクション)
ほとんどのユースケースでは、以下のいずれかの事前定義されたシステムポリシーを Resource Access Management (RAM) ユーザーにアタッチします。設定は不要で、アタッチしてすぐに使用できます。
| ポリシー | アクセスタイプ |
|---|---|
AliyunMQFullAccess | 完全な管理アクセス |
AliyunMQPubOnlyAccess | SDK パブリッシュアクセスのみ |
AliyunMQSubOnlyAccess | SDK サブスクライブアクセスのみ |
AliyunMQReadOnlyAccess | 読み取り専用アクセス (コンソールおよび API) |
追加のコンソール権限
システムポリシーには、ApsaraMQ for MQTT コンソールのすべてのエリアにアクセスするために必要なすべての権限が含まれているわけではありません。必要に応じて、以下の権限を別途付与してください。
| 権限 | 必須対象 |
|---|---|
mq:MqttMetaData | ApsaraMQ for MQTT コンソールの [概要] ページへのアクセス |
mq:ListMqttInstance | コンソールでのインスタンスリストの表示 |
MQTT のみの権限付与
上記のシステムポリシーは ApsaraMQ for RocketMQ も対象としています。ApsaraMQ for MQTT リソースへのアクセスのみを許可するには、代わりにカスタムポリシーを使用します。MQTT のみのアクセスに対するカスタムポリシーには、通常、以下が含まれます。
ターゲットインスタンスに対する
mq:MqttInstanceAccess(リソースレベルの権限を付与する前に必須)必要に応じて、特定のトピックまたはグループにスコープ指定された
mq:PUBまたはmq:SUB
システムポリシー
ApsaraMQ for MQTT は、4 つのデフォルトのシステムポリシーを提供します。
| ポリシー | 説明 |
|---|---|
| AliyunMQFullAccess | コンソールでのすべての ApsaraMQ for MQTT 操作に対する完全な管理アクセス。Alibaba Cloud アカウントと同等です。 |
| AliyunMQPubOnlyAccess | パブリッシュ専用アクセス。SDK を介して、Alibaba Cloud アカウント配下のすべてのリソースにメッセージをパブリッシュできます。 |
| AliyunMQSubOnlyAccess | サブスクライブ専用アクセス。SDK を介して、Alibaba Cloud アカウント配下のすべてのリソースからメッセージをサブスクライブできます。 |
| AliyunMQReadOnlyAccess | 読み取り専用アクセス。コンソールまたは API 呼び出しを介してリソース情報を表示できます。 |
ApsaraMQ for MQTT には、独自の独立したシステムポリシーはありません。これらのポリシーは ApsaraMQ for RocketMQ と共有されており、これらのポリシーのいずれかを RAM ユーザーにアタッチすると、両方のサービスへのアクセスが許可されます。
AliyunMQFullAccess と AliyunMQReadOnlyAccess には、コンソールでインスタンスリストを表示する権限は含まれていません。インスタンスリストへのアクセスを有効にするには、mq:MqttInstanceAccess を別途付与してください。詳細については、「インスタンス管理のアクション」をご参照ください。カスタムポリシーのアクション
カスタムポリシーを使用すると、RAM ユーザーが特定のリソースに対して実行できるアクションを正確に指定できます。以下のセクションでは、利用可能なすべてのアクションをスコープ別にグループ化してリストします。
カスタムポリシーのサンプルについては、「権限ポリシーのサンプル」をご参照ください。
クライアントのパブリッシュおよびサブスクライブのアクション
これらのアクションは、ApsaraMQ for MQTT SDK を介したメッセージのパブリッシュとサブスクライブを制御します。
リソースの命名規則:
トピック:
acs:mq:*:*:topic/{mqttInstanceId}/{topic}グループ ID:
acs:mq:*:*:groupId/{mqttInstanceId}/{gid}
| アクション | 説明 |
|---|---|
| mq:PUB | トピックにメッセージをパブリッシュする |
| mq:SUB | トピックからメッセージをサブスクライブする |
クライアントのパブリッシュおよびサブスクライブ権限は、Alibaba Cloud アカウント間では付与できません。
インスタンス管理のアクション
リソースの命名規則: acs:mq:*:*:instance/{mqttInstanceId}
| アクション | 説明 |
|---|---|
| mq:MqttInstanceAccess | インスタンスの基本情報を照会します。トピック、グループ、またはルールの権限を付与する前に必須です。 |
| mq:ListMqttInstance | すべてのインスタンスをリスト表示する |
| mq:UpdateMqttInstance | インスタンス情報を変更する |
| mq:DeleteMqttInstance | インスタンスを削除する |
| mq:UpdateMqttInstanceWarn | インスタンスのアラート設定を更新する |
| mq:MqttMetaData | ApsaraMQ for MQTT コンソールの [概要] ページとホームページにアクセスする |
mq:MqttMetaDataを付与した後、RAM ユーザーがコンソールでインスタンスリストを表示できるように、mq:ListMqttInstanceも付与してください。
トピック管理のアクション
リソースの命名規則: acs:mq:*:*:topic/{mqttInstanceId}/{topic}
| アクション | 説明 |
|---|---|
| mq:CreateMqttTopic | トピックを作成する |
| mq:DeleteMqttTopic | トピックを削除する |
| mq:ListMqttTopic | トピックをリスト表示する |
| mq:UpdateMqttTopic | トピックの説明を更新する |
| mq:QueryMqttClientByTopic | どのクライアントがトピックをサブスクライブしているかを照会する |
| mq:QueryMqttMsgTransTrend | トピックのメッセージング統計を照会する |
| mq:SendMqttMessageByConsole | コンソールからテストメッセージを送信する |
グループ管理のアクション
リソースの命名規則: acs:mq:*:*:groupId/{mqttInstanceId}/{gid}
| アクション | 説明 |
|---|---|
| mq:CreateMqttGroupId | グループを作成する |
| mq:DeleteMqttGroupId | グループを削除する |
| mq:ListMqttGroupId | グループをリスト表示する |
| mq:QueryMqttClientByClientId | クライアント ID でクライアント情報を照会する |
| mq:QueryMqttClientByGroupId | グループ ID でクライアント情報を照会する |
| mq:QueryMqttHistoryOnline | グループ ID で過去のオンライン接続を照会する |
| mq:QueryMqttTraceDevice | 特定のクライアントをトレースする |
| mq:QueryMqttDeviceTrace | 特定のクライアントの詳細を照会する |
ルール管理のアクション
リソースの命名規則: acs:mq:*:*:rule/{mqttInstanceId}/{ruleId}
ルールの権限を付与する際は、関連するインスタンス、トピック、グループがすべて同じ Alibaba Cloud アカウントに属していることを確認してください。
| アクション | 説明 |
|---|---|
| mq:CreateMqttInboundRule | データインバウンドルールを作成する |
| mq:DeleteMqttInboundRule | データインバウンドルールを削除する |
| mq:ListMqttInboundRule | データインバウンドルールをリスト表示する |
| mq:UpdateMqttInboundRule | データインバウンドルールを更新する |
| mq:CreateMqttOutboundRule | データアウトバウンドルールを作成する |
| mq:DeleteMqttOutboundRule | データアウトバウンドルールを削除する |
| mq:ListMqttOutboundRule | データアウトバウンドルールをリスト表示する |
| mq:UpdateMqttOutboundRule | データアウトバウンドルールを更新する |
| mq:CreateClientStatusNotifyRule | クライアントステータス通知ルールを作成する |
| mq:DeleteClientStatusNotifyRule | クライアントステータス通知ルールを削除する |
| mq:ListClientStatusNotifyRule | クライアントステータス通知ルールをリスト表示する |
| mq:UpdateClientStatusNotifyRule | クライアントステータス通知ルールを更新する |
API オペレーションの権限
各 API オペレーションには、mq:MqttInstanceAccess に加えて、1 つ以上のアクションが必要です。ルール関連の API については、関連するインスタンス、トピック、グループがすべて同じ Alibaba Cloud アカウントに属していることを確認してください。
トークン管理
| API | リソースの命名規則 | 必須アクション |
|---|---|---|
| ApplyToken | インスタンス: acs:mq:*:*:instance/{mqttInstanceId}、トピック: acs:mq:*:*:topic/{mqttInstanceId}/{topic} | mq:MqttInstanceAccess, mq:ApplyToken |
| RevokeToken | acs:mq:*:*:* | mq:MqttInstanceAccess, mq:RevokeToken |
| QueryToken | acs:mq:*:*:* | mq:MqttInstanceAccess, mq:QueryToken |
メッセージ操作
| API | 必須アクション |
|---|---|
| SendMessage | mq:MqttInstanceAccess, mq:SendMessage |
グループ操作
すべてのグループ API 操作では、以下のリソース命名規則を使用します。
インスタンス:
acs:mq:*:*:instance/{mqttInstanceId}グループ:
acs:mq:*:*:groupId/{mqttInstanceId}/{gid}
| API | 必須アクション |
|---|---|
| CreateGroupId | mq:MqttInstanceAccess, mq:CreateMqttGroupId |
| DeleteGroupId | mq:MqttInstanceAccess, mq:DeleteMqttGroupId |
| ListGroupId | mq:MqttInstanceAccess, mq:ListMqttGroupId |
| QuerySessionByClientId | mq:MqttInstanceAccess, mq:QuerySessionByClientId |
| BatchQuerySessionByClientIds | mq:MqttInstanceAccess, mq:BatchQuerySessionByClientIds |
デバイス認証情報操作
| API | 必須アクション |
|---|---|
| RegisterDeviceCredential | mq:MqttInstanceAccess, mq:RegisterDeviceCredential |
| GetDeviceCredential | mq:MqttInstanceAccess, mq:GetDeviceCredential |
| ListDeviceCredentialClientId | mq:MqttInstanceAccess, mq:ListDeviceCredentialClientId |
| UnRegisterDeviceCredential | mq:MqttInstanceAccess, mq:UnRegisterDeviceCredential |
| RefreshDeviceCredential | mq:MqttInstanceAccess, mq:RefreshDeviceCredential |
メッセージトレース操作
| API | リソースの命名規則 | 必須アクション |
|---|---|---|
| QueryMqttTraceDevice | -- | mq:MqttInstanceAccess, mq:QueryMqttDeviceTrace |
| QueryMqttTraceMessageOfClient | -- | mq:MqttInstanceAccess, mq:QueryMqttDeviceTrace |
| QueryMqttTraceMessagePublish | インスタンス: acs:mq:*:*:instance/{mqttInstanceId} | mq:MqttInstanceAccess, mq:QueryMqttPubTrace |
| QueryMqttTraceMessageSubscribe | -- | mq:MqttInstanceAccess, mq:QueryMqttSubTrace |
カスタム認証操作
| API | 必須アクション |
|---|---|
| AddCustomAuthIdentity | mq:MqttInstanceAccess, mq:AddCustomAuthIdentity |
| QueryCustomAuthIdentity | mq:MqttInstanceAccess, mq:QueryCustomAuthIdentity |
| UpdateCustomAuthIdentity | mq:MqttInstanceAccess, mq:UpdateCustomAuthIdentity |
| DeleteCustomAuthIdentity | mq:MqttInstanceAccess, mq:DeleteCustomAuthIdentity |
| AddCustomAuthPermission | mq:MqttInstanceAccess, mq:AddCustomAuthPermission |
| QueryCustomAuthPermission | mq:MqttInstanceAccess, mq:QueryCustomAuthPermission |
| UpdateCustomAuthPermission | mq:MqttInstanceAccess, mq:UpdateCustomAuthPermission |
| DeleteCustomAuthPermission | mq:MqttInstanceAccess, mq:DeleteCustomAuthPermission |
| AddCustomAuthConnectBlack | mq:MqttInstanceAccess, mq:DeleteCustomAuthConnectBlack |
| QueryCustomAuthConnectBlack | mq:MqttInstanceAccess, mq:QueryCustomAuthConnectBlack |
| DeleteCustomAuthConnectBlack | mq:MqttInstanceAccess, mq:AddCustomAuthConnectBlack |
トピック操作
すべてのトピック API 操作では、以下のリソース命名規則を使用します。
インスタンス:
acs:mq:*:*:instance/{mqttInstanceId}トピック:
acs:mq:*:*:topic/{mqttInstanceId}/{topic}
| API | 必須アクション |
|---|---|
| CreateTopic | mq:MqttInstanceAccess, mq:CreateMqttTopic |
| ListTopics | mq:MqttInstanceAccess, mq:SUB, mq:ListMqttTopic |
| DeleteTopic | mq:MqttInstanceAccess, mq:PUB, mq:DeleteMqttTopic |
| UpdateTopic | mq:MqttInstanceAccess, mq:UpdateMqttTopic |
ルール操作
すべてのルール API 操作では、以下のリソース命名規則を使用します。
インスタンス:
acs:mq:*:*:instance/{mqttInstanceId}ルール:
acs:mq:*:*:rule/{mqttInstanceId}/{ruleId}
| API | 必須アクション |
|---|---|
| CreateMqttInboundRule | mq:MqttInstanceAccess, mq:CreateMqttInboundRule |
| ListMqttInboundRuleInPages | mq:MqttInstanceAccess, mq:ListMqttInboundRule |
| UpdateMqttInboundRule | mq:MqttInstanceAccess, mq:UpdateMqttInboundRule |
| DeleteMqttInboundRule | mq:MqttInstanceAccess, mq:DeleteMqttInboundRule |
| CreateMqttOutboundRule | mq:MqttInstanceAccess, mq:CreateMqttOutboundRule |
| ListMqttOutboundRuleInPages | mq:MqttInstanceAccess, mq:ListMqttOutboundRule |
| UpdateMqttOutboundRule | mq:MqttInstanceAccess, mq:UpdateMqttOutboundRule |
| DeleteMqttOutboundRule | mq:MqttInstanceAccess, mq:DeleteMqttOutboundRule |
| CreateClientStatusNotifyRule | mq:MqttInstanceAccess, mq:CreateClientStatusNotifyRule |
| ListClientStatusNotifyRuleInPages | mq:MqttInstanceAccess, mq:ListClientStatusNotifyRule |
| UpdateClientStatusNotifyRule | mq:MqttInstanceAccess, mq:UpdateClientStatusNotifyRule |
| DeleteClientStatusNotifyRule | mq:MqttInstanceAccess, mq:DeleteClientStatusNotifyRule |
ディザスタリカバリ操作
| API | 必須アクション |
|---|---|
| DisasterDowngrade | mq:MqttInstanceAccess, mq:DisasterDowngrade |
| DisasterRecovery | mq:MqttInstanceAccess, mq:DisasterRecovery |
完全な API リファレンスについては、「機能別の操作リスト」をご参照ください。