# デフォルト認可

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

## 認可情報の追加

::: tip 注意

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

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

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

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

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

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

- **クライアントID**：この認可ルールを適用するクライアントID。
- **トピック**：このルールに対応するトピックを設定します。
- **アクション**：このルールに対応する操作を設定します。選択肢：`Publish`、`Subscribe`、`Publish and Subscribe`。
- **権限**：現在のクライアントが要求された操作を実行できるかどうか。選択肢：`Allow`、`Deny`。

### ユーザー名認可の追加

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

- **ユーザー名**：このルールに適用されるユーザー名。
- **トピック**：このルールに対応するトピックを設定します。
- **アクション**：このルールに対応する操作を設定します。選択肢：`Publish`、`Subscribe`、`Publish and Subscribe`。
- **権限**：現在のユーザーが要求された操作を実行できるかどうか。選択肢：`Allow`、`Deny`。

### トピック認可の追加

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

- **トピック**：このルールに対応するトピックを設定します。
- **アクション**：このルールに対応する操作を設定します。選択肢：`Publish`、`Subscribe`、`Publish and Subscribe`。
- **権限**：現在のトピックに対して要求された操作を許可するかどうか。選択肢：`Allow`、`Deny`。

### プレースホルダーの使用

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

- `${clientid}`
- `${username}`

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

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

![add_acl](./_assets/add_acl_v5_placeholder.png)

プレースホルダーはトピックのフィールド全体を置き換える場合にのみ使用可能です。例えば `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](./_assets/authz_csv.png)

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

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

## 認可情報の表示

認可情報を追加した後、認可ページでそれらを確認できます。認可エントリーの詳細は、**クライアントID**、**ユーザー名**、**全ユーザー**（トピック）の3つの軸で閲覧可能です。

## 認可情報の編集

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

## 認可情報の削除

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

## 認可ホワイトリストモードの有効化

ホワイトリストモードを有効にすると、すべてのユーザーはデフォルトでサブスクライブおよびパブリッシュが禁止されます。クライアントはサブスクライブやパブリッシュの操作を行うために明示的な認可が必要です。

デプロイの左メニューから**アクセス制御** -> **認可**をクリックします。**全ユーザー**タブで認可エントリーを追加し、**トピック**欄に `#` を入力、**アクション**に `Publish & Subscribe` を選択、**権限**に `Deny` を選択して、**確定**をクリックするとホワイトリストモードが有効になります。

![add_acl](./_assets/acl_deny_all.png)

:::tip 注意

- デフォルトでは認可は**ブラックリストモード**（すべてのサブスクライブとパブリッシュがデフォルトで許可）を使用します。
- **認可マッチングの順序**は、全ユーザー認可 -> ユーザー名／クライアントID認可の順です。
- クライアントID／ユーザー名とトピックの組み合わせは一意です。同じクライアントID／ユーザー名＋トピックの複数レコードがある場合、最新のレコードのみ有効です。
- 拡張認可データソースを追加している場合、ホワイトリストモードを有効にするには、拡張認可ページの**認可順序**で「デフォルト認可」を最後に配置してください。
:::

## 認可統計の表示

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

![new_authentication](./_assets/authz_statistics.png)
