Skip to content

MongoDBとの統合

このオーソライザーは、MongoDBデータベースに保存されたルールのリストとパブリッシュ/サブスクライブ要求を照合することで認可チェックを実装します。

前提条件

基本的なEMQX認可の概念の知識

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

MongoDBオーソライザーは、認可ルールをMongoDBドキュメントとして保存することをサポートしています。ユーザーは、結果に以下のフィールドが含まれるようにクエリテンプレートを提供する必要があります。

  • permission の値は、ルールがマッチした場合に適用されるアクションを指定します。deny または allow のいずれかである必要があります。
  • action の値は、ルールが関連するリクエストを指定します。publishsubscribe、または all のいずれかである必要があります。
  • topic の値は、ルールに関連するトピックのフィルターを指定します。ワイルドカードおよびトピックプレースホルダーをサポートする文字列である必要があります。
  • qos(任意)は、現在のルールが適用されるQoSレベルを指定します。値は 012 のいずれか、または複数のQoSレベルを指定する数値配列です。デフォルトはすべてのQoSレベルです。
  • retain(任意)は、現在のルールが保持メッセージをサポートするかどうかを指定します。値は 01、または truefalse のいずれかです。デフォルトは保持メッセージを許可します。

ユーザー名 emqx_u のクライアントがトピック t/1 にQoS 1でパブリッシュすることを拒否する例:

js
> db.mqtt_acl.insertOne(
  {
      "username": "emqx_u",
      "clientid": "emqx_c",
      "ipaddress": "127.0.0.1",
      "permission": "deny",
      "action": "publish",
      "qos": 1,
      "topics": ["t/1"]
  }
);
{
  acknowledged: true,
  insertedId: ObjectId("62b4a1a0e693ae0233bc3e98")
}

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

bash
collection = "mqtt_acl"
filter { username = "${username}" }

TIP

システム内のユーザー数が多い場合は、クエリの応答時間を短縮しEMQXの負荷を軽減するために、事前にコレクションを最適化およびインデックス化してください。

このMongoDBデータスキーマに対するDashboardの対応設定パラメータは Filter: { username = "${username}" } です。

Dashboardでの設定

EMQX Dashboardを使ってMongoDBをユーザー認可に利用する設定が可能です。

  1. EMQX Dashboardの左ナビゲーションツリーで Access Control -> Authorization をクリックし、Authorization ページに入ります。

  2. 右上の Create をクリックし、BackendMongoDB を選択してから Next をクリックします。以下の Configuration タブが表示されます。

    MongoDB認可設定画面
  3. 以下の指示に従って設定を行います。

    Connect: MongoDBに接続するための情報を入力します。

    • MongoDB Mode: MongoDBのデプロイ方式を選択します。SingleReplica SetSharding のいずれかです。
    • Server: EMQXが接続するサーバーアドレス(host:port)を指定します。
    • Database: MongoDBのデータベース名を指定します。
    • Collection: 認可ルールが保存されているMongoDBコレクション名。データ型は文字列です。
    • Username: MongoDBのユーザー名を指定します。
    • Password: MongoDBのユーザーパスワードを指定します。

    TLS Configuration: TLSを有効にする場合はトグルスイッチをオンにします。

    Filter: 資格情報検索用のMongoDBセレクターとして解釈されるマップです。プレースホルダーが使用可能です。

    Advanced Settings:

    • Auth Source: MongoDB接続時に使用する認証ソースを指定します。特定のデータベースやユーザー資格情報を管理するMongoDB認証データベースを指定可能です。

    • Use Legacy Protocol: MongoDBとの通信にレガシープロトコルを使用するかどうかを選択します。autotruefalse のいずれか。デフォルトは auto で、新しいプロトコルがサポートされているか自動判定します。

    • Record Limit: MongoDBから取得する認可レコードの最大数を制限します。

    • Skip: 認可レコードの取得時にスキップするレコード数を設定します。

    • Pool size(任意): EMQXノードからMongoDBへの同時接続数を整数で指定します。デフォルトは 8

    • Connect Timeout(任意): EMQXが接続タイムアウトと判断するまでの待機時間を指定します。単位はミリ秒、秒、分、時間がサポートされます。

  4. Create をクリックして設定を完了します。

設定項目による設定

EMQXの設定項目を使ってMongoDBオーソライザーを設定できます。

MongoDBオーソライザーは mongodb タイプで識別されます。オーソライザーは3種類のMongoDBデプロイモードに接続することをサポートしています。

設定例: