
# keenauth_management_client

La risorsa `keenauth_management_client` imposta l'accesso all'API di gestione di un'applicazione con `app_type = "management"`: le autorizzazioni e la lista IP consentiti con cui il client machine-to-machine dell'applicazione può chiamare l'API di gestione. Un'applicazione ha al massimo un record, identificato dall'ID dell'applicazione.

## Privilegio minimo

Questa risorsa concede l'accesso all'API di gestione. Mantienila ristretta:

- Elenca solo le autorizzazioni che l'automazione richiede, ad esempio `users:read` invece di ogni autorizzazione `users:*`.
- Limita `allowed_cidrs` alle reti in cui viene eseguito il client.
- Usa un'applicazione di gestione per ogni automazione, così ciascuna può essere ristretta o rimossa in modo indipendente.

La chiave API che applica la configurazione può concedere solo autorizzazioni e reti che possiede essa stessa.

```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"]
}
```

## Chiavi di firma

La risorsa non contiene alcun segreto né alcuna chiave. Registra la chiave pubblica dell'applicazione con `POST /v1/applications/{application_id}/credentials` (`type: public_key`) nella CLI o nella dashboard. L'API rifiuta `jwks_uri` e `public_keys` su questa risorsa.

## `allowed_cidrs` nel piano

- Se ometti `allowed_cidrs` alla creazione del record, l'API scrive la lista della chiave API che effettua la chiamata. Se la chiave non ha una lista, il client non ha alcuna restrizione IP. Il piano mostra `(known after apply)`.
- Una volta che il record esiste, omettere l'attributo mantiene il valore corrente. Rimuoverlo dalla configurazione non reimposta la lista, e una modifica fatta al di fuori della configurazione viene accettata senza differenze. Scrivi esplicitamente la lista per gestirla.
- Una lista vuota viene rifiutata in fase di piano, perché l'API trasforma `[]` nella lista della chiave chiamante. Ometti invece l'attributo.
- Scrivi ogni blocco in forma canonica: l'indirizzo di rete e IPv6 in minuscolo. Ad esempio scrivi `10.0.0.0/24`, non `10.0.0.5/24`.

## Errori

| Errore | Significato |
|---|---|
| `403 insufficient_permissions` | Solo una chiave API può gestire questi record; usa un provider configurato con `api_key`, non con `client_id` + `private_key`. Con una chiave API, una chiave con restrizioni non ha `management-clients:read` o `management-clients:write`. |
| `403 permission_escalation` | Il record avrebbe autorizzazioni o reti che la chiave API non possiede. |
| `404` in creazione | L'applicazione non esiste nell'ambiente della chiave API. |
| `409` | L'applicazione ha già un record. Importalo. |
| `422` su `application_id` | L'applicazione non è di tipo `management`. |
| `412` | Il record è cambiato dopo il piano. Non è stato modificato nulla; esegui di nuovo `plan`. |

## Importazione

Importa tramite ID applicazione:

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