
# keenauth_management_client

La ressource `keenauth_management_client` définit l'accès à l'API de gestion d'une application dont `app_type = "management"` : les autorisations et la liste d'autorisation d'adresses IP avec lesquelles le client machine-à-machine de l'application peut appeler l'API de gestion. Une application ne possède au plus qu'un seul enregistrement, identifié par l'ID de l'application.

## Privilège minimal

Cette ressource accorde l'accès à l'API de gestion. Limitez-le au strict nécessaire :

- Ne listez que les autorisations dont l'automatisation a besoin, par exemple `users:read` plutôt que toutes les autorisations `users:*`.
- Restreignez `allowed_cidrs` aux réseaux dans lesquels le client s'exécute.
- Utilisez une application de gestion par automatisation, afin que chacune puisse être restreinte ou supprimée indépendamment.

La clé d'API qui applique la configuration ne peut accorder que les autorisations et les réseaux qu'elle possède elle-même.

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

## Clés de signature

La ressource ne contient aucun secret ni aucune clé. Enregistrez la clé publique de l'application avec `POST /v1/applications/{application_id}/credentials` (`type: public_key`) dans la CLI ou le tableau de bord. L'API rejette `jwks_uri` et `public_keys` sur cette ressource.

## `allowed_cidrs` dans le plan

- Si vous omettez `allowed_cidrs` lors de la création de l'enregistrement, l'API écrit la liste propre à la clé d'API appelante. Si cette clé n'a pas de liste, le client n'a aucune restriction d'adresses IP. Le plan affiche `(known after apply)`.
- Une fois l'enregistrement créé, l'omission de l'attribut conserve la valeur actuelle. Le retrait de l'attribut de la configuration ne réinitialise pas la liste, et une modification effectuée en dehors de la configuration est acceptée sans différence affichée. Écrivez la liste explicitement pour la gérer.
- Une liste vide est rejetée au moment de la planification, car l'API transforme `[]` en liste de la clé appelante. Omettez plutôt l'attribut.
- Écrivez chaque bloc sous sa forme canonique : l'adresse réseau, et l'IPv6 en minuscules. Par exemple, écrivez `10.0.0.0/24`, et non `10.0.0.5/24`.

## Erreurs

| Erreur | Signification |
|---|---|
| `403 insufficient_permissions` | Seule une clé d'API peut gérer ces enregistrements ; utilisez un fournisseur configuré avec `api_key`, et non `client_id` + `private_key`. Avec une clé d'API, une clé restreinte ne dispose pas de `management-clients:read` ou de `management-clients:write`. |
| `403 permission_escalation` | L'enregistrement aurait des autorisations ou des réseaux que la clé d'API ne possède pas. |
| `404` lors de la création | L'application n'existe pas dans l'environnement de la clé d'API. |
| `409` | L'application possède déjà un enregistrement. Importez-le. |
| `422` sur `application_id` | L'application n'est pas de type `management`. |
| `412` | L'enregistrement a changé après le plan. Rien n'a été modifié ; exécutez de nouveau `plan`. |

## Import

Importez par ID d'application :

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