
# keenauth_management_client

`keenauth_management_client` 리소스는 `app_type = "management"`인 애플리케이션의 management API 접근 설정을 지정합니다. 즉, 애플리케이션의 머신 간(M2M) 클라이언트가 management API를 호출할 수 있는 권한과 IP 허용 목록을 설정합니다. 애플리케이션당 레코드는 최대 하나이며, 레코드는 애플리케이션 ID로 식별됩니다.

## 최소 권한

이 리소스는 management API에 대한 접근 권한을 부여합니다. 권한 범위를 좁게 유지하십시오.

- 자동화에 필요한 권한만 나열하십시오. 예를 들어 모든 `users:*` 권한 대신 `users:read`만 지정하십시오.
- `allowed_cidrs`는 클라이언트가 실행되는 네트워크로 제한하십시오.
- 자동화마다 별도의 management 애플리케이션을 사용하십시오. 그래야 각각을 독립적으로 축소하거나 제거할 수 있습니다.

설정을 적용하는 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`를 거부합니다.

## plan에서의 `allowed_cidrs`

- 레코드를 생성할 때 `allowed_cidrs`를 생략하면 API는 호출한 API 키의 목록을 기록합니다. 해당 키에 목록이 없으면 클라이언트에는 IP 제한이 없습니다. plan에는 `(known after apply)`로 표시됩니다.
- 레코드가 존재한 후에는 속성을 생략해도 현재 값이 유지됩니다. 설정에서 속성을 제거해도 목록은 초기화되지 않으며, 설정 외부에서 이루어진 변경은 diff 없이 수용됩니다. 목록을 관리하려면 명시적으로 작성하십시오.
- 빈 목록은 API가 `[]`를 호출한 키의 목록으로 변환하므로 plan 단계에서 거부됩니다. 대신 속성을 생략하십시오.
- 각 블록은 정식 형식으로 작성하십시오. 즉 네트워크 주소를 쓰고, IPv6는 소문자로 쓰십시오. 예를 들어 `10.0.0.5/24`가 아니라 `10.0.0.0/24`로 작성하십시오.

## 오류

| 오류 | 의미 |
|---|---|
| `403 insufficient_permissions` | 이 레코드는 API 키로만 관리할 수 있습니다. `client_id` + `private_key`가 아니라 `api_key`로 구성된 provider를 사용하십시오. API 키를 사용하는 경우 권한이 제한된 키에 `management-clients:read` 또는 `management-clients:write`가 없습니다. |
| `403 permission_escalation` | 레코드에 API 키가 가지고 있지 않은 권한이나 네트워크가 포함되어 있습니다. |
| 생성 시 `404` | API 키의 환경에 해당 애플리케이션이 없습니다. |
| `409` | 애플리케이션에 이미 레코드가 있습니다. 가져오기를 사용하십시오. |
| `application_id`에서 `422` | 애플리케이션 유형이 `management`가 아닙니다. |
| `412` | plan 이후 레코드가 변경되었습니다. 변경된 내용은 없으니 `plan`을 다시 실행하십시오. |

## 가져오기

애플리케이션 ID로 가져오십시오.

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