Skip to content

Redisとの連携

このオーソライザーは、Redisデータベースに保存されたルールリストとパブリッシュ/サブスクリプションリクエストを照合することで認可チェックを実装しています。

前提条件

基本的なEMQX認可の概念の知識

データスキーマとクエリ文

ユーザーは以下のデータを返すクエリテンプレートを用意する必要があります。

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

例えば、ルールはRedisハッシュとして保存できます。

ユーザー emqx_u にトピック t/1 のサブスクライブ権限を追加する例:

bash
HSET mqtt_acl:emqx_u t/1 subscribe

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

  • ユーザー emqx_u にトピック t/2 をQoS 1およびQoS 2でサブスクライブする権限を追加する例:
bash
HSET mqtt_acl:emqx_u t/2 '{ "action": "subscribe", "qos": [1, 2] }'
  • ユーザー emqx_u にトピック t/3 への保持メッセージのパブリッシュを拒否する権限を追加する例:
bash
HSET mqtt_acl:emqx_u t/3 '{ "action": "publish", "retain": false }'

対応する設定パラメータは以下の通りです。

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

取得したルールは許可ルールとして扱われます。つまり、トピックフィルターとアクションが一致すればリクエストは許可されます。

TIP

Redisオーソライザーに追加されるすべてのルールは許可ルールであるため、Redisオーソライザーはホワイトリストモードで使用する必要があります。

ダッシュボードでの設定

EMQXダッシュボードを使ってRedisをユーザー認可に利用する設定が可能です。

  1. EMQXダッシュボードの左ナビゲーションツリーで アクセス制御 -> 認可 をクリックし、認可 ページに入ります。

  2. 右上の 作成 をクリックし、バックエンドとして Redis を選択してから 次へ をクリックします。以下のように 設定 タブが表示されます。

    authz-Redis_ee
  3. 以下の指示に従い設定を行います。

    • Redisモード:Redisのデプロイ方法を選択します。SingleSentinelCluster があります。

    • サーバー:EMQXが接続するRedisサーバーのアドレスを指定します(host:port)。

    • データベース:Redisのデータベース名を指定します。

    • ユーザー名:Redisの認証にRedis ACL(Redis 6.0以降)を使用している場合に指定します。Redisサーバーがデフォルトユーザー(ACL無効または未適用)を使用している場合は空欄のままで構いません。

      TIP

      username フィールドはEMQX 5.2.0以降でサポートされています。Redis ACLを利用する場合はこのバージョン以降のデプロイであることを確認してください。

    • パスワード:Redisユーザーのパスワードを指定します。認証が有効なRedisインスタンスに接続する場合は必須です。

      • ユーザー名を入力した場合、このパスワードはRedis ACL設定の認証情報と一致している必要があります。
      • ユーザー名がない場合、このパスワードはdefaultユーザーとして認証するために使用されます(有効な場合)。
    • TLSを有効化:TLSを有効にする場合はトグルスイッチをオンにします。

    • CMD:データスキーマに従ったクエリコマンドを入力します。

    • 詳細設定:同時接続数と接続タイムアウトまでの待機時間を設定します。

      • プールサイズ(任意):EMQXノードからRedisへの同時接続数を整数値で指定します。デフォルトは 8 です。
  4. 作成 をクリックして設定を完了します。

設定項目による設定

EMQXの設定項目を使ってRedisオーソライザーを設定することも可能です。

Redisオーソライザーはタイプ redis で識別されます。オーソライザーはRedisの3種類のデプロイモードに接続可能です。

設定例:

compatibility_mode はEMQX 4.xからのアップグレード時に既存のRedis ACLデータを再利用する場合に v4 に設定できます。