Skip to content

Redisとの連携 ​

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

前提条件

EMQX認可の基本概念の知識が必要です。

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

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

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

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

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

bash
HSET mqtt_acl:emqx_u t/1 subscribe

Redisの構造上の制限により、qos と retain フィールドを使用する場合、トピック以外のフィールドは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のデプロイ方法を選択します。Single、Sentinel、Cluster から選べます。

    • サーバー: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ユーザーとして認証されます(有効な場合)。
    • 前提条件:任意のVariform式を入力します。式がtrueを返す場合にのみEMQXはこのオーソライザーを呼び出します。詳細はオーソライザーの前提条件を参照してください。

    • 互換モード:EMQX 4.xのRedis ACLデータ形式との互換性を有効にするかどうかを制御します。

      • Disabled (Default):現在のルール形式を使用します。
      • v4:EMQX 4.xの旧Redis ACLデータとの互換性を有効にし、既存データを変更せずにアップグレード時に再利用可能にします。

      TIP

      このオプションはEMQX 4.xからのアップグレード時に既存のRedis ACLデータを変更せずに再利用するためのものです。新規導入の場合は無効のままにして現在のルール形式を使用することを推奨します。

    • TLSを有効化:TLSを有効にする場合はトグルスイッチをオンにします。

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

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

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

設定項目による設定 ​

EMQXの設定項目を使ってRedisオーソライザーを設定できます。

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

オプションの precondition 設定項目はVariform式を受け付けます。式がtrueを返す場合にのみEMQXはこのオーソライザーを呼び出します。preconditionが省略または空の場合は前提条件は適用されません。詳細はオーソライザーの前提条件を参照してください。

設定例:

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