Skip to content

MongoDBとの統合 ​

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

前提条件

EMQX認可の基本概念の知識

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

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

  • permission:ルールが一致した場合に適用されるアクションを指定します。利用可能な値は deny または allow です。
  • action:ルールが関連するリクエストを指定します。可能な値は publish、subscribe、または all です。
  • topic / topics:ルールが適用されるトピックまたはトピックのリストを指定します。トピックフィルターおよびトピックプレースホルダーをサポートします。
  • qos(オプション):現在のルールが適用されるQoSレベルを指定します。値の選択肢は 0、1、2 です。複数のQoSレベルを指定する場合は数値の配列も可能です。デフォルトはすべてのQoSレベルです。
  • retain(オプション):ルールが保持メッセージのパブリッシュを許可するかどうかを示します。値の選択肢は 0、1、または true、false です。デフォルトでは保持メッセージは許可されています。

ユーザー名 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データスキーマに対応するダッシュボードの設定パラメータは Filter:{ username = "${username}" } です。

ダッシュボードでの設定 ​

EMQXダッシュボードを使用して、MongoDBをユーザー認可に利用する設定が可能です。

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

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

    authz-MongoDB_ee
  3. 以下の指示に従って設定を行います。

    Connect:MongoDBへの接続に必要な情報を入力します。

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

    Precondition:任意のVariform式を入力します。EMQXはこの式が true と評価された場合にのみこのオーソライザーを呼び出します。詳細はオーソライザの前提条件を参照してください。

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

    Filter:認証情報の検索に使われるMongoDBセレクターとして解釈されるマップです。プレースホルダーをサポートします。

    Advanced Settings:

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

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

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

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

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

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

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

設定項目による構成 ​

EMQXの設定項目を使ってMongoDBオーソライザーを構成することも可能です。

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

オプションの precondition 設定項目はVariform式を受け入れます。EMQXはこの式が true と評価された場合にのみこのオーソライザーを呼び出します。precondition が省略または空の場合は前提条件は適用されません。詳細はオーソライザの前提条件を参照してください。

サンプル設定: