Redis 認可
拡張認可は、Redisとの統合による認可検証をサポートします。
注意
Redis認可はEMQXサーバレスのデプロイメントではサポートされていません。
データ構造とクエリコマンド
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 subscribeRedisの構造上の制限により、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のデータベースインデックスを整数で指定します。
- ユーザー名:接続に使用するRedisのユーザー名を指定します。Redis 6.0以降で導入されたRedis ACLを使用している場合は必須です。Redisサーバーがデフォルトユーザー(ACLが無効または適用されていない)を使用している場合は空欄のままで構いません。
- パスワード(オプション):認証パスワードを入力します。
- TLSを有効化:TLSを有効にするかどうかを設定します。
- 接続プールサイズ(オプション):EMQXノードからRedisデータベースへの同時接続数を整数で指定します。デフォルトは
8です。 - CMD:Redisクエリコマンド。
TIP
- 現在のデプロイメントがDedicated Flexエディションの場合、VPCピアリング接続を作成する必要があり、サーバーアドレスは内部ネットワークアドレスを指定してください。
- 現在のデプロイメントがBYOCエディションの場合は、パブリッククラウドコンソールでVPCピアリング接続を作成する必要があります。詳細はBYOCデプロイメントの作成 - VPCピアリング接続の設定をご参照ください。サーバーアドレスは内部ネットワークアドレスを指定してください。
- 「Init resource failure!」が発生した場合は、サーバーアドレスの正確性とセキュリティグループの開放状況を確認してください。