Featured image of post Authentik in der Hybrid-Cloud: Zentrale Authentifizierung leicht gemacht

Authentik in der Hybrid-Cloud: Zentrale Authentifizierung leicht gemacht

Dieser Beitrag behandelt die Implementierung der zentralen Infrastrukturdienste einer Hybrid-Cloud: Caddy als Reverse Proxy, Authentik als Authentifizierungslösung und einen SSH-Server für Remote Port-Forwarding. Gemeinsam bilden diese drei Komponenten die Grundlage für die Integration und Sicherung von Diensten wie Nextcloud und Home Assistant. Der Beitrag bietet eine detaillierte Anleitung zur Einrichtung dieser Dienste und schafft eine skalierbare Infrastruktur, die in den kommenden Beiträgen weiter ausgebaut wird.

Die Hybrid-Cloud-Serie für dein Homelab bietet eine umfassende Anleitung zur Einrichtung einer sicheren, flexiblen und skalierbaren Homelab-Umgebung. Jeder Beitrag behandelt einen spezifischen Schritt, von der Hardware-Auswahl über Automatisierung und Containerisierung bis hin zu Bereitstellung von Applikationen wie Nextcloud oder Home-Assistant.

  1. Hybrid Cloud: Die ideale Kombination aus Flexibilität, Sicherheit und Skalierbarkeit für dein Homelab
  2. Ansible in der Hybrid-Cloud: Der Weg zur effizienten Automatisierung
  3. Containerisierung mit Docker: Die ideale Grundlage für dein Homelab
  4. Caddy als Reverse Proxy: Sichere deine Hybrid-Cloud
  5. Authentik in der Hybrid-Cloud: Zentrale Authentifizierung leicht gemacht
  6. Sicherer Zugriff auf deine Hybrid-Cloud: Alles über SSH-Tunneling

Authentik: Einrichtung eines zentralen Authentifizierungsdienstes in der Hybrid-Cloud

Authentik ist ein leistungsstarker, Open-Source-Identitäts- und Zugriffsmanagementdienst, der sich ideal für die Verwaltung von Nutzern und Zugriffen in einer Hybrid-Cloud eignet. Die Einrichtung eines Identity Providers (IdP) wie Authentik bietet zahlreiche Vorteile: Neben Single Sign-On (SSO) für einen nahtlosen Zugriff auf verschiedene Dienste ermöglicht ein zentraler IdP die konsistente Verwaltung von Benutzerrechten, die Implementierung von Sicherheitsrichtlinien und eine deutliche Reduzierung administrativen Aufwands. In diesem Kapitel werden die Grundlagen von Authentik vermittelt und anschließend die Implementierung mittels einer Ansible-Rolle und Docker Compose beschrieben.

Grundlagen von Authentik

Um die Funktionsweise von Authentik zu verstehen, ist es hilfreich, die grundlegenden Begriffe und Konzepte zu kennen, die den Dienst ausmachen:

  • Provider: In diesem Kontext fungiert der Provider als Schnittstelle zwischen Authentik und der Authentifizierungsquelle (z. B. LDAP, OAuth). Authentik kann jedoch auch eine eigene Benutzerverwaltung bereitstellen, wodurch externe Provider nicht zwingend notwendig sind. Dies ermöglicht eine flexible Anpassung an verschiedene Anforderungen.
  • Application: Eine Application definiert, wie eine Ressource geschützt wird. Sie enthält Informationen über den Ziel-Dienst und legt fest, welcher Provider für die Authentifizierung genutzt wird.
  • Token: Tokens sind kleine Datenpakete, die als Nachweis für eine erfolgreiche Authentifizierung dienen. Sie können für die Autorisierung von APIs oder Diensten verwendet werden.
  • Flow: Ein Flow beschreibt die Abfolge von Schritten, die zur Authentifizierung oder Registrierung eines Benutzers durchgeführt werden.

Diese Begriffe bilden das Fundament der Authentik-Architektur und sind entscheidend für die Integration und Verwaltung von Diensten in einer Hybrid-Cloud-Umgebung.

