Problem
The Keycloak operator uses a full master-realm admin credential stored as a Kubernetes Secret. No built-in process exists to rotate this credential. Password age is unbounded unless an external secret manager is configured.
This is documented as GAP-5 in the threat model (docs/security/threat-model.md).
What needs to happen
- Document the manual rotation procedure — steps to update the Secret and trigger reconciliation without downtime
- Verify graceful re-authentication — confirm the operator picks up a new credential on the next reconciliation cycle without restart (expected: yes, via the admin client factory re-reading the Secret)
- Provide integration guidance for external secret managers:
- External Secrets Operator + Vault
- External Secrets Operator + AWS Secrets Manager
- CNPG-native credential handling (for operator-managed Keycloak)
- Log a warning at startup and/or rotation time if the credential has not changed in a configurable time window (optional hardening)
Acceptance criteria
Related
Problem
The Keycloak operator uses a full master-realm admin credential stored as a Kubernetes Secret. No built-in process exists to rotate this credential. Password age is unbounded unless an external secret manager is configured.
This is documented as GAP-5 in the threat model (
docs/security/threat-model.md).What needs to happen
Acceptance criteria
docs/operations/secret-management.mdRelated
docs/security/threat-model.md