Resource Access Management (RAM) を使用すると、Alibaba Cloud アカウントの AccessKey ペアを他のユーザーと共有することなく、ご利用の ApsaraMQ for MQTT リソースへのアクセスを制御できます。AccessKey ペアは、AccessKey ID と AccessKey Secret の 2 つの要素で構成されます。RAM ユーザーを作成し、各ユーザーに必要な最小限の権限のみを付与できます。
アクセスの制御の仕組み
ApsaraMQ for MQTT では、RAM ポリシーを通じてアクセスが承認されます。各ポリシーでは、RAM ユーザーがどのリソースに対してどのような操作を実行できるかを指定します。リソースタイプは以下の 4 種類があります:
| リソースタイプ | 説明 | 命名フォーマット | 例 |
|---|---|---|---|
| インスタンス | MQTT ブローカーのインスタンス | acs:mq:*:*:instance/{mqttInstanceId} | acs:mq:*:*:instance/post-cn-09k1noy**** |
| Topic | インスタンス内のメッセージトピック | 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 呼び出し、クライアントによるパブリッシュ/サブスクライブのすべての権限カテゴリに適用されます。
システムポリシー
ApsaraMQ for MQTT では、4 つのデフォルトのシステムポリシーが提供されています。
| ポリシー | 説明 |
|---|---|
| AliyunMQFullAccess | ApsaraMQ for MQTT のすべての操作(コンソール経由)に対する完全な管理アクセス権を付与します。これは、Alibaba Cloud アカウントと同等の権限です。 |
| AliyunMQPubOnlyAccess | パブリッシュ専用のアクセス権です。Alibaba Cloud アカウント下のすべてのリソースに対して、SDK を通じたメッセージの送信を許可します。 |
| AliyunMQSubOnlyAccess | サブスクライブ専用のアクセス権です。Alibaba Cloud アカウント下のすべてのリソースに対して、SDK を通じたメッセージの受信を許可します。 |
| AliyunMQReadOnlyAccess | 読み取り専用のアクセス権です。コンソールまたは API 呼び出しを通じてリソース情報の表示を許可します。 |
ApsaraMQ for MQTT には独自の独立したシステムポリシーは存在しません。これらのポリシーは ApsaraMQ for RocketMQ と共有されており、いずれかのポリシーを RAM ユーザーにアタッチすると、両サービスへのアクセスが可能になります。
ApsaraMQ for MQTT の AliyunMQFullAccess および AliyunMQReadOnlyAccess は、コンソールにおけるインスタンス一覧の表示権限を含んでいません。インスタンス一覧の表示を有効化するには、mq:MqttInstanceAccess を別途付与してください。詳細については、「インスタンス管理操作」をご参照ください。カスタムポリシーの操作
カスタム権限ポリシーを使用すると、RAM ユーザーが特定のリソースに対して実行できる操作を正確に指定できます。以下では、スコープごとに分類されたすべての利用可能な操作を一覧表示します。
カスタム権限ポリシーのサンプルについては、「権限ポリシーサンプル」をご参照ください。
クライアントのパブリッシュおよびサブスクライブ操作
これらの操作は、ApsaraMQ for MQTT SDK を通じたメッセージの送信および受信を制御します。
リソースの命名フォーマット:
Topic:
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 リファレンスについては、「機能別オペレーション一覧」をご参照ください。