
# keenauth_management_client

Die Ressource `keenauth_management_client` legt den Zugriff auf die Management-API einer Anwendung mit `app_type = "management"` fest: die Berechtigungen und die IP-Allowlist, mit denen der Machine-to-Machine-Client der Anwendung die Management-API aufrufen darf. Eine Anwendung hat höchstens einen Datensatz, und dieser Datensatz wird über die Anwendungs-ID identifiziert.

## Minimale Berechtigungen

Diese Ressource gewährt Zugriff auf die Management-API. Halten Sie ihn eng gefasst:

- Listen Sie nur die Berechtigungen auf, die die Automatisierung benötigt, zum Beispiel `users:read` statt aller `users:*`-Berechtigungen.
- Beschränken Sie `allowed_cidrs` auf die Netzwerke, in denen der Client läuft.
- Verwenden Sie pro Automatisierung eine Management-Anwendung, damit sich jede einzeln einschränken oder entfernen lässt.

Der API-Schlüssel, der die Konfiguration anwendet, kann nur Berechtigungen und Netzwerke gewähren, über die er selbst verfügt.

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

## Signaturschlüssel

Die Ressource enthält weder ein Geheimnis noch einen Schlüssel. Registrieren Sie den öffentlichen Schlüssel der Anwendung mit `POST /v1/applications/{application_id}/credentials` (`type: public_key`) in der CLI oder im Dashboard. Die API lehnt `jwks_uri` und `public_keys` für diese Ressource ab.

## `allowed_cidrs` im Plan

- Wenn Sie `allowed_cidrs` beim Anlegen des Datensatzes weglassen, schreibt die API die Liste des aufrufenden API-Schlüssels. Hat der Schlüssel keine Liste, besitzt der Client keine IP-Einschränkung. Der Plan zeigt `(known after apply)`.
- Sobald der Datensatz existiert, behält das Weglassen des Attributs den aktuellen Wert bei. Das Entfernen aus der Konfiguration setzt die Liste nicht zurück, und eine Änderung außerhalb der Konfiguration wird ohne Diff akzeptiert. Schreiben Sie die Liste explizit, um sie zu verwalten.
- Eine leere Liste wird bereits bei der Planung abgelehnt, weil die API `[]` in die Liste des aufrufenden Schlüssels umwandelt. Lassen Sie das Attribut stattdessen weg.
- Schreiben Sie jeden Block in kanonischer Form: die Netzwerkadresse und IPv6 in Kleinbuchstaben. Schreiben Sie zum Beispiel `10.0.0.0/24` statt `10.0.0.5/24`.

## Fehler

| Fehler | Bedeutung |
|---|---|
| `403 insufficient_permissions` | Nur ein API-Schlüssel kann diese Datensätze verwalten; verwenden Sie einen Provider, der mit `api_key` konfiguriert ist, nicht mit `client_id` + `private_key`. Bei einem API-Schlüssel fehlt einem eingeschränkten Schlüssel `management-clients:read` oder `management-clients:write`. |
| `403 permission_escalation` | Der Datensatz würde Berechtigungen oder Netzwerke enthalten, die der API-Schlüssel nicht besitzt. |
| `404` beim Anlegen | Die Anwendung existiert nicht in der Umgebung des API-Schlüssels. |
| `409` | Die Anwendung besitzt bereits einen Datensatz. Importieren Sie ihn. |
| `422` bei `application_id` | Die Anwendung ist nicht vom Typ `management`. |
| `412` | Der Datensatz hat sich nach der Planung geändert. Es wurde nichts geändert; führen Sie `plan` erneut aus. |

## Import

Importieren Sie über die Anwendungs-ID:

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