Skip to content

拡張認証

拡張認証では、ユーザーが独自の認証サービスを利用できるようにし、MySQLやRedisなどの外部データベースをデータソースとしてサポートしたり、HTTPサービスと接続して認証を行ったりできます。

注意

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

拡張認証データソース

HTTP認証

MySQL認証

PostgreSQL認証

Redis認証

JWT認証

TIP

拡張認証データソースは最大2つまで作成可能です。

認証器の前提条件

EMQX 6.1以降のデプロイメントでは、各拡張認証器に対して前提条件を割り当てることができ、特定のクライアントに対して認証器を呼び出すかどうかを制御できます。前提条件はクライアント属性を評価するVariform式です。式が文字列 'true' に評価されない場合、現在の認証器はスキップされ、EMQXは認証チェーン内の次の有効な認証器へ進みます。

前提条件により認証チェーン内で条件付きのロジックを実装できます。接続情報や属性に基づいて異なる認証器をクライアントに適用できるため、EMQXは適切な場合にのみ認証器を呼び出し、外部システムへの不要なリクエストを回避します。

前提条件で使用可能なクライアント属性

前提条件には以下のクライアント属性を使用できます。

  • username:クライアントのユーザー名
  • password:クライアントのパスワード
  • clientid:クライアントID
  • client_attrs.*:クライアント属性
  • cert_common_name:クライアントのTLS証明書のコモンネーム(CN)
  • cert_subject:クライアントのTLS証明書のサブジェクトフィールド
  • peersni:TLSクライアントが送信するサーバー名表示(SNI)
  • listener:リスナーID(例:ssl:default

前提条件の設定方法

HTTP、MySQL、PostgreSQL、Redis、JWT、またはJWKS認証器を作成または編集する際に、Precondition にVariform式を入力します。このフィールドは任意です。設定すると、式は1〜256文字である必要があります。空欄のままにするか既存の式をクリアすると、EMQXは追加条件を評価せずに認証チェーン内の位置に従って認証器を呼び出します。

認証器の呼び出し制御例は以下の通りです。

  • クライアントが ssl:default リスナー経由で接続した場合のみ認証器を呼び出す:

    text
    str_eq(listener, 'ssl:default')
  • ユーザー名が空の場合は認証器をスキップする:

    text
    not(is_empty_val(username))

式が無効な場合、設定は保存できず、最後に有効だった設定が有効のままです。Cloud Consoleに表示されるエラーに基づいて式を修正し、再度お試しください。前提条件と式の構文の詳細は、EMQXドキュメントの認証器の前提条件をご参照ください。

認証の順序

拡張認証データソースを追加した後、認証ソースの順序を並べ替えられます。デプロイメントは左から右の順に認証を行い、デフォルトの認証チェーン順序は「デフォルト認証 -> 拡張認証」です。

  • 認証に成功した場合、認証チェーンは終了し、クライアントの接続が許可されます。
  • 認証に失敗した場合、認証チェーンは終了し、クライアントのアクセスは拒否されます。
  • 現在のデータソースが該当しない場合、次の認証ソースに進みます。

認証チェーンの作成方法

デプロイメントの アクセス制御 -> 認証 -> 拡張認証 ページで認証チェーンを作成できます。拡張認証データソースが設定され接続されると、ページに 順序設定 セクションが表示されます。

  1. 認証順序 をクリックし、認証順序 ページに入ります。
  2. 認証データソースのアイコンをドラッグして左右に並べ替えます。
  3. 完了したら 確定 をクリックして順序を保存します。

auth_management

外部リソースキャッシュ

TIP

外部リソースキャッシュ機能はEMQXバージョン5.9以降のDedicated Flexエディションで利用可能です。

EMQXブローカーは、MySQLやRedisなどの外部バックエンドから取得した認証結果をキャッシュする仕組みを提供しています。このキャッシュは認証結果の検索性能を向上させ、特に高スループット環境での外部リソースへの繰り返しアクセスを削減します。

注意

外部リソースキャッシュは拡張データソースにのみ適用されます。パスワード認証(デフォルト)ではEMQXブローカーはこのキャッシュを使用しません。

外部リソースキャッシュの動作

外部リソースキャッシュは認証結果を保存し、クラスター内のすべてのクライアントセッションで共有されます。これにより外部認証バックエンドへの重複クエリを回避します。

  1. クライアントが接続し認証がトリガーされます。
  2. EMQXブローカーはキャッシュに以前保存された結果を確認します。
    • 有効な結果が見つかれば Cache Hit とカウントされ、外部バックエンドへの呼び出しは行われません。
    • 結果が見つからなければ Cache Miss とカウントされ、EMQXブローカーは外部バックエンドに問い合わせます。
  3. バックエンドから返された結果は将来の利用のためキャッシュに保存され、Cache Insert メトリクスが増加します。

この仕組みによりレイテンシを低減し、バックエンドの使用を最小化し、負荷時のシステム応答性を維持します。

外部リソースキャッシュの有効化と設定

デプロイメントの アクセス制御 -> 認証 -> 拡張認証 ページで外部リソースキャッシュを有効化および設定できます。拡張認証データソースが設定され接続されると、ページに キャッシュ設定 セクションが表示されます。

  1. 外部リソースキャッシュ設定 をクリックしてサイドパネルを開きます。
  2. パネル内の キャッシュを有効化 ボタンでキャッシュ機能のオン/オフを切り替えます。有効化後、以下のキャッシュ設定を行います。
    • 最大キャッシュ件数:ノードあたりの最大キャッシュエントリ数。デフォルト:1,000,000
    • 最大メモリ:キャッシュメモリ使用量の上限。デフォルト:100 MB
    • キャッシュTTL:キャッシュエントリの有効期間。デフォルト:1分
  3. 更新 をクリックして設定を反映します。

外部リソースキャッシュの状態監視

キャッシュメトリクスをリアルタイムで確認するには、外部リソースキャッシュ設定 の横の矢印にカーソルを合わせ、外部リソースキャッシュの状態 を選択します。サイドパネルが表示され、キャッシュメトリクスが確認できます。

メトリクスには以下が含まれます。

  • メモリ使用量:キャッシュが現在使用している総メモリ量
  • キャッシュエントリ数:保存されているキャッシュ結果の総数
  • Cache Hits:EMQXがキャッシュ内で有効な結果を見つけ、外部バックエンドへの呼び出しを回避した回数
    • 表示されるメトリクス:現在のレート、5分平均、最大レート
  • Cache Misses:EMQXがキャッシュ内で結果を見つけられず、バックエンド問い合わせが発生した回数
    • 表示されるメトリクス:現在のレート、5分平均、最大レート
  • Cache Inserts:ミス後に新たにキャッシュに追加された結果の回数
    • 表示されるメトリクス:現在のレート、5分平均、最大レート

パネル右上のボタンで統計情報の更新やリセットが可能です。

external_resource_cache_status