Nachdem ich die Installation von authentik in Kombination mit meiner traefik Installation zum laufen bekommen habe (siehe hier), ging es nun ans Werk, das System authentik zu verstehen. Sprich, wie kann ich zum Beispiel einzelne Anwendungen für Benutzer sperren.
Die Lösung hierzu lag schlicht im Lesen der sehr guten Dokumentation von authentik. Im folgenden werde ich das Prinzip aber am Beispiel des traefik Dashboards und einem WhoAmI-Container, einem authentik-Admin-User und einem normalen authentik-User beschreiben.
Als erstes muss der vorhandene Embedded Outpost noch bearbeitet werden: Applications => Outposts. In der Konfiguration steht per default docker_network: null
. Dieses muss durch docker_network: proxy
ersetzt werden. Diesen Teil hatte ich zunächst vergessen und ich wurde immer auf mein traefik-Dashboard geleitet, egal welche URL ich aufgerufen habe.
Weiterhin gilt (aktuell): Zwischen Application und Provider besteht eine 1-zu-1 Beziehung. In der Version 2023.5 wurden zwar auch Backchannel Provider eingeführt, aber diesen Punkt in der Dokumentation habe ich mir noch nicht angeschaut. Ich arbeite aktuell mit der 1-zu-1 Beziehung.
Damit erstelle ich mir dann für meine WhoAmI-Seite einen passende Proxy Provider analog zum bestehenden ForwardAuth Provider aus der Installationsanleitung. Es ist wieder eine single Application, diesmal mit dem External Host https://whoami.deine-domain.de.
Genau so folgt als nächstes eine neue Application, die den neu Erstellen Who-am-i-Provider nutzt. Als Policy engine mode nutze ich aktuell weiterhin any.
Nun müssen wir noch im embedded Outpost die neue Anwendung mit markieren, so dass dieser Outpost beiden Providern zugewiesen ist.
Nun erstelle ich mir unter Directory => Users zwei neue Test-User (traefik und whoami). Für den Moment zum Testen habe ich hier einfach nur den Usernamen vergeben. Anschließend klickt man auf die beiden neu erstellten Benutzer und kann dann mit Set Password noch ein Passwort für den Benutzer festlegen.
Gleiches mache ich mit Gruppen. Ich erstelle zwei Testgruppen (traefik und whoami) und weise die beiden Gruppen den jeweiligen Benutzern zu.
Bevor es jetzt mit der Zuweisung der Benutzer/Gruppen auf die Anwendungen los geht, teste ich in einem Inkognito-Browser-Fenster, ob aktuell beide Benutzer Zugriff auf die beiden Seiten https://traefik.deine-domain.de
sowie https://whoami.deine-domain.de
haben. Wenn beide Benutzer beide Seiten nach dem Login öffnen können, ist bis hier alles korrekt.
Als nächstes Testen wir die Einschränkung auf Benutzerebene. Dazu öffne ich zunächst unter Applications => Applications das Traefik Dashboard und wechsle auf den Reiter Policy/Group/User Bindings.
Nach einem Klick auf Create Binding wähle ich als Typ User aus. Für das Traefik Dashboard wähle ich den Traefik-Benutzer aus und klicke auf Create.
Analog dazu verfahre ich mit der Who-am-i-Application. Nur wähle ich hier den whoami Benutzer aus.
Jetzt wird der Test mit dem Inkognito-Browser-Fenster wiederholt. Wenn alles klappt, hat der Benutzer traefik Zugriff auf das Traefik-Dashboard und der Benutzer whoami Zugriff auf die Who-am-i Seite. Anders herum muss jetzt die Meldung Request has been denied erscheinen.
Nun ändere ich für beide Anwendungen das Binding von User auf Group. Dabei bekommt die Traefik-Anwendung das Group Binding traefik zugewiesen und die Who-am-i-Anwendung das Group Binding whoami zugewiesen. Da bislang jede dieser beiden Gruppen nur genau einen Benutzer hat, darf sich am Verhalten auf des Logins (noch) nichts ändern. Der Benutzer traefik darf weiterhin das Traefik-Dashboard sehen und der Benutzer whoami darf die Who-am-I-Seite sehen.
Im letzten Schritt weisen wir dem Benutzer traefik zusätzlich noch den die Gruppe whoami zu. Damit hat nun durch das Group Binding auch der Benutzer traefik Zugriff auf die Who-am-i-Seite. Der Benutzer whoami darf das Traefik-Dashboard weiterhin nicht sehen.
Zum Abschluss noch eine wichtige Bemerkung! Wenn Ihr hier mit User- oder Group-Bindings arbeitet, dann könnt Ihr auch Euren Admin-User vom Aufruf aussperren. Sprich, mein Admin Benutzer hat mit der obigen Konfiguration weder Zugriff auf das Traefik-Dashboard noch auf die Who-am-i-Seite. Am besten definiert Ihr Euch also für Eure Anwendungen jeweils Gruppen und weist Eurem Admin Benutzer die jeweiligen Gruppen zu und nutzt nur das Group-Binding. Damit sperrt Ihr Euch dann nicht von den einzelnen Anwendungen aus.
Man kann hier bestimmt noch viel tiefer in die Policies und den ganzen Kram einsteigen. Für mich reicht hier aktuell das Wissen um die Benutzer/Gruppen-Bindings aus, um im Freundeskreis einzelen Personen gezielt Zugriff auf einzelne Seiten zu gewähren.