Skip to content

デフォルト認可

デフォルト認可は組み込みデータベースに基づいており、ユーザーに低コストでプラグアンドプレイの認可方法を提供します。本ドキュメントでは、クライアントID、ユーザー名、クォータ制限の設定方法や、ホワイトリストおよびプレースホルダーを使用した高度な権限制御について詳しく解説します。

認可情報の追加

注意

組み込み認可の最大エントリー数は、デプロイ接続数の2倍で、上限は100,000件です。この制限を超える場合は、外部ACLの利用を推奨します。

認可は以下の3つのレベルで制御可能です。

  1. クライアントID:特定のクライアントIDに対する認可検証。
  2. ユーザー名:特定のユーザー名に対する認可検証。
  3. 全ユーザー:すべてのユーザーに対するトピックベースの認可検証。

クライアント認可ページで**+ 追加**を選択し、現在のカテゴリに基づいて新しい認可情報を追加します。

クライアントID認可の追加

クライアントIDタブで、特定のクライアントIDに対する認可ルールを作成します。

  • クライアントID:この認可ルールを適用するクライアントID。
  • トピック:このルールに対応するトピックを設定します。
  • 操作:このルールに対応する操作を設定します。選択肢:PublishSubscribePublish and Subscribe
  • 許可:現在のクライアントに対して操作を許可するかどうか。選択肢:AllowDeny

ユーザー名認可の追加

ユーザー名タブで、特定のユーザー名に対する認可ルールを作成します。

  • ユーザー名:このルールに適用するユーザー名。
  • トピック:このルールに対応するトピックを設定します。
  • 操作:このルールに対応する操作を設定します。選択肢:PublishSubscribePublish and Subscribe
  • 許可:現在のユーザーに対して操作を許可するかどうか。選択肢:AllowDeny

トピック認可の追加

全ユーザータブで、特定のトピックに対する認可ルールを作成します。

  • トピック:このルールに対応するトピックを設定します。
  • 操作:このルールに対応する操作を設定します。選択肢:PublishSubscribePublish and Subscribe
  • 許可:現在のトピックに対して操作を許可するかどうか。選択肢:AllowDeny

プレースホルダーの使用

トピックでプレースホルダーを使用すると、トピックマッチングルール内で現在のクライアント情報を動的に置換できます。サポートされているプレースホルダーは以下の通りです。

  • ${clientid}
  • ${username}

すべてのユーザーに対して特定のトピックのみのサブスクライブまたはパブリッシュを制限したい場合は、以下のように設定できます。

  • ユーザー名 ${username}、トピック xx/${username}/report
  • クライアントID ${clientid}、トピック xx/${clientid}/report

add_acl

プレースホルダーはトピックのフィールド全体を置換する場合にのみ使用可能です。例えば a/b/${username}/c/d は可能ですが、フィールドの一部を置換する a/b${username}c/d は使用できません。

認可情報のインポート

提供されているCSVテンプレートを使用して認可情報を一括インポートできます(「全ユーザー」カテゴリは非対応)。インポート用フィールドは以下の通りです。

  • clientid:クライアントID
  • username:ユーザー名
  • topic:認可トピック
  • action:操作(sub/pub/pubsub)
  • access:許可か否か(allow/deny)

以下の手順で認可情報を一括インポートできます。

  1. インポートボタンをクリックします。

  2. テンプレートをダウンロードします。以下はクライアントID用テンプレートの例です。

    auth_csv

  3. 認可情報を入力し、ファイルをアップロードします。

  4. インポートをクリックします。

認可情報の表示

認可情報を追加後、認可ページで内容を確認できます。認可エントリーは、クライアントIDユーザー名全ユーザー(トピック)の3つの軸で表示可能です。

認可情報の編集

認可情報の横にある編集アイコンをクリックすると、現在の認可情報を修正できます。

認可情報の削除

認可情報の横にある削除アイコンをクリックすると、該当情報を削除できます。

認可モード

EMQXは2つの認可戦略をサポートしています:ブラックリストモードホワイトリストモードです。

モード動作
ブラックリストモード(デフォルト)明示的に拒否されていないパブリッシュやサブスクライブ操作はすべて許可されます。
ホワイトリストモードすべてのパブリッシュおよびサブスクライブ操作はデフォルトで拒否され、明示的に許可された操作のみが許可されます。

認可ルールは以下の順序で評価されます。まずユーザー名 / クライアントIDルール、次に全ユーザールールです。システムは最初にマッチしたルールを適用します。ルールにマッチしない場合は、アクティブなモードに応じて結果が変わります。ブラックリストモードでは許可、ホワイトリストモードでは拒否となります。

TIP

  • 「全ユーザー」認可内で複数ルールが存在する場合、作成順に評価されます(先に作成されたルールが優先されます)。例えば、より具体的な許可ルール(例:emqx/#)を一般的な拒否ルール(例:deny #)の前に置くことで、正当なアクセスを誤ってブロックすることを防げます。
  • クライアントID / ユーザー名とトピックの組み合わせは一意です。同じクライアントID / ユーザー名とトピックの複数レコードがある場合、最新のレコードのみが有効です。
  • 拡張認可データソースを追加している場合は、拡張認可ページの認可順序で「デフォルト認可」を最後に配置してください。

::: caution 注意

セキュリティ上の理由から、クライアントのサブスクライブトピックフィルターにおいて、単独のワイルドカード # は許可されていません。例えば、# はクライアントのサブスクライブトピックとして無効ですが、t/# は許可されます。この制限はクライアントのサブスクライブ操作のみに適用され、認可ルールのトピックパターンには影響しません。認可ルールでは # を使用可能です(例:ホワイトリストモードを有効にするために、「デフォルト認可」下で全ユーザーの # へのパブリッシュおよびサブスクライブを拒否するルールを追加するなどの用途があります)。

:::

認可モードの切り替え(推奨)

バージョン注意

ワンクリックでの認可モード切り替えは、EMQX DedicatedおよびDedicated FlexのEMQXバージョン5.10以降で利用可能です。Serverlessデプロイメントではサポートされていません。

対応するデプロイメントでは、コンソールから直接認可モードを切り替えられ、トピックルールの設定は不要です。

  1. クライアント認可ページに移動します。
  2. ページ右上のブラックリストモードボタンをクリックし、ホワイトリストモードを選択して切り替えます。

ホワイトリストモードに切り替えると、すべてのパブリッシュおよびサブスクライブ操作はデフォルトで拒否されます。クライアントが特定トピックにアクセスするには、許可ルールの設定が必須です。

ルールによるホワイトリストモードの設定

認可モード切り替えに対応していないデプロイメント(EMQXバージョン5.10未満やServerless)では、拒否オールルールを追加することでホワイトリスト動作を実現できます。

クライアント認可ページの全ユーザータブで認可エントリーを追加します。トピック# を入力し、操作Publish & Subscribe許可Deny を選択して確定します。

acl_deny_all

このルールは最終的なフォールバック拒否ルールとして機能し、明示的に許可されていないトピック操作をすべて拒否します。これによりホワイトリストの動作が実現されます。

ベストプラクティス

対応可能なデプロイメントでは、コンソールの認可モード切り替え機能を使ってホワイトリストモードを有効にすることを推奨します。手動で「拒否 #」ルールを追加するより設定が簡潔になります。

認可統計の表示

画面右上の認可統計アイコンをクリックすると、認可のメトリクスやレート指標を確認できます。

new_authentication