# 認可

EMQXは強力なアクセス制御機能を提供しており、EMQXダッシュボードではすぐに使える認可管理機能を備えています。ビジュアルインターフェースを通じて、ユーザーはコードを書いたり設定ファイルを手動で編集したりすることなく、迅速にEMQXの認可メカニズムを構成できます。これにより、クライアントの接続直後のパブリッシュやサブスクライブなどの操作を制御でき、さまざまなレベルやシナリオに対応した安全な設定が可能です。**認可**ページでは、さまざまな認可リソースを素早く作成・管理できます。

## 認可の作成

認可ページの右上にある**作成**ボタンをクリックすると、**認可の作成**ページに移動します。認可を作成するには、権限データを構成・保存するバックエンドを選択する必要があります。

### バックエンド

バックエンドには、ファイル、組み込みデータベース、外部データベース、HTTPサーバーの利用オプションがあります。

アクセスコントロールリスト（ACL）ファイルを使用すると、ファイル内に定義された一連のルールをスキャンして、各パブリッシュやサブスクライブのリクエストが許可されているかを判定し、認可内容を編集・保存できます。

EMQXの組み込みデータベースを使用して認可ルールを構成・保存することも可能です。

外部データベースを使用して認可ルールを保存できます。`MySQL`、`PostgreSQL`、`MongoDB`、`Redis`などの主要なデータベースをサポートしています。

あらかじめ定義されたHTTPサービスを利用し、認可リクエストを外部HTTPサーバーに委譲できます。外部HTTPサービスは権限検証機能を備えている必要があります。

![image](./assets/authz-create.png)

### 設定

バックエンドを選択した後は、認可の最終ステップとして選択したバックエンドの設定を行います。各バックエンドには接続や利用のための設定項目があり、ユーザーが手動で設定する必要があります。または、ACLファイルのルール内容を編集・保存する場合もあります。設定が完了したら**作成**をクリックして認可設定を素早く完了します。注意：一度使用した認可バックエンドは再度選択できません。

#### ファイル

ACLファイルを使用する場合、設定パラメータページにテキスト編集ボックスが用意されており、ファイル内の認可ルール内容を編集できます。ルールはErlangのタプルデータのリスト形式です。（各ルールはドット`.`で終わる必要があります）タプルは角括弧で囲まれ、要素はカンマで区切られています。

ファイルルールの編集方法の詳細は、[ACLファイル](../access-control/authz/file.md)を参照してください。

#### 組み込みデータベース

組み込みデータベースを認可に使用する場合は、パラメータの設定は不要で、作成後にユーザーページで権限ルールを設定します。

#### 外部データベース

外部データベースを使用する場合は、アクセス可能なデータベースのアドレス、データベース名、ユーザー名、パスワードを設定し、認可データを取得するためのSQL文やその他のクエリ文を入力します。パブリッシュやサブスクライブ時に、認可データがデータベースから照会され、権限ルールの適用可否が判断されます。MySQLを例に挙げると：

MySQLやその他外部データベースの設定詳細は、[MySQLとの連携](../access-control/authz/mysql.md)や各データベースの設定ドキュメントを参照してください。

#### HTTPサーバー

HTTPサーバーを利用する場合は、あらかじめ認可データの照合をサポートするHTTPサーバーが必要です。サブスクライブやパブリッシュ時にEMQXはデータをHTTPサービスに転送し、HTTPの応答結果により操作が権限ルールを通過できるかを判断します。

サービスのアドレスやリクエスト方法（POSTまたはGET）、サービスのヘッダーを設定し、パブリッシュやサブスクライブに必要な認可情報（例：`username`、`topic`、`action`）をJSONデータとして`Body`フィールドに設定します。

HTTPサーバー認可の設定方法の詳細は、[HTTPサービスの利用](../access-control/authz/http.md)を参照してください。

## 認可リスト

認可設定が完了すると、認可リストで設定内容を確認・管理できます。このリストでは、バックエンドとその状態が表示されます。例えば、外部データベースが未デプロイまたは接続に失敗している場合、バックエンドの状態は`Disconnected`と表示されます。このフィールドにマウスを合わせると、EMQXクラスター内の全ノードにおけるデータソースの接続状況を確認できます。**有効**スイッチをクリックすることで、認可設定の有効・無効を素早く切り替えられます。

認証リストと同様に、認可リストの各行はマウスでドラッグして順序を調整したり、アクション列から並び替えたりできます。EMQXは複数の認可メカニズムの作成を許可しており、クライアントがパブリッシュやサブスクライブ操作を行う際は順番にチェックされます。例えば、ある認可設定でクライアントに合致するACLが見つかれば、そのルールが適用され、許可または拒否されます。該当するルールがなければ、次の認可設定が順にチェックされます。

![image](./assets/authz-list.png)

**アクション**列では、認可設定の編集、順序調整、削除も可能です。

:::tip 注意
認可を無効にすると、クライアントのパブリッシュ／サブスクライブ権限の動作に影響します。慎重に操作してください。
:::

## グローバル設定

リストページ右上の**設定**ボタンをクリックすると、認可のグローバル設定を行えます。

認可ルールにマッチしなかった場合の動作（許可または拒否）、拒否後にメッセージを無視するかクライアントを切断するかを設定できます。認可データのキャッシュを有効にするとバックエンドへのアクセス負荷を軽減できます。右側の**キャッシュクリア**をクリックすると、現在の認可結果キャッシュをすべて素早くクリアできます。

![image](./assets/authz-settings.png)

## 概要

リストページの**バックエンド**列にある認可設定名をクリックすると、その認可設定の概要ページに移動します。このページでは、EMQXクラスター内の認可に関するさまざまなメトリクス（成功・失敗した認可数、不一致数、現在のレートなど）を確認できます。

ページ下部のノードステータスでは、リストにある各ノードの認可メトリクスデータを閲覧できます。

![image](./assets/authz-overview.png)

## 権限

組み込みデータベースを使用している場合、リストページの**アクション**列にある**権限**をクリックすると、認可ルールの管理・設定が可能です。クライアントはクライアントIDやユーザー名で区別でき、全ユーザーに対する認可ルールの追加も可能です。

認可ルールを設定するには、認可設定が必要なトピックを入力し、そのトピックに対するサブスクライブまたはパブリッシュのどちらに権限を適用するかを選択し、許可（`allow`）または拒否（`deny`）を設定します。

![image](./assets/authz-users.png)

組み込みデータベースの認可設定方法の詳細は、[組み込みデータベースの利用](../access-control/authz/mnesia.md)を参照してください。

:::tip 注意

認可を無効にすると、クライアントのパブリッシュ／サブスクライブ権限の動作に影響します。慎重に操作してください。

:::

## 設定

認可のバックエンドを変更する必要がある場合は、リストページの**アクション**列にある**設定**をクリックし、設定ページでACLファイルの権限ルール内容の変更や、外部データベースの接続情報やクエリ文の変更などを行えます。

例えば、認可設定のバックエンドを変更したり、ACLの権限ルールを修正したり、外部データベースの接続情報やクエリ文に変更があった場合は、リストページの**アクション**列の**設定**をクリックして設定情報を修正できます。

## さらに詳しく

認可の詳細については、[認可の概要](../access-control/authz/authz.md)をご参照ください。
