Modernes Identitäts- und Zugriffsmanagement: Configuration as Code für Keycloak mit Terraform bei TNG

17. Dezember 2020

Stellen Sie sich ein Unternehmen vor, dessen Mitarbeiterzahl und Anzahl der genutzten Webdienste stetig wächst. Denken Sie außerdem an die Zeit, die damit verbracht (bzw. verschwendet) wird, sich bei vielen dieser Webdienste jeden Tag einzeln anzumelden - und das bei jedem Mitarbeiter. Die Vorteile eines unternehmensweiten Identitäts- und Zugriffsmanagements (IAM) inklusive einer Single-Sign-On-Lösung (SSO) sind offensichtlich. Keycloak nutzt offene Standards zur Authentifizierung von Nutzern unternehmensinterner Anwendungen und unterstützt auch externe Dienste, wie Slack oder Zoom. Leider hinkt es dem hinterher, was zum Standard für die Wartung von IT-Systemen geworden ist: Configuration as Code (CaC). An dieser Stelle kommt der Terraform Keycloak Provider ins Spiel. TNG hat zu diesem recht ausgereiften Open-Source-Projekt beigetragen und es zur Anwendung gebracht.

tl;dr: Wir unterstützen einen Keycloak-Provider für Terraform und verwenden ihn, um unseren Authentifizierungsserver zu verwalten. Schnelle und zuverlässige Iterationen an dieser sehr kritischen Infrastrukturkomponente sind jetzt mit unseren üblichen Softwareentwicklungsmethoden und hohen Standards möglich.

Wir haben mehrere Kandidaten im Hinblick auf den erforderlichen zusätzlichen Entwicklungsaufwand und unsere Stabilitätsziele verglichen. Der Kubernetes Keycloak Operator ist ein relativ junges Projekt und daher für unsere Zwecke nicht genügend erprobt. Eine andere Möglichkeit, die Keycloak-API zu abstrahieren, ist der Keycloak-Ansible-Provider. Das Tool hat uns allerdings in früheren Projekten, u.a. aufgrund eines schwierigen Zustands der Dokumentation, nicht überzeugt. Der dritte Kandidat, den wir uns angesehen haben und für den wir uns schließlich entschieden haben, war der Terraform Keycloak Provider. Für ihn spricht, dass er LDAP-User Federation und eine ausreichende Anzahl von Keycloaks Role Mappers unterstützt, und dass Terraform neben der manuellen Konfiguration auch eine automatisierte Provisionierung ermöglicht.

An einigen Stellen mussten wir den Provider patchen. Der Maintainer, Michael Parker, reagierte schnell und wir arbeiteten gemeinsam an unseren Pull-Requests.  Mittlerweile haben wir schon einige Erfahrung mit der Erweiterung und Wartung von Keycloak über Terraform gesammelt. Unserer Erfahrung nach scheint es so einfach zu sein wie die manuelle Konfiguration in der Benutzeroberfläche. Terraform-Module halten unsere Client-Konfiguration und erlauben es uns, verschiedene Parameter schnell zu tunen und zu testen. Jede Fehlkonfiguration kann schnell durch Wiederherstellung einer funktionierenden Version behoben werden. Außerdem kompensieren wir fehlende Features im Provider, indem wir die Konfiguration manuell vervollständigen. Dieser hybride Ansatz erlaubt auch leichtgewichtige Experimente durch Rückgriff auf die Benutzeroberfläche. 

Nachdem wir unsere Keycloak-Konfiguration in Code umgewandelt hatten, ging die Migration unserer Keycloak-Instanzen auf Kubernetes einfach und problemlos vonstatten. So wie es sein sollte.

Was denken Sie? Sprechen Sie uns gerne an, wenn Sie Fragen haben oder Unterstützung benötigen!