Skip to content

Redis認可

拡張認可はRedisとの連携による認可検証をサポートしています。

注意

Redis認可はEMQX Serverlessのデプロイメントではサポートされていません。

データ構造とクエリコマンド

Redisオーソライザーは、Redisハッシュを使用して認可データを格納することをサポートしています。ユーザーはクエリコマンドのテンプレートを提供する必要があり、クエリ結果には以下のフィールドが含まれている必要があります。

  • topic:現在のルールが適用されるトピックを指定します。トピックフィルターやトピックプレースホルダーを使用可能です。
  • action:現在のルールが適用される操作を指定します。値は publishsubscribeall のいずれかです。
  • qos:(オプション)ルールが適用されるメッセージのQoSを指定します。値は 012 のいずれか、または複数のQoSをNumber配列で指定可能です。デフォルトはすべてのQoSレベルです。
  • retain:(オプション)現在のルールがリテインドメッセージのパブリッシュをサポートするかどうかを指定します。値は truefalse で、デフォルトはリテインドメッセージを許可します。

ユーザー emqx_u に対し、トピック t/1 のサブスクライブを許可する権限データの追加例:

HSET mqtt_acl:emqx_u t/1 subscribe

Redisの構造上の制限により、qosretain フィールドを使用する場合は、topic 以外の情報をJSON文字列として格納する必要があります。例えば:

  • ユーザー emqx_u に対し、トピック t/2 のQoS1およびQoS2でのサブスクライブを許可する権限データの追加例:
json
HSET mqtt_acl:emqx_u t/2 '{ "action": "subscribe", "qos": [1, 2] }'
  • ユーザー emqx_u に対し、トピック t/3 へのリテインドメッセージのパブリッシュを拒否する権限データの追加例:
json
HSET mqtt_acl:emqx_u t/3 '{ "action": "publish", "retain": false }'

対応する設定項目は以下の通りです。

bash
cmd = "HGETALL mqtt_acl:${username}"

Redis認可の設定

デプロイメントにて、アクセス制御 -> 認可 -> 拡張認可 をクリックし、Redis認可 を選択して 設定 をクリックします。

  • Redisモード:Redisデータベースのデプロイモードを選択します。選択肢は SingleSentinelCluster です。
  • サーバー:Redisサーバーのアドレス(host:port)を入力します。デプロイモードがSentinelまたはClusterの場合は、関連するすべてのRedisサーバーのアドレスをカンマ区切りで、host1:port1,host2:port2,... の形式で指定する必要があります。
  • Sentinel名:デプロイモードが Sentinel の場合のみ必要です。Redis Sentinel構成で必要なマスターサーバー名を指定します。
  • データベース:Redisデータベースのインデックスを整数で指定します。
  • パスワード(オプション):認証パスワードを入力します。
  • TLS有効化:TLSを有効にするかどうかを設定します。
  • コネクションプールサイズ(オプション):EMQXノードからRedisデータベースへの同時接続数を整数で指定します。デフォルト値は 8 です。
  • CMD:Redisクエリコマンドを指定します。

TIP

  • 現在のデプロイメントが専用版の場合、VPCピアリング接続を作成する必要があり、サーバーアドレスは内部ネットワークアドレスを指定してください。
  • 現在のデプロイメントがBYOC版の場合は、パブリッククラウドコンソールでVPCピアリング接続を作成する必要があります。詳細はBYOCデプロイメントの作成 - VPCピアリング接続の設定をご参照ください。サーバーアドレスは内部ネットワークアドレスを指定してください。
  • 「Init resource failure!」が発生した場合は、サーバーアドレスの正確性およびセキュリティグループの開放状況を確認してください。