Nutzer-Synchronisation zwischen Entra ID und Keycloak: Python-Skript vs. SCIM

Die Synchronisation von Benutzerkonten zwischen Microsoft Entra ID (ehemals Azure AD) und Keycloak ist eine notwendige Aufgabe für Unternehmen, die zwar ihre Identitäten in Entra ID halten, aber die Authentifizierung über Keycloak abwickeln wollen. In diesem Blogbeitrag stellen wir zwei Ansätze vor: die Synchronisation per Python-Skript und die Nutzung des SCIM-Standards. Wir beleuchten die jeweiligen Vor- und Nachteile und geben eine Empfehlung für den produktiven Einsatz.

Synchronisation per Python-Skript

Python eignet sich besonders gut für diese Aufgabe, da es eine Vielzahl an Bibliotheken für API-Interaktionen bietet, einfach umzusetzen ist, sich hervorragend für Automatisierungsaufgaben eignet und leichtgewichtig bleibt.

Konzept

Ein Python-Skript ruft regelmäßig die Microsoft Graph API auf, um aktuelle Benutzer aus Entra ID abzurufen. Anschließend werden die Daten über die Keycloak REST API synchronisiert. Dabei werden neue Nutzer erstellt, bestehende aktualisiert und nicht mehr vorhandene Nutzer entfernt oder deaktiviert.

Das Skript kann flexibel angepasst und in eine bestehende Automatisierungslandschaft integriert werden. Typische Laufzeitumgebungen sind beispielsweise serverlose Container-Dienste wie AWS Lambda, Azure Functions oder Google Cloud Functions, die Ausführung in einem Container oder klassische einfach als Cronjob in einer virtuellen Maschine (VM).

Vorteile

  • Flexibel anpassbar: Individuelles Mapping von Attributen und benutzerdefinierten Regeln möglich
  • Leichtgewichtig und einfach umzusetzen: Ermöglicht eine schnelle Implementierung ohne großen Overhead
  • Volle Kontrolle über den Ablauf: Die Synchronisation kann genau nach den Unternehmensanforderungen gesteuert werden.

Nachteile

  • Wartungsaufwand: Regelmäßige Anpassungen nötig, z. B. bei API-Änderungen
  • Keine Echtzeit-Synchronisation: Synchronisation erfolgt in festgelegten Intervallen

Synchronisation per SCIM

Konzept

SCIM (System for Cross-domain Identity Management) ist ein offener Standard für die automatische Benutzer-Synchronisation. Da Keycloak keine native SCIM-Unterstützung bietet, kann das Drittanbieter-Plugin SCIM for Keycloak genutzt werden. Dieses Plugin erweitert Keycloak um eine SCIM-Schnittstelle, sodass Entra ID direkt mit Keycloak kommunizieren kann. Die Synchronisation erfolgt in Intervallen von 40 Minuten, da Entra ID diesen Zeitrahmen vorgibt.

Vorteile

  • Standardisierte Lösung: Weit verbreiteter und etablierter Standard.
  • Keine individuellen Skripte erforderlich: Einfache Konfiguration ohne Code-Anpassungen.
  • Direkte Integration in Keycloak und Entra ID: Steuerung über UI und Konfigurationsdateien.
  • Komfortable Nutzung durch das Plugin: Bietet eine einfache Implementierung ohne tiefgehende Kenntnisse der Keycloak REST API.

Nachteile

  • Abhängigkeit von einem Drittanbieter-Plugin: Die Entwicklung und Wartung liegt beim Anbieter von SCIM for Keycloak, der aktuell von einem einzelnen Entwickler betreut wird. Dies kann ein Risiko hinsichtlich langfristiger Wartung, Updates und Support darstellen
  • Kein Echtzeit-Sync: Nutzeränderungen in Entra ID werden erst nach 40 Minuten übernommen
  • Kompatibilitätsrisiken: Falls Keycloak größere Updates erhält, könnte das Plugin inkompatibel werden
  • Lizenz- und Support-Fragen: Mögliche Kosten oder Einschränkungen bei der Nutzung und Weiterentwicklung des Plugins müssen berücksichtigt werden

Empfehlung

SCIM ist eine elegante Lösung, jedoch ist die Abhängigkeit von einem einzelnen Entwickler für Unternehmen riskant. Daher empfehlen wir die Synchronisation per Python-Skript als pragmatische Lösung, bis Keycloak eine offizielle SCIM-Unterstützung implementiert. Sobald dies der Fall ist, kann ein Wechsel zu SCIM erfolgen, um eine langfristig nachhaltige Lösung zu nutzen.

Implementierungen

Falls du eine konkrete Umsetzung suchst, haben wir zwei detaillierte Anleitungen erstellt, die beide in diesem Artikel verglichenen Methoden im Detail beschreiben:

Je nach Anwendungsfall kannst du die Methode wählen, die am besten zu deinen Anforderungen passt!

Nach oben scrollen