# Authorization

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

## Create Authorization

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

### Backend

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

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

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

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

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

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

### Configuration

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

#### File

ACLファイルを使用する場合、設定パラメータページにテキスト編集ボックスが提供され、ファイル内の認可ルールの内容を編集できます。ルールはErlangのタプルデータのリストで構成されます。（各ルールの末尾には必ずドット（.）が必要です）タプルは括弧で囲まれたリストで、要素はカンマで区切られています。

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

#### Built-in Database

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

#### External Database

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

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

#### HTTP Server

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

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

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

## Authorization List

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

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

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

**Actions**列では、認可設定の編集、順序変更、削除も行えます。

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

## Global Settings

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

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

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

## Overview

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

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

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

## Permissions

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

認可ルールを設定するには、認可設定を行うトピックを入力し、そのトピックへのサブスクライブまたはパブリッシュ時に権限を適用するか選択し、許可または拒否の設定を行います。

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

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

:::tip 注意

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

:::

## Settings

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

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

## More Information

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