Bevor wir tiefer in die Einrichtung von Authentik eintauchen, ist es wichtig, grundlegende Konzepte wie Single Sign-On (SSO) und OAuth zu verstehen, die die Basis für Authentik bilden:

  • Single Sign-On (SSO): SSO ermöglicht es Nutzern, sich einmal anzumelden und anschließend auf mehrere Anwendungen zuzugreifen, ohne sich erneut authentifizieren zu müssen. Dies verbessert die Benutzererfahrung erheblich und reduziert den Aufwand für die Verwaltung von Zugangsdaten.
  • OAuth (Open Authorization): OAuth ist ein Protokoll, das sicheren, delegierten Zugriff ermöglicht. Statt Benutzernamen und Passwörter weiterzugeben, gewährt OAuth Anwendungen Zugriff auf Ressourcen durch Token-basierte Authentifizierung.
  • OpenID Connect (OIDC): OIDC ergänzt OAuth um eine Identitätsschicht und ermöglicht es, Benutzer zu identifizieren und grundlegende Profildaten bereitzustellen.

Vergleich zu anderen Lösungen: Authentik, Authelia und Keycloak

Der Authentifizierungsablauf in einer Hybrid-Cloud wirft oft die Frage auf, welche Lösung sich am besten eignet. Neben Authentik gibt es weitere Open-Source-Optionen, die spezifische Anforderungen erfüllen können. Authelia beispielsweise ist besonders für Zwei-Faktor-Authentifizierung und Proxy-Integrationen optimiert, während Keycloak durch seine breite Unterstützung von Protokollen wie OAuth, OIDC und SAML hervorsticht. Diese beiden Lösungen bieten eine klare Abgrenzung, aber auch Herausforderungen in der Einrichtung und Flexibilität, die es zu bewerten gilt.

Die Stärken von Authentik liegen in seiner intuitiven Bedienung, der nahtlosen Integration in Docker-Umgebungen und seiner modularen Architektur, die es zu einer bevorzugten Wahl in Hybrid-Cloud-Szenarien macht.

Neben Authentik gibt es weitere Open-Source-Lösungen, die für Identitäts- und Zugriffsmanagement verwendet werden können. Zwei erwähnenswerte Alternativen sind Authelia und Keycloak:

  • Authelia: Authelia ist speziell für Zwei-Faktor-Authentifizierung und Proxy-Integrationen konzipiert. Es bietet einfache Möglichkeiten, bestehende Dienste mit zusätzlichen Sicherheitsmechanismen wie TOTP oder WebAuthn zu schützen. Diese Spezialisierung macht Authelia jedoch weniger flexibel bei der Integration von umfassenderen Protokollen wie OAuth oder OIDC, die in einer Hybrid-Cloud-Umgebung oft erforderlich sind.

  • Keycloak: Keycloak ist eine umfassende Lösung für Identitätsmanagement und Zugriffskontrolle. Es unterstützt OAuth, OIDC und SAML und bietet eine breite Palette von Funktionen, darunter Benutzerverwaltung, Rollenbasierte Zugriffskontrolle (RBAC) und Social Login. Jedoch ist Keycloak durch seine Vielzahl an Features oft komplex in der Konfiguration und erfordert eine steilere Lernkurve.

Die Entscheidung für Authentik in unserer Hybrid-Cloud-Umgebung beruht auf mehreren Faktoren. Nachdem die allgemeinen Eigenschaften von Authentik, Authelia und Keycloak beleuchtet wurden, stellt sich die Frage, warum Authentik in unserem Szenario die ideale Wahl ist.

  1. Benutzerfreundlichkeit: Authentik bietet eine intuitive Benutzeroberfläche und ist im Vergleich zu Keycloak einfacher einzurichten und zu verwalten. Es eignet sich besonders für Projekte, die keine IT-Spezialisten erfordern.

  2. Flexibilität: Authentik unterstützt umfassend OAuth und OIDC, was die Integration von Diensten wie Nextcloud und Vaultwarden erleichtert. Diese Protokolle sind essenziell für moderne, cloudbasierte Anwendungen.

  3. Anpassungsfähigkeit: Authentik ermöglicht durch Flows, Providern und Applications eine modulare und leicht anpassbare Infrastruktur. Diese Flexibilität ist besonders wichtig, wenn Dienste wie Nextcloud und Vaultwarden integriert werden sollen.

  4. Nahtlose Integration: Mit vorgefertigten Docker-Images, klar definierten Netzwerken und einfacher Ansible-Integration lässt sich Authentik schnell und zuverlässig bereitstellen. Das macht es ideal für Umgebungen, in denen Zeit und Ressourcen knapp sind.

  5. Transparenz: Da Authentik Open-Source ist, bietet es vollständige Kontrolle über den Quellcode und ermöglicht individuelle Anpassungen, die bei kommerziellen Lösungen oft nicht möglich sind.

Durch diese Kombination aus Benutzerfreundlichkeit, Flexibilität und Anpassungsfähigkeit hat sich Authentik als die bevorzugte Wahl für unsere Anforderungen erwiesen. Es ermöglicht uns, eine sichere und zentrale Authentifizierungsplattform in unserer Hybrid-Cloud-Umgebung zu betreiben und dabei von einer aktiven Open-Source-Community zu profitieren.

Verifikationsquellen: Wie Authentik Benutzer authentifiziert

Authentik bietet eine Vielzahl von Verifikationsquellen, um Benutzer zu authentifizieren. Dieser Prozess, auch als Verifikation bezeichnet, stellt sicher, dass ein Benutzer tatsächlich derjenige ist, der er vorgibt zu sein. Dies erfolgt durch die Überprüfung von Anmeldedaten wie Benutzernamen und Passwort oder durch moderne Methoden wie Multi-Faktor-Authentifizierung (MFA). Sobald ein Benutzer erfolgreich verifiziert wurde, erhält er Zugriff auf Anwendungen oder Dienste, die über Authentik geschützt werden.

Dieser Verifikationsprozess ist besonders wichtig in Umgebungen mit Single Sign-On (SSO). Hierbei genügt eine einmalige Anmeldung, um nahtlosen Zugriff auf mehrere Anwendungen zu ermöglichen. Authentik fungiert als zentrale Plattform, die diese Verifikation für alle verbundenen Dienste übernimmt und so die Sicherheit und Benutzerfreundlichkeit erhöht.

Ein besonderer Vorteil von Authentik ist die Fähigkeit, als Vermittler zwischen Anwendungen und Benutzerverwaltungen zu agieren. Das bedeutet, dass eine Anwendung, die beispielsweise das OpenID-Connect-Protokoll (OIDC) unterstützt, über Authentik auf eine Benutzerverwaltung wie LDAP oder Active Directory zugreifen kann. Authentik übersetzt dabei die Anforderungen der Anwendung in ein Format, das die Benutzerverwaltung versteht, und ermöglicht so eine flexible Integration auch in heterogenen Umgebungen.

In unserer Blog-Reihe behandeln wir ausschließlich die interne Verifikationsquelle, um die Einrichtung und Verwaltung zu vereinfachen. Sie erlaubt es, grundlegende Funktionen wie Benutzer- und Gruppenverwaltung, Policies und Authentifizierungsprozesse zu implementieren, ohne dabei weitere Abhängigkeiten zu externen Quellen zu haben.

Interne Verifikationsquelle

Die interne Verifikationsquelle in Authentik ist ideal für Umgebungen, in denen keine externe Benutzerverwaltung erforderlich ist. Benutzer werden direkt in Authentik erstellt und verwaltet, wodurch eine vollständige Kontrolle innerhalb der Plattform gewährleistet ist:

  • Einfache Einrichtung: Keine externe Infrastruktur wie LDAP oder OAuth erforderlich.
  • Komplette Kontrolle: Benutzer- und Gruppendaten sind direkt in Authentik verfügbar und einfach zu verwalten.
  • MFA-Unterstützung: Multi-Faktor-Authentifizierung kann problemlos aktiviert werden, um die Sicherheit zu erhöhen.

Weitere Verifikationsquellen

Neben der internen Verifikationsquelle unterstützt Authentik die Integration mit einer Vielzahl externer Identitätsquellen, um maximale Flexibilität und Skalierbarkeit zu bieten:

  • LDAP: Integration mit LDAP-Verzeichnissen wie OpenLDAP oder Active Directory, ideal für Organisationen mit zentralisierter Benutzerverwaltung.
  • Active Directory (AD): Direkte Verbindung zu Microsoft Active Directory zur Synchronisierung von Benutzern und Gruppen.
  • OAuth2/OpenID Connect (OIDC): Verbindung zu modernen Identitätsanbietern wie Google, Microsoft Azure AD oder GitHub.
  • SAML: Unterstützung von SAML-Providern wie Okta oder ADFS für SSO in Unternehmensumgebungen.
  • Social Login: Ermöglicht die Anmeldung über soziale Netzwerke wie Google, Facebook oder LinkedIn.
  • RADIUS: Authentifizierung über RADIUS-Server, häufig in Netzwerkinfrastrukturen eingesetzt.
  • SCIM: Automatisierte Benutzer- und Gruppensynchronisation über das SCIM-Protokoll.
  • Externe Datenbanken: Anpassbare Verbindungen zu externen SQL-Datenbanken.
  • REST APIs: Benutzerdefinierte Integrationen über REST-basierte Dienste.

Diese Quellen ermöglichen es, Authentik in nahezu jede Umgebung zu integrieren und Benutzer aus bestehenden Systemen zu authentifizieren. Nutzen Sie die Flexibilität von Authentik, um Ihre bereits vorhandenen Verifikationsquellen einzubinden und so eine nahtlose Authentifizierung in Ihrer Umgebung zu gewährleisten.

Authentifizierungsablauf in Authentik

Ein zentraler Aspekt bei der Nutzung von Authentik in einer Hybrid-Cloud-Umgebung ist das Verständnis, wie der Authentifizierungsablauf funktioniert. Dieses Wissen ist essenziell, um die sichere und nahtlose Integration von Diensten wie Nextcloud zu ermöglichen. Das folgende Diagramm verdeutlicht die Schritte, die ein Benutzer durchläuft, um Zugriff auf geschützte Ressourcen zu erhalten, und zeigt, wie Authentik dabei als zentraler Identity Provider (IdP) agiert.

Ein zentraler Aspekt bei der Nutzung von Authentik in einer Hybrid-Cloud-Umgebung ist das Verständnis, wie der Authentifizierungsablauf funktioniert. Dieses Wissen ist essenziell, um die sichere und nahtlose Integration von Diensten wie Nextcloud zu ermöglichen. Der folgende Ablauf zeigt, wie Authentik als Identity Provider (IdP) arbeitet, um Benutzeranfragen zu verifizieren und den Zugriff auf geschützte Ressourcen zu gewähren.

sequenceDiagram
    participant User
    participant Nextcloud
    participant Authentik
    participant Provider

    User->>Nextcloud: Zugriff auf Anwendung
    Nextcloud->>User: Weiterleitung zur Authentik-Anmeldeseite (wenn nicht authentifiziert)
    User->>Authentik: Eingabe von Benutzername und Passwort
    Authentik->>Provider: Validierung der Anmeldedaten
    Provider-->>Authentik: Ergebnis der Validierung
    Authentik-->>User: Authentifizierung erfolgreich, Rückgabe eines Zugriffstokens
    User->>Nextcloud: Rückkehr zur Anwendung mit Zugriffstoken
    Nextcloud->>Authentik: Überprüfung des Zugriffstokens
    Authentik-->>Nextcloud: Validierungsstatus
    Nextcloud-->>User: Zugriff auf die Ressourcen gewährt

Das Diagramm illustriert den gesamten Prozess der Authentifizierung in einer Hybrid-Cloud-Umgebung. Es dient als visuelle Darstellung, um die einzelnen Schritte vom initialen Benutzerzugriff bis hin zur Bereitstellung der Ressourcen nach erfolgreicher Validierung zu verdeutlichen. Dabei zeigt es insbesondere, wie Nextcloud als Service Provider mit Authentik als zentralem Identity Provider (IdP) interagiert, um Benutzeranfragen sicher und effizient zu verarbeiten. Dieses Verständnis ist entscheidend, um die Funktionalität und Vorteile einer zentralisierten Authentifizierungsplattform zu erkennen.

  1. Nutzer besucht Nextcloud:
    • Der Benutzer ruft die Nextcloud-URL auf, um auf die Anwendung zuzugreifen.
    • Nextcloud prüft, ob der Benutzer bereits authentifiziert ist (z. B. durch ein bestehendes Zugriffstoken).
    • Falls der Benutzer nicht authentifiziert ist:
      • Nextcloud leitet den Benutzer zur Authentik-Plattform weiter.
  2. Benutzer meldet sich bei Authentik an:
    • Auf der Authentik-Anmeldeseite gibt der Benutzer seine Zugangsdaten ein.
    • Authentik sendet die Anmeldedaten an den konfigurierten Provider (z. B. LDAP oder interne Benutzerverwaltung).
  3. Provider validiert die Zugangsdaten:
    • Der Provider überprüft die Authentifizierungsanfrage und sendet das Ergebnis (erfolgreich oder nicht erfolgreich) an Authentik zurück.
  4. Authentik stellt ein Zugriffstoken aus:
    • Bei erfolgreicher Authentifizierung wird ein Zugriffstoken generiert.
    • Authentik leitet den Benutzer zusammen mit diesem Token zurück zu Nextcloud.
  5. Nextcloud verifiziert das Token:
    • Nextcloud überprüft das von Authentik bereitgestellte Token.
    • Dies kann durch direkte Kommunikation mit Authentik oder durch Validierung der kryptografischen Signatur des Tokens erfolgen.
  6. Zugriff auf Nextcloud gewährt:
    • Nach erfolgreicher Verifizierung des Tokens erhält der Benutzer Zugang zu Nextcloud und kann die gewünschten Ressourcen nutzen.

Dieser Ablauf gewährleistet eine sichere, benutzerfreundliche und zentralisierte Verwaltung von Authentifizierungsprozessen.

Einrichtung von Authentik mit Ansible und Docker Compose

In diesem Abschnitt beschreiben wir die Rolle zur Implementierung von Authentik mittels Ansible. Das Vorgehen folgt dem gleichen Schema wie bei der exemplarischen hello-world- und Caddy-Rolle, was die Wiederverwendbarkeit und Konsistenz innerhalb der Hybrid-Cloud-Umgebung deutlich vereinfacht.

Verzeichnisstruktur der Rolle

Die Rolle ist wie folgt strukturiert, um eine klare Trennung der Aufgaben zu gewährleisten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
roles/
└── authentik/
    ├── defaults/
    │   └── main.yml
    ├── files/
    │   ├── data/
    │   ├── postgres/
    │   ├── redis/
    │   └── docker-compose.yml
    ├── meta/
    │   └── main.yml
    └── tasks/
        └── main.yml

Diese Struktur bietet Modularität und erleichtert Anpassungen, beispielsweise für spezifische Umgebungen oder Anforderungen.

Definition der Variablen

Die zentrale Variable der Rolle definiert das Verzeichnis für die Installation von Authentik und ist identisch mit dem Ansatz, den wir bereits bei der Einrichtung der hello-world- und Caddy-Rollen verwendet haben:

defaults/main.yml

1
authentik_directory: "{{ services_directory }}/authentik"

Diese einheitliche Struktur gewährleistet eine konsistente Verzeichnisverwaltung und erleichtert die Integration neuer Dienste in die bestehende Umgebung.

Docker Compose Konfiguration

Die docker-compose.yml-Datei bildet das Herzstück der Authentik-Einrichtung. Sie definiert die Services und Netzwerke, die für den Betrieb von Authentik erforderlich sind. Dabei wird eine klare Trennung zwischen interner und externer Kommunikation gewährleistet, was die Sicherheit und Skalierbarkeit optimiert.

files/docker-compose.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
services:
  authentik:
    image: ghcr.io/goauthentik/server
    container_name: authentik
    command: server
    user: "${UID}:${GID}"
    environment:
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
      AUTHENTIK_REDIS__HOST: authentik_redis
      AUTHENTIK_POSTGRESQL__HOST: authentik_postgres
      AUTHENTIK_POSTGRESQL__USER: authentik_pg_user
      AUTHENTIK_POSTGRESQL__PASSWORD: authentik_pg_password
      AUTHENTIK_POSTGRESQL__NAME: authentik_db
    volumes:
      - ./data:/app/data
    networks:
      - internal_services
      - authentik_services
    depends_on:
      - authentik_postgres
      - authentik_redis
      
  authentik_worker:
    image: ghcr.io/goauthentik/server
    container_name: authentik_worker
    command: worker
    user: "${UID}:${GID}"
    environment:
      AUTHENTIK_SECRET_KEY: ${AUTHENTIK_SECRET_KEY}
      AUTHENTIK_REDIS__HOST: authentik_redis
      AUTHENTIK_POSTGRESQL__HOST: authentik_postgres
      AUTHENTIK_POSTGRESQL__USER: authentik_pg_user
      AUTHENTIK_POSTGRESQL__PASSWORD: authentik_pg_password
      AUTHENTIK_POSTGRESQL__NAME: authentik_db
    networks:
      - authentik_services
    depends_on:
      - authentik_postgres
      - authentik_redis
      
  authentik_postgres:
    image: postgres:alpine
    container_name: authentik_postgres
    user: "${UID}:${GID}"
    environment:
      - POSTGRES_DB=authentik_db
      - POSTGRES_USER=authentik_pg_user
      - POSTGRES_PASSWORD=authentik_pg_password
    volumes:
      - ./postgres:/var/lib/postgresql/data
    networks:
      - authentik_services
      
  authentik_redis:
    image: docker.io/library/redis:alpine
    container_name: authentik_redis
    command: --save 60 1 --loglevel warning
    restart: unless-stopped
    user: "${UID}:${GID}"
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
      start_period: 20s
      interval: 30s
      retries: 5
      timeout: 3s
    volumes:
      - ./redis:/data
    networks:
      - authentik_services

networks:
  internal_services:
    external: true
  authentik_services:
    internal: true

Die Netzwerke in der docker-compose.yml-Datei spielen eine zentrale Rolle für die Sicherheit und Funktionalität der Authentik-Dienste. Das internal_services-Netzwerk wird als extern definiert, da es außerhalb dieser Compose-Datei erstellt wurde, ursprünglich durch den Caddy-Service. Es erlaubt die Kommunikation zwischen Caddy und dem Authentik-Dienst und ermöglicht Caddy so, als Reverse Proxy zu fungieren.

Das authentik_services-Netzwerk hingegen wird ausschließlich für die interne Kommunikation zwischen dem Authentik-Worker, der PostgreSQL-Datenbank und dem Redis-Dienst genutzt. Diese Dienste bleiben dadurch vollständig vom Host und anderen Netzwerken isoliert, was eine zusätzliche Sicherheitsebene schafft.

Kern-Dienste Authentik und Authentik-Worker

Der Authentik-Dienst bildet das Herzstück der Authentifizierungsplattform. Er verarbeitet Benutzeranfragen, stellt die Benutzeroberfläche bereit und fungiert als zentrale Instanz für die Kommunikation mit den Backends. Ergänzt wird dies durch den Worker-Dienst (authentik_worker), der Hintergrundaufgaben übernimmt, wie das Verarbeiten von Warteschlangen und zeitkritischen Jobs. Diese Trennung sorgt dafür, dass Hauptanfragen nicht durch ressourcenintensive Prozesse beeinträchtigt werden.

Helfer-Dienste PostgreSQL und Redis

Die PostgreSQL-Datenbank (authentik_postgres) speichert alle Authentifizierungsdaten, Konfigurationen und Benutzerinformationen. Ihre Zuverlässigkeit und Geschwindigkeit sind essenziell für den stabilen Betrieb von Authentik. Ergänzend dazu dient Redis (authentik_redis) als Caching- und Nachrichtensystem, das die Kommunikation zwischen den Diensten beschleunigt und die Verarbeitung von Aufgaben optimiert. Diese beiden Dienste arbeiten eng zusammen, um eine performante und skalierbare Authentifizierungsplattform zu gewährleisten.

Abhängigkeiten der Rolle

 Im Fall von Authentik werden die Rollen docker und caddy als Voraussetzungen definiert:

meta/main.yml

1
2
3
dependencies:
  - role: docker
  - role: caddy

Die Docker-Rolle stellt sicher, dass Docker auf dem Host installiert und betriebsbereit ist, während die Caddy-Rolle das Netzwerk und die Reverse-Proxy-Konfiguration bereitstellt, die Authentik benötigt.

Aufgaben der Ansible-Rolle

Da dies bereits die dritte Rolle nach demselben Schema ist, konzentrieren wir uns auf die spezifischen Aufgaben, die für die Bereitstellung und Konfiguration von Authentik erforderlich sind. Diese umfassen das Einrichten von Verzeichnissen, das Bereitstellen von Konfigurationsdateien und das Implementieren der Docker Compose-Konfiguration.

tasks/main.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- name: Ensure directory exists
  file:
    path: "{{ authentik_directory }}"
    state: directory
- name: Copy configuration files
  copy:
    src: files/
    dest: "{{ authentik_directory }}"
- name: Deploy with Docker Compose
  community.docker.docker_compose_v2:
    project_src: "{{ authentik_directory }}"
    remove_orphans: true
    state: present
  environment:
    UID: "{{uid}}"
    GID: "{{gid}}"
    AUTHENTIK_SECRET_KEY: "{{AUTHENTIK_SECRET_KEY}}"
- name: Configure reverse proxy
  blockinfile:
    path: "{{ caddy_reverse }}"
    marker: "# {mark} AUTHENTIK REVERSE PROXY"
    block: |
      auth.deinedomain.de {
             reverse_proxy authentik:9000
      }      
  notify:
    - Reload Caddy

Die Aufgaben umfassen das Erstellen der Verzeichnisstruktur, das Bereitstellen der Konfigurationsdateien sowie die Implementierung der Authentik-Dienste mittels Docker Compose. Eine Besonderheit ist die Konfiguration des Reverse Proxy. Hierbei wird die Datei caddy_reverse, die zuvor von der Caddy-Rolle mittels set_fact bereitgestellt wurde, durch die Verwendung von blockinfile ergänzt. Dieser Ansatz ermöglicht es, Proxy-Einstellungen direkt in die Caddy-Konfiguration zu integrieren, ohne die zentrale Caddyfile manuell pflegen zu müssen. Dadurch bleibt die Konfiguration modular und flexibel, da jede Rolle ihre spezifischen Proxy-Anforderungen selbst definiert. Der Notify-Mechanismus sorgt dafür, dass Caddy über Änderungen an der Konfiguration informiert wird, indem der entsprechende Handler ausgelöst wird. Dies stellt sicher, dass Änderungen sofort wirksam werden und der Proxy stets korrekt konfiguriert bleibt.

Ansible-Aufruf zur Bereitstellung

Um die Rolle auf den Host anzuwenden, müssen wir zunächst die site.yml erweitern, um die Rolle der Gruppe cloud zuzuweisen, da die Authentik-Rolle nur auf der Cloud-Instanz benötigt wird:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
- name: Apply to all hosts
  hosts: all
  roles:
    - docker
    - hello-world
- name: Apply to cloud instance
  hosts: cloud
  roles:
    - caddy
    - authentik

Nachdem diese Anpassung vorgenommen wurde, kann die Rolle mit folgendem Befehl auf den Host angewendet werden:

1
ansible-playbook -i inventory site.yml

Dies sorgt dafür, dass die Konfiguration automatisiert bereitgestellt und die Dienste gestartet werden.

Authentik Initiales-Setup

Nach dem erfolgreichen Start des Authentik-Dienstes navigiere zu der Seite https://<auth.deinedomain.de>/if/flow/initial-setup/. Dort kannst du das initiale Setup durchführen, um das Administrator-Passwort festzulegen.

Authentik Initial Setup

Der Administrator-Account ist ausschließlich für administrative Aufgaben vorgesehen. Es wird empfohlen, diesen nicht für die Anmeldung an Diensten, die wir im Verlauf dieser Blogreihe erstellen werden, zu verwenden. Stattdessen sollte ein separates Benutzerkonto erstellt werden, um die Sicherheit zu erhöhen und eine klare Trennung zwischen administrativen und regulären Aufgaben sicherzustellen.

Nach der Einrichtung: Optimierung und Feinjustierung

Nach der erfolgreichen Einrichtung von Authentik gibt es mehrere Möglichkeiten, die Plattform weiter zu optimieren und auf individuelle Anforderungen anzupassen:

Beginnen Sie mit einem gründlichen Test der Authentik-Umgebung, um sicherzustellen, dass alle zentralen Funktionen wie erwartet arbeiten. Aktivieren Sie Multi-Faktor-Authentifizierung (MFA) und prüfen Sie deren Benutzerfreundlichkeit und Zuverlässigkeit. Ebenso wichtig ist die Überprüfung des Passwort-Reset-Workflows, um sicherzustellen, dass Benutzer ihre Passwörter problemlos zurücksetzen können.

Sobald die Basisfunktionalität bestätigt ist, können Sie spezifischere Richtlinien erstellen. Durch granulare Zugriffskontrollen, die auf Gruppen, Rollen oder IP-Adressen basieren, wird der Zugriff besser gesteuert. Sicherheitsfunktionen wie Geofencing oder zeitbasierte Zugriffsbeschränkungen können zusätzlich aktiviert werden, um ein höheres Sicherheitsniveau zu gewährleisten.

Die Benutzeroberfläche von Authentik lässt sich an die spezifischen Bedürfnisse Ihrer Organisation anpassen. Beim Portal Branding können Sie das Erscheinungsbild der Plattform durch Hinzufügen eines Logos, die Anpassung des Farbschemas oder die Aktualisierung von Begrüßungstexten personalisieren. Diese Änderungen sorgen dafür, dass sich die Benutzer direkt in der Umgebung Ihrer Organisation wiederfinden. Darüber hinaus ist es hilfreich, Feedback von Nutzern einzuholen, um mögliche Schwachstellen oder Verbesserungsmöglichkeiten in der Benutzerfreundlichkeit zu identifizieren. Kleinere Anpassungen können den täglichen Umgang mit der Plattform erheblich erleichtern und Akzeptanzprobleme minimieren.

Fazit und Ausblick

Der aktuelle Beitrag zur Hybrid-Cloud-Serie beleuchtet detailliert die Einrichtung und Vorteile einer zentralen Authentifizierungsplattform mit Authentik. Dabei werden nicht nur grundlegende Konzepte wie Single Sign-On (SSO) und OAuth erklärt, sondern auch praktische Anleitungen zur Implementierung mittels Docker Compose und Ansible gegeben. Authentik erweist sich als benutzerfreundliche und flexible Lösung, die eine nahtlose Integration in Hybrid-Cloud-Umgebungen ermöglicht. Dank der modularen Architektur und der Unterstützung zahlreicher Protokolle wie OAuth und OIDC ist Authentik ideal für die Verwaltung von Diensten wie Nextcloud und Vaultwarden.

Im nächsten Beitrag der Serie wird der Fokus auf die sichere Verbindung und den Fernzugriff auf deine Hybrid-Cloud gelegt. Unter dem Titel Sicherer Zugriff auf deine Hybrid-Cloud: Alles über SSH-Tunneling erfährst du, wie du mittels SSH-Tunneling eine verschlüsselte Verbindung zu deinen Diensten herstellst. Dieser Schritt ist essenziell, um sensible Daten vor unbefugtem Zugriff zu schützen und dennoch flexibel auf deine Infrastruktur zugreifen zu können. Die Anleitung wird sowohl praktische Konfigurationstipps als auch Sicherheitsaspekte behandeln, um deinen Homelab-Zugriff optimal abzusichern.

Bleib dran, um zu lernen, wie SSH-Tunneling deine Hybrid-Cloud noch sicherer macht!

Erstellt mit Hugo
Theme Stack gestaltet von Jimmy