PostgreSQL 認証
拡張認証は、PostgreSQL 統合によるパスワード認証をサポートします。
注意
PostgreSQL 認証は EMQX サーバレスのデプロイメントではサポートされていません。
テーブル構造とクエリ文
PostgreSQL 認証機能は、複数テーブルの結合クエリやビューからのクエリを含む任意のテーブル構造をサポートできます。ユーザーはクエリの SQL テンプレートを提供し、クエリ結果に以下のフィールドが含まれている必要があります。
password_hash:必須。データベース内のプレーンテキストまたはハッシュ化されたパスワードフィールド。salt:任意。空または存在しない場合は空のソルト(salt = "")とみなされます。is_superuser:任意。現在のクライアントがスーパーユーザーかどうかを示します。デフォルトはfalseです。trueに設定すると、そのユーザー名を使用するクライアントは認可制約の対象外となります。スーパーユーザーの設定は推奨されません。
テーブル構造の例:
CREATE TABLE `mqtt_user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`password_hash` varchar(100) DEFAULT NULL,
`salt` varchar(35) DEFAULT NULL,
`created` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;TIP
上記の例では、クエリを支援するために暗黙の UNIQUE インデックスフィールド(username)を作成しています。ユーザー数が多いシステムでは、クエリに使用するテーブルが最適化され、効果的なインデックスが利用されていることを確認してください。これにより、多数の接続時のデータ検索速度が向上し、EMQX の負荷軽減につながります。
このテーブルでは username を検索条件として使用します。例えば、ユーザー名 emqx_u、パスワード public、ソルト slat_foo123、ハッシュ方式 sha256、スーパーユーザーフラグ false のユーザーを追加する場合:
mysql> INSERT INTO mqtt_user(username, password_hash, salt, is_superuser) VALUES ('emqx_u', SHA2(concat('public', 'slat_foo123'), 256), 'slat_foo123', 0);
Query OK, 1 row affected (0.01 sec)対応するクエリ文およびパスワードハッシュ方式の設定パラメータは以下の通りです。
- パスワード暗号化方式:
sha256 - ソルトモード:
suffix - SQL:
SELECT password_hash, salt, is_superuser FROM mqtt_user WHERE username = ${username} LIMIT 1PostgreSQL 認証の設定
デプロイメント画面で Access Control -> Extended Authentication をクリックし、PostgreSQL Authentication を選択して Configure をクリックします。
以下の関連設定を完了できます。
Server:PostgreSQL サーバーのアドレス(host:port)を入力します。
TIP
- 現在のデプロイメントが Dedicated Flex エディションの場合は、VPC ピアリング接続を作成し、内部ネットワークアドレスをサーバーアドレスとして使用してください。
- 現在のデプロイメントが BYOC エディションの場合は、パブリッククラウドコンソールで VPC ピアリング接続を作成してください。詳細は VPC ピアリング接続の作成 を参照し、内部ネットワークアドレスをサーバーアドレスとして使用してください。
- 「Init resource failure!」というメッセージが表示される場合は、サーバーアドレスが正しいか、セキュリティグループが開放されているかを確認してください。
Database:PostgreSQL のデータベース名を入力します。
Username(任意):ユーザー名を入力します。
Password(任意):パスワードを入力します。
Enable TLS:TLS を有効にするかどうかを設定します。
Connection Pool Size(任意):EMQX ノードから PostgreSQL データベースへの同時接続数を整数で指定します。デフォルト値は
8です。Query Timeout:接続タイムアウト時間を入力します。単位は時間、分、秒、ミリ秒が選択可能です。
Password Hash:パスワード保存に使用するハッシュアルゴリズムを選択します(plain、md5、sha、bcrypt、pbkdf2 など)。
plain、md5、sha、sha256、sha512の場合は以下も設定が必要です。- Salt Position:ソルトとパスワードの結合方法を指定します。通常は変更不要ですが、外部ストレージから EMQX 内蔵データベースに認証情報を移行する場合に設定します。選択肢は suffix(パスワードの末尾にソルトを追加)、prefix(パスワードの先頭にソルトを追加)、disable(ソルトを使用しない)です。※plain を選択した場合はソルトモードを disable に設定してください。
pbkdf2アルゴリズムの場合は以下も設定が必要です。- Pseudorandom function:鍵生成に使用するハッシュ関数を指定します(例:sha256)。
- Iteration Count:ハッシュの繰り返し回数を指定します。デフォルト値は 4096 です。
- Derived key length(任意):生成する鍵の長さを指定します。未指定の場合はハッシュ関数により決定されます。
Precondition(任意):1~256 文字の Variform 式を入力し、EMQX がクライアントに対してこの認証機能を呼び出すか制御します。式の評価結果が文字列
'true'の場合のみ認証機能が呼び出され、それ以外はスキップされます。この項目は EMQX 6.1 以降のデプロイメントで利用可能です。対応するクライアント属性や例は Authenticator Preconditions を参照してください。SQL:テーブル構造に応じたクエリ SQL を記入します。具体的な要件は SQL テーブル構造とクエリ文 を参照してください。