Redis認可
拡張認可はRedisとの連携による認可検証をサポートしています。
注意
Redis認可はEMQX Serverlessのデプロイメントではサポートされていません。
データ構造とクエリコマンド
Redisオーソライザーは、Redisハッシュを使用して認可データを格納することをサポートしています。ユーザーはクエリコマンドのテンプレートを提供する必要があり、クエリ結果には以下のフィールドが含まれている必要があります。
topic
:現在のルールが適用されるトピックを指定します。トピックフィルターやトピックプレースホルダーを使用可能です。action
:現在のルールが適用される操作を指定します。値はpublish
、subscribe
、all
のいずれかです。qos
:(オプション)ルールが適用されるメッセージのQoSを指定します。値は0
、1
、2
のいずれか、または複数のQoSをNumber配列で指定可能です。デフォルトはすべてのQoSレベルです。retain
:(オプション)現在のルールがリテインドメッセージのパブリッシュをサポートするかどうかを指定します。値はtrue
、false
で、デフォルトはリテインドメッセージを許可します。
ユーザー emqx_u
に対し、トピック t/1
のサブスクライブを許可する権限データの追加例:
HSET mqtt_acl:emqx_u t/1 subscribe
Redisの構造上の制限により、qos
や retain
フィールドを使用する場合は、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データベースのデプロイモードを選択します。選択肢は
Single
、Sentinel
、Cluster
です。 - サーバー: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!」が発生した場合は、サーバーアドレスの正確性およびセキュリティグループの開放状況を確認してください。