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 のクライアントがQoS 1でトピック t/1 にパブリッシュすることを拒否する例:
> 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")
}対応する設定パラメータは以下の通りです:
collection = "mqtt_acl"
filter { username = "${username}" }TIP
システム内のユーザー数が多い場合は、クエリ応答時間を短縮しEMQXの負荷を軽減するために、事前にコレクションの最適化およびインデックス作成を行ってください。
このMongoDBデータスキーマに対応するダッシュボードの設定パラメータは Filter:{ username = "${username}" } です。
ダッシュボードでの設定
EMQXダッシュボードを使用して、MongoDBをユーザー認可に利用する方法を設定できます。
EMQXダッシュボードの左側ナビゲーションツリーで Access Control -> Authorization をクリックし、Authorization ページに入ります。
右上の Create をクリックし、次に Backend として MongoDB を選択します。Next をクリックすると、Configuration タブが表示されます。

以下の指示に従って設定を行います。
Connect:MongoDBへの接続に必要な情報を入力します。
- MongoDB Mode:MongoDBのデプロイ形態を選択します。
Single、Replica Set、Shardingがあります。 - 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との通信にレガシープロトコルを使用するかどうかを選択します。
auto、true、falseの選択肢があり、デフォルトはautoで、新しいプロトコルがサポートされているか自動判別します。Record Limit:MongoDBから取得する認可レコードの最大数を制限します。
Skip:認可レコードのリスト取得時にスキップするレコード数を設定します。
Pool size(オプション):EMQXノードからMongoDBへの同時接続数を整数で指定します。デフォルトは
8です。Connect Timeout(オプション):EMQXが接続タイムアウトと判断するまでの待機時間を指定します。単位はミリ秒、秒、分、時間が利用可能です。
- MongoDB Mode:MongoDBのデプロイ形態を選択します。
作成 をクリックして設定を完了します。
設定項目による構成
EMQXの設定項目を使ってMongoDBオーソライザーを設定することも可能です。
MongoDBオーソライザーはタイプ mongodb で識別されます。オーソライザーは3種類のMongoDBデプロイモードに対応しています。
設定例: