ACLファイルの使用 
EMQXは、ACLファイルに格納された事前定義済みのルールに基づく認可チェックをサポートしています。ファイル内に複数の認可チェックルールを設定可能です。クライアントからの操作リクエストを受け取ると、EMQXは上から順に認可ルールと照合します。ルールにマッチした場合は、その設定に従って現在のリクエストを許可または拒否し、以降のルールの照合を停止します。
ファイルベースのACLはシンプルかつ軽量であり、一般的なルールの設定に適しています。クライアントごとに数百件以上のルールが必要な場合は、他の認可ソースの利用を推奨します。ファイルベースのACLは認可チェーンの最後の安全装置として機能させることができます。
ACLファイル形式 
ACLファイルに基づく認可チェックを行う前に、認可ルールをErlangタプルのデータリスト形式でファイルに保存する必要があります。
ACL設定ファイルは、ピリオドで終わるErlangタプルのリストです。_タプル_はカンマ区切りの式のリストで、全体は中括弧で囲まれています。
%%で始まる行はコメントであり、解析時に無視されます。
例:
%% ユーザー名 "dashboard" のMQTTクライアントに "$SYS/#" トピックのサブスクライブを許可
{allow, {user, "dashboard"}, subscribe, ["$SYS/#"]}.
%% IPアドレス "127.0.0.1" のユーザーに "$SYS/#", "#" トピックのパブリッシュ/サブスクライブを許可
{allow, {ipaddr, "127.0.0.1"}, all, ["$SYS/#", "#"]}.
%% "全ユーザー" に `$SYS/#`, `#`, `+/#` のサブスクライブを拒否
{deny, all, subscribe, ["$SYS/#", {eq, "#"}, {eq, "+/#"}]}.
%% その他のパブリッシュ/サブスクライブ操作を全て許可
%% 注意: 本番環境では最後のルールを `{deny, all}` に変更し、設定 `authorization.no_match = deny` を推奨
{allow, all}.ルールは上から順に照合され、マッチしたルールの権限が適用され、以降のルールは無視されます。
- タプルの第1要素は、ルールがマッチした場合に適用される権限を示します。値は以下のいずれかです: - allow
- deny
 
- 第2要素は、ルールが適用されるクライアントを示します。以下の指定方法や組み合わせが可能です: - {username, "dashboard"}:ユーザー名が- dashboardのクライアント。- {user, "dashboard"}も可。
- {username, {re, "^dash"}}:ユーザー名が正規表現- ^dashにマッチするクライアント。
- {clientid, "dashboard"}:クライアントIDが- dashboardのクライアント。- {client, "dashboard"}も可。
- {clientid, {re, "^dash"}}:クライアントIDが正規表現- ^dashにマッチするクライアント。
- {client_attr, "name", "dashboard"}:クライアント属性- nameが- dashboardのクライアント。
- {client_attr, "name", {re, "^dash"}}:クライアント属性- nameが正規表現- ^dashにマッチするクライアント。
- {ipaddr, "127.0.0.1"}:IPアドレス- 127.0.0.1から接続するクライアント。ネットマスクも指定可能。EMQXがロードバランサーの背後にある場合は、クライアントのMQTTリスナーで- proxy_protocolを有効にする必要があります。
- {ipaddrs, ["127.0.0.1", ..., ]}:指定した複数のIPアドレスのいずれかから接続するクライアント。ネットマスクも指定可能。
- all:すべてのクライアント。
- {'and', [Spec1, Spec2, ...]}:リスト内のすべての条件を満たすクライアント。
- {'or', [Spec1, Spec2, ...]}:リスト内のいずれかの条件を満たすクライアント。
 
- 第3要素は、ルールが適用される操作を示します: - publish:パブリッシュ操作に適用。
- subscribe:サブスクライブ操作に適用。
- all:パブリッシュおよびサブスクライブの両方に適用。
- EMQX v5.1.1以降では、パブリッシュおよびサブスクライブ操作におけるQoSやリテインフラグのチェックが可能です。第3要素に qosやretainを追加して指定できます。例:- {publish, [{qos, 1}, {retain, false}]}:QoS1でリテインされていないメッセージのパブリッシュを拒否。
- {publish, {retain, true}}:リテインメッセージのパブリッシュを拒否。
- {subscribe, {qos, 2}}:QoS2のトピックへのサブスクライブを拒否。
 
 
- 第4要素は、ルールが適用されるトピックを指定します。トピックはパターンのリストで指定し、トピックプレースホルダーを使用可能です。利用可能なパターンは以下の通りです: - 文字列値(例:"t/${clientid}"):トピックプレースホルダーを使用。クライアントIDがemqx_cの場合、トピックt/emqx_cに正確にマッチします。
- 文字列値(例:"$SYS/#"):ワイルドカードを含む標準的なトピックフィルター。トピックフィルターはMQTT仕様に従ってトピックにマッチします。例として、$SYS/#はパブリッシュ時に$SYS/foo、$SYS/foo/barに、サブスクライブ時に$SYS/foo、$SYS/foo/#、$SYS/#にマッチします。トピックプレースホルダーも利用可能です。
- eqタプル(例:- {eq, "foo/#"}):トピック文字列の完全一致を示します。このパターンはすべての操作において正確に- foo/#トピックにのみマッチします。ワイルドカードやプレースホルダーは考慮されません。つまり、トピック- foo/barはマッチしません。
 
- 文字列値(例:
さらに、以下の2つの特別なルールがあります。通常、設定の最後にデフォルトとして使用されます。
- {allow, all}:すべての操作を許可。
- {deny, all}:すべての操作を拒否。
ダッシュボードでの設定 
EMQXはデフォルトでファイルベースの認可機能を設定しています。Actions列のSettingsボタンをクリックすると、ACLファイルエリアに設定された認可ルールを表示・編集できます。ファイル形式やフィールドの詳細はACLファイル形式を参照してください。

設定ファイルでの設定 
ファイルベースの認可機能は、typeがfileの設定で識別されます。
設定例:
authorization {
  deny_action = ignore
  no_match = deny
  sources = [
    {
      type = file
      enable = true
      path = "etc/acl.conf"
    }
  ]
}項目の説明:
- type:認可機能のデータソースタイプ。ここでは- file。
- enable:認可機能を有効化するかどうか。指定可能な値は- trueまたは- false。
- path:設定ファイルのパス。デフォルトは- etc/acl.conf。ダッシュボードやREST APIでファイルベースの認可機能を編集した場合、EMQXは新しいファイルを- data/authz/acl.confに保存し、元のファイルの読み込みを停止します。
TIP
pathで指定した初期ファイルはEMQXによって変更されません。
 ルールがダッシュボードUIや管理APIから更新されると、新しいルールはdata/authz/acl.confに保存され、元の設定ファイルは読み込まれなくなります。
:::