Möchten Sie Ihre Identitäts-, Richtlinien- und Authentifizierungssysteme effizient und mit minimalem Aufwand verwalten? Dann sollten Sie sich Ansible-FreeIPA ansehen. Die Ansible- Collection stellt Module, Rollen und Playbooks zur Verfügung, um damit sowohl neue als auch bestehende FreeIPA-basierte Identity-Management-Systeme zu installieren, zu konfigurieren und zu verwalten. Der Open-Source-Tipp in diesem Monat stellt die Software vor und zeigt, wie Sie sich ganz einfach auch mit Ihrem GitHub-Konto an einem Linux-System anmelden.
Die Ansible-FreeIPA-Collection [1] ermöglicht das automatisierte Bereitstellen, Konfigurieren und Verwalten von FreeIPA-Servern und Clientsystemen. FreeIPA [2] selbst ist eine Open-Source-Software für das Identitätsmanagement, die Funktionen wie Single Sign-on (SSO), zentrale Authentifizierung, Autorisierung und Verzeichnisdienste kombiniert. Die Umgebung setzt auf bekannte Technologien wie LDAP und Kerberos und wird häufig in Unternehmen eingesetzt, um Benutzer, Gruppen und Richtlinien zentral anzulegen und zu verwalten.
Die manuelle Installation und Konfiguration von FreeIPA kann zeitaufwendig und fehleranfällig sein. Hier kommt Ansible-FreeIPA ins Spiel. Es nutzt Ansible, um die Installation, Konfiguration und Verwaltung einer solchen Umgebung zu vereinfachen. Mit Ansible-FreeIPA richten Sie sämtliche Systeme konsistent, wiederholbar und mit minimalem Aufwand ein. Dabei spielt es keine Rolle, ob Sie eine einzelne Instanz oder eine komplexe, verteilte Umgebung betreiben.
Ansible-FreeIPA besteht aus einer Sammlung von Modulen, Rollen und Playbooks, die speziell für FreeIPA entwickelt wurden. Die Ansible-Module abstrahieren die komplexen Befehle, die Sie sonst manuell eingeben müssten und ermöglichen es Ihnen, FreeIPA über einfache YAML-Konfigurationen zu steuern. Sie benötigen lediglich ein grundlegendes Verständnis von Ansible und eine funktionierende Ansible-Umgebung [3].
Die Ansible-FreeIPA-Collection [1] ermöglicht das automatisierte Bereitstellen, Konfigurieren und Verwalten von FreeIPA-Servern und Clientsystemen. FreeIPA [2] selbst ist eine Open-Source-Software für das Identitätsmanagement, die Funktionen wie Single Sign-on (SSO), zentrale Authentifizierung, Autorisierung und Verzeichnisdienste kombiniert. Die Umgebung setzt auf bekannte Technologien wie LDAP und Kerberos und wird häufig in Unternehmen eingesetzt, um Benutzer, Gruppen und Richtlinien zentral anzulegen und zu verwalten.
Die manuelle Installation und Konfiguration von FreeIPA kann zeitaufwendig und fehleranfällig sein. Hier kommt Ansible-FreeIPA ins Spiel. Es nutzt Ansible, um die Installation, Konfiguration und Verwaltung einer solchen Umgebung zu vereinfachen. Mit Ansible-FreeIPA richten Sie sämtliche Systeme konsistent, wiederholbar und mit minimalem Aufwand ein. Dabei spielt es keine Rolle, ob Sie eine einzelne Instanz oder eine komplexe, verteilte Umgebung betreiben.
Ansible-FreeIPA besteht aus einer Sammlung von Modulen, Rollen und Playbooks, die speziell für FreeIPA entwickelt wurden. Die Ansible-Module abstrahieren die komplexen Befehle, die Sie sonst manuell eingeben müssten und ermöglichen es Ihnen, FreeIPA über einfache YAML-Konfigurationen zu steuern. Sie benötigen lediglich ein grundlegendes Verständnis von Ansible und eine funktionierende Ansible-Umgebung [3].
Vorbereitungen
Alle Beispiele aus diesem Artikel finden Sie in einem GitHub-Repository [4]. Mithilfe der dort gespeicherten Dateien erzeugen Sie sehr einfach eine Testumgebung, die Sie bei Bedarf auch an einen externen Identity-Provider, in diesem Beispiel GitHub, anbinden können. Stellen Sie also zuerst sicher, dass Sie neben Ansible selbst und Ansible-FreeIPA auch git auf Ihrem Controller-System installiert haben. Verwenden Sie für die Installation einfach den Paketmanager Ihrer Distribution. Auf einem Fedora-System kommt hierfür dnf zum Einsatz:
dnf install git ansible-core ansible-freeipa
Mit dem folgenden Git-Befehl erstellen Sie schließlich einen Klon des Git-Repositories auf Ihrem lokalen System:
Das Inventory in der Datei "inventory. yml" umfasst drei Systeme. Einen Server, ein Replica und einen Client. Des Weiteren kommen einige einfache Variablen zum Einsatz. Eine Beschreibung aller Variablen finden Sie entweder auf der Webseite des Ansible-FreeIPA Projekts [1] oder aber auch auf dem lokalen System im Verzeichnis "/usr/share/ansible/collections/ ansible_collections/freeipa/ansible_freeipa/". Das Inventory greift auf einen Ansible-Vault zurück. Das Passwort hierfür ist in der Repository Datei "secrets/secret" gespeichert. Ob der Zugriff auf den Vault klappt, können Sie mit dem folgenden Kommando testen:
cd ansible-freeipa-demo
ansible-vault view group_vars/all/vault.yml
Die einzelnen Anweisungen aus dem Inventory können Sie bei Bedarf natürlich an Ihre eigenen Bedürfnisse anpassen. Stellen Sie aber in jedem Fall sicher, dass auf Ihrem Controllersystem, das kann im einfachsten Beispiel auch das Clientsystem sein, die Namen der Rechner aus dem Inventory via DNS, oder einer lokalen Datei "/etc/hosts", auflösbar sind und eine Verbindung zu allen Systemen möglich ist. Außerdem sollten die entsprechenden Host-Keys in der Datei "~/.ssh/ known_hosts" vorhanden sein. Einen SSH-Schlüssel für den Ansible-Benutzer, in diesem Fall ist dies einfach der Benutzer "root", kopieren Sie mithilfe von ssh-copy-id auf die jeweiligen Systeme.
Cluster-Setup
Um nun einen Test-Cluster mit diesen drei Systemen zu installieren, rufen Sie die Datei "install-cluster.yml" aus dem "playbooks"-Verzeichnis auf dem Controllersystem auf:
ansible-playbook playbooks/ install-cluster.yml
Die Installation des Server beginnt, gefolgt mit dem Setup des Replica- und schließlich des Clientsystems. Hat alles ohne Probleme geklappt, sollten nach einiger Zeit alle drei Systeme installiert, konfiguriert und einsatzbereit sein. Ein Zugriff auf das Web-Frontend erfolgt über die URL "https://server.example. com". Der FreeIPA-Server verwendet eine Certificate Authority (CA) mit einem selbst-signierten Zertifikat. Von daher bekommen Sie im Browser eine Warnung angezeigt, wenn Sie auf das Web-UI zugreifen. Natürlich können Sie die CA auch als untergeordnete CA einer bereits vorhanden Zertifikatsstelle konfigurieren. Die Dokumentation hält hierfür entsprechende Hinweise bereit.
GitHub als externer IdP
FreeIPA erlaubt mithilfe der OAuth-2.0-Erweiterung "Device Authorization Grant" [5] die Anbindung an externe Identity-Provider (IdP), solange diese die OAuth Erweiterung unterstützen – GitHub, Microsoft EntraID oder Keycloak sind einige Beispiele. Hiermit können Sie die Autorisierung eines Benutzers an den externen IdP abgeben. Der Benutzer benötigt also kein Passwort mehr auf dem FreeIPA-System, stattdessen wird beim Login des Benutzers eine URL zusammen mit einem Code ausgegeben. Ruft der Benutzer die Adresse im Browser auf und gibt den Code ein, findet eine Authentifizierung des Users gegenüber dem IdP statt und er ist im Erfolgsfall somit autorisiert, auf das Linux-System zuzugreifen.
Die von FreeIPA eingesetzte OAuth-Erweiterung kommt beispielsweise auch auf Smart-TV-Geräten zum Einsatz, wenn Sie sich bei einer App anmelden möchten und dann einen Code mit Ihrem Handy scannen müssen. Nach einer erfolgreichen Authentifizierung auf dem Handy haben Sie dann ebenfalls Zugang zu der App auf dem Smart-TV.
Wir zeigen in diesem Open-Source-Tipp, wie Sie GitHub als externes IdP mit FreeIPA verknüpfen. Hierzu erzeugen Sie zuerst eine OAuth-Anwendung innerhalb von GitHub. Melden Sie sich also mit Ihrem Account auf der GitHub-Webseite [6] an und rufen Sie die Einstellungen für Entwickler unter "Settings / Developer Settings" auf. Dort legen Sie eine neue OAuth-App an und tragen als URL die Adresse des FreeIPA-Servers ein. Wichtig ist an dieser Stelle, dass Sie die Checkbox bei Device Flow setzen. Speichern Sie die Client-ID und das Secret, da Sie dieses im nächsten Schritt im IdP-Playbook hinterlegen müssen (siehe Bild).
Innerhalb von GitHub richten Sie FreeIPA als neue OAuth-Applikation ein.
IdP-Playbooks
Rufen Sie die Datei "install-idp.yml" auf und hinterlegen Sie hier nun das soeben gespeicherte Secret und die Client-ID. Schließlich tragen Sie Ihren GitHub- und FreeIPA-Benutzernamen in der Datei "create-idp-user.yml" ein. Ein Passwort für diesen Benutzer müssen Sie nicht setzen, da die Authentifizierung ja über das IdP stattfindet. Im Anschluss rufen Sie die beiden Playbooks auf, um die IdP-Konfiguration vorzunehmen und einen lokalen FreeIPA-Benutzer mit Ihrem GitHub-Benutzerkonto zu verknüpfen:
ansible-playbook playbooks/ install-idp.yml
ansible-playbook playbooks/ create-idp-user.yml
Hat alles geklappt, können Sie sich nun mit dem Account auf einem der FreeIPA-Systeme mittels SSH anmelden und die Authentifizierung des Benutzers über GitHub durchführen.
Fazit
Ansible-FreeIPA ist ein mächtiges Werkzeug, um die Installation, Konfiguration und Verwaltung von FreeIPA-Systemen zu erleichtern. Es spart Zeit, reduziert Fehler und ermöglicht eine konsistente und skalierbare Verwaltung Ihrer Infrastruktur. Anstatt sich mit manuellen Konfigurationen herumzuschlagen, können Sie sich auf die Definition Ihrer Anforderungen in Playbooks konzentrieren und den Rest Ansible überlassen. Selbst für komplexere Setups bietet sich Ansible-FreeIPA dabei an.