Skip to content

Redisとの統合 ​

EMQXはパスワード認証のためにRedisとの統合をサポートしています。EMQX Redis認証機能は現在、Single、Redis Sentinel、およびRedis Clusterの3つの異なるモードで動作するRedisへの接続をサポートしています。本節では、サポートされているデータスキーマの詳細と、EMQXダッシュボードおよび設定ファイルでの設定方法について説明します。

前提条件:

EMQX認証の基本概念の知識

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

Redis認証は、あらかじめ定義されたフィールド名を持つRedisハッシュに格納された認証情報を利用します。

  • password_hash:必須;データベースに格納されるパスワード(プレーンテキストまたはハッシュ化されたもの);
  • salt:任意;salt = "" またはこのフィールドを削除するとソルト値が追加されないことを示す;
  • is_superuser:任意;現在のクライアントがスーパーユーザーかどうかのフラグ;デフォルトは false。

例えば、ユーザー名 user123、パスワード secret、プレフィックスとしてのソルト salt、パスワードハッシュ sha256 を持つスーパーユーザー(is_superuser: true)のドキュメントを追加する場合、クエリ文は以下のようになります。

bash
>redis-cli
127.0.0.1:6379> HSET mqtt:user123 is_superuser 1 salt salt password_hash ac63a624e7074776d677dd61a003b8c803eb11db004d0ec6ae032a5d7c9c5caf
(integer) 3

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

password_hash_algorithm {
    name = sha256
    salt_position = prefix
}

cmd = "HMGET mqtt:${username} password_hash salt is_superuser"

TIP

password_hash という名前はハッシュ化されたパスワードを格納することを意図しています。しかし、RedisにはMySQLのような as 構文がないため、EMQX 5.0ではEMQX 4.xの互換性のために password フィールドも保持しています。

そのため、cmd を HMGET mqtt:${username} password salt is_superuser と設定することも可能です。

ダッシュボードでの設定 ​

EMQXダッシュボードを使ってRedisをパスワード認証に利用する設定ができます。

  1. EMQXダッシュボードの左側ナビゲーションメニューから アクセス制御 -> 認証 をクリックします。
  2. 認証 ページの右上にある 作成 をクリックします。
  3. メカニズム に パスワードベース を選択し、バックエンド に Redis を選択して、以下のように 設定 タブに進みます。
Redisによる認証

以下の指示に従って認証の設定を行います。

接続:Redisへの接続情報を入力します。

  • Redisモード:Redisの展開形態を選択します。Single、Sentinel、Cluster のいずれかを選択します。

  • サーバー:EMQXが接続するRedisサーバーのアドレスを指定します。Redisモード が Sentinel または Cluster の場合は、接続するすべてのRedisサーバーをカンマ(,)区切りで入力してください。

  • Sentinel名:使用する名前を指定します。文字列型。Redisモード を Sentinel に設定した場合のみ必要です。

  • データベース:Redisのデータベース名。文字列型。

  • ユーザー名:Redisへの接続に使用するユーザー名を指定します。このフィールドは、Redis 6.0で導入されたRedis ACLを利用している場合に必須です。デフォルトユーザー(ACLが無効または適用されていない)を使用している場合は空欄のままで構いません。

    TIP

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

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

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

TLS設定:TLSを有効にする場合はトグルスイッチをオンにします。TLSの有効化についてはネットワークとTLSを参照してください。

接続設定:同時接続数を設定します。

  • プールサイズ(任意):EMQXノードからRedisサーバーへの同時接続数を指定します。デフォルトは 8 です。

認証設定:認証に関する設定を行います。

  • パスワードハッシュ:プレーンテキストのパスワードに適用され、結果がデータベースに格納される前にハッシュ化されるアルゴリズムを選択します。選択肢は plain、md5、sha、sha256、sha512、bcrypt、pbkdf2 です。選択したアルゴリズムに応じて追加設定があります。
    • md5、sha、sha256、sha512 の場合:
      • ソルト位置:ソルト(ランダムデータ)をパスワードにどのように混ぜるかを指定します。suffix(後置)、prefix(前置)、disable(無効)から選択可能です。外部ストレージからEMQX組み込みデータベースにユーザー認証情報を移行する場合を除き、デフォルトのままで問題ありません。
      • ハッシュ結果は16進数文字列として表現され、大文字小文字を区別せずに格納された認証情報と比較されます。
    • plain の場合:
      • ソルト位置 は disable に設定してください。
    • bcrypt の場合:
      • ソルトラウンド:ハッシュ関数の適用回数を定義します。値は 2^ソルトラウンド で表され、「コストファクター」とも呼ばれます。デフォルトは 10、許容範囲は 5 から 10 です。セキュリティ強化のためにはより高い値が推奨されます。コストファクターを1増やすと認証に必要な時間が倍増します。
    • pbkdf2 の場合:
      • 疑似乱数関数:キー生成に使用するハッシュ関数を選択します(例:sha256)。
      • 反復回数:ハッシュ関数を繰り返す回数を設定します。デフォルトは 4096 です。
      • 派生キー長(任意):生成されるキーのバイト長を指定します。空欄の場合は選択した疑似乱数関数に基づく長さが使用されます。
      • ハッシュ結果は16進数文字列として表現され、大文字小文字を区別せずに格納された認証情報と比較されます。
  • CMD:Redisクエリコマンド。

設定が完了したら、作成 をクリックしてください。

設定項目による設定 ​

EMQXの設定項目を使ってRedis認証機能を設定できます。

Redis認証は mechanism = password_based および backend = redis で識別されます。

EMQXは3種類のRedisインストール形態に対応しています。