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)のドキュメントを追加する場合、クエリ文は以下のようになります:
>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をパスワード認証に使用する設定ができます。
- EMQXダッシュボードの左側ナビゲーションメニューから アクセス制御 -> 認証 をクリックします。
- 認証 ページの右上にある 作成 をクリックします。
- メカニズム に パスワードベース を選択し、バックエンド に Redis を選択すると、以下のように 設定 タブが表示されます。

以下の手順に従って認証の設定を行ってください:
接続:Redisへの接続情報を入力します。
Redisモード:Redisのデプロイ方法を選択します。
Single、Sentinel、Clusterのいずれかを選択します。サーバー:EMQXが接続するRedisサーバーのアドレスを指定します。Redisモード が
SentinelまたはClusterの場合は、接続するすべてのRedisサーバーをカンマ(,)区切りで入力してください。Sentinel名:使用する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増やすごとに認証に必要な時間が倍増します。
- ソルトラウンド:ハッシュ関数の適用回数を2の累乗で表した「コストファクター」です。デフォルトは
pbkdf2の場合:- 疑似乱数関数:鍵生成に使用するハッシュ関数を選択します(例:
sha256)。 - 反復回数:ハッシュ関数の実行回数を設定します。デフォルトは
4096です。 - 生成鍵長(任意):生成される鍵の長さ(バイト単位)を指定します。空欄の場合は疑似乱数関数の規定値が使用されます。
- ハッシュ結果は16進数文字列で表現され、大文字小文字を区別せずに保存された認証情報と比較されます。
- 疑似乱数関数:鍵生成に使用するハッシュ関数を選択します(例:
- CMD:Redisクエリコマンド。
設定が完了したら、作成 をクリックしてください。
設定ファイルでの設定
EMQXの設定ファイルを使ってRedis認証を設定できます。
Redis認証は mechanism = password_based および backend = redis で識別されます。
EMQXは3種類のRedisインストール形態に対応しています。