
# keenauth_management_client

`keenauth_management_client` リソースは、`app_type = "management"` のアプリケーションの管理 API アクセスを設定します。具体的には、アプリケーションのマシン間 (M2M) クライアントが管理 API を呼び出す際の権限と IP 許可リストを設定します。アプリケーションにつき記録は最大 1 件で、記録はアプリケーション ID で識別されます。

## 最小権限

このリソースは管理 API へのアクセスを付与します。範囲を絞った設定にしてください。

- 自動化に必要な権限のみを指定してください。たとえば、すべての `users:*` 権限ではなく `users:read` のみを指定します。
- `allowed_cidrs` は、クライアントが動作するネットワークに限定してください。
- 自動化ごとに 1 つの管理アプリケーションを使用してください。そうすると、それぞれを個別に絞り込んだり削除したりできます。

設定を適用する API キーは、自身が持つ権限とネットワークのみを付与できます。

```terraform
resource "keenauth_application" "ops" {
  key      = "ops-automation"
  name     = "Ops automation"
  app_type = "management"
  party    = "first_party"
}

resource "keenauth_management_client" "ops" {
  application_id = keenauth_application.ops.id
  permissions    = ["users:read", "applications:read"]
  allowed_cidrs  = ["203.0.113.0/24"]
}
```

## 署名キー

このリソースはシークレットもキーも保持しません。アプリケーションの公開鍵は、CLI またはダッシュボードから `POST /v1/applications/{application_id}/credentials` (`type: public_key`) を使用して登録してください。API は、このリソースでの `jwks_uri` および `public_keys` を拒否します。

## プランにおける `allowed_cidrs`

- 記録の作成時に `allowed_cidrs` を省略すると、API は呼び出し元 API キー自身のリストを書き込みます。キーにリストがない場合、クライアントに IP 制限はありません。プランには `(known after apply)` と表示されます。
- 記録が存在するようになった後に属性を省略すると、現在の値が維持されます。設定から削除してもリストはリセットされず、設定外で行われた変更は差分なしで受け入れられます。リストを管理するには、明示的に記述してください。
- 空のリストは、API が `[]` を呼び出し元キーのリストに変換するため、プランの時点で拒否されます。代わりに属性を省略してください。
- 各ブロックは正規の形式で記述してください。ネットワークアドレスを記述し、IPv6 は小文字にします。たとえば `10.0.0.5/24` ではなく `10.0.0.0/24` と記述します。

## エラー

| エラー | 意味 |
|---|---|
| `403 insufficient_permissions` | これらの記録を管理できるのは API キーのみです。`client_id` + `private_key` ではなく、`api_key` で設定したプロバイダを使用してください。API キーの場合、制限付きキーに `management-clients:read` または `management-clients:write` がありません。 |
| `403 permission_escalation` | 記録が、API キーが持たない権限またはネットワークを持つことになります。 |
| 作成時の `404` | 指定したアプリケーションが、API キーの環境に存在しません。 |
| `409` | アプリケーションにはすでに記録があります。インポートしてください。 |
| `application_id` 上の `422` | アプリケーションの種類が `management` ではありません。 |
| `412` | プラン作成後に記録が変更されました。何も変更されていないため、`plan` を再実行してください。 |

## インポート

アプリケーション ID を指定してインポートします。

```shell
tofu import keenauth_management_client.ops app_01j9zq3v8c5m2x7k4t6r1n0b3d
```
