Skip to content

PostgreSQL 認可

拡張認可は、PostgreSQLとの統合による認可検証をサポートします。

注意

PostgreSQL認可はEMQXサーバレスのデプロイメントではサポートされていません。

テーブル構造とクエリ文

PostgreSQLオーソライザーは、複数テーブルの結合クエリやビューからのクエリを含む任意のテーブル構造をサポートできます。ユーザーはクエリSQLテンプレートを提供する必要があり、クエリ結果には以下のフィールドが含まれている必要があります。

  • permission:操作の許可権限を指定し、値は allow または deny
  • action:現在のルールが適用される操作を指定し、値は publishsubscribeall のいずれか。
  • topic:現在のルールが適用されるトピックを指定し、トピックフィルターやトピックプレースホルダーを使用可能。
  • qos:(オプション)ルールが適用されるメッセージのQoSを指定し、値は 012 または複数QoSをカンマ区切りで指定可能(例:0,1)。デフォルトはすべてのQoSレベル。
  • retain:(オプション)現在のルールがリテインドメッセージのパブリッシュを許可するかを指定し、値は 01。デフォルトはリテインドメッセージを許可。

テーブル構造の例:

sql
CREATE TABLE mqtt_acl(
  id serial PRIMARY KEY,
  username text NOT NULL,
  permission text NOT NULL,
  action text NOT NULL,
  topic text NOT NULL,
  qos tinyint,
  retain tinyint
);
CREATE INDEX mqtt_acl_username_idx ON mqtt_acl(username);

TIP

上記の例ではインデックスを作成しています。システム内に大量の権限データがある場合は、クエリに使用するテーブルを最適化し、有効なインデックスを利用して多くの接続時のデータ検索速度を向上させ、EMQXの負荷を軽減してください。

ユーザー emqx_u に対してトピック t/1 へのパブリッシュを禁止するルールの例:

sql
postgres=# INSERT INTO mqtt_acl(username, permission, action, topic) VALUES ('emqx_u', 'deny', 'publish', 't/1');
INSERT 0 1

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

bash
query = "SELECT permission, action, topic, qos, retain FROM mqtt_acl WHERE username = ${username}"

PostgreSQL認可の設定

デプロイメントで、アクセス制御 -> 認可 -> 拡張認可 をクリックし、PostgreSQL認可 を選択して 設定 をクリックします。

以下の手順に従って関連設定を完了できます。

  • サーバー:PostgreSQLサーバーのアドレス(host:port)を入力。
  • データベース:PostgreSQLのデータベース名を入力。
  • ユーザー名(任意):ユーザー名を入力。
  • パスワード(任意):パスワードを入力。
  • TLSを有効化:TLSを有効にするかどうかを設定。
  • コネクションプールサイズ(任意):EMQXノードからPostgreSQLデータベースへの同時接続数を整数で指定。デフォルト値は 8
  • SQL:テーブル構造に従ったクエリSQLを入力。詳細は「テーブル構造とクエリ文」を参照。

TIP

  • 現在のデプロイメントがDedicated Flex版の場合は、VPCピアリング接続を作成する必要があり、サーバーアドレスは内部ネットワークアドレスを指定してください。
  • 現在のデプロイメントがBYOC版の場合は、パブリッククラウドコンソールでVPCピアリング接続を作成する必要があります。詳細はBYOCデプロイメントの作成 - VPCピアリング接続の設定を参照してください。サーバーアドレスは内部ネットワークアドレスを指定してください。
  • 「Init resource failure!」が発生した場合は、サーバーアドレスの正確性とセキュリティグループの開放状況を確認してください。