Dennis Fricke

Docker Registry mit Google Open Id

DevOps

Die Docker Registry bietet seit Version 2 die Möglichkeit einen Open Id Provider für die Authentifizierung zu nutzen. Allerdings lässt sich die Registry nicht ohne weiteres an einen Open Id Provider anbinden, da man u.a. das Public Certificate des ausstellenden Open Id Providers in einem Ordner ablegen muss.

Keycloak als Lösung

Bis vor kurzem haben wir neben unserer Registry die in einem Kubernetes Cluster in der AWS läuft und die Daten in S3 ablegt zusätzlich einen Keycloak Server im Cluster betrieben, der seit Version 4 ein Feature anbietet, was es sehr einfach macht die Docker Registry anzubinden.

Dies funktioniert super, wenn man seine User auch im Keycloak verwaltet. Wir haben aber alles in der Google Cloud. Keycloak war in unserem Setup also nur eine Middleware.

Der Ablauf sah so aus, dass der Nutzer bevor er die Registry nutzen konnte auf die Realm Login Seite von Keycloak gehen musste. Dort authentifizierte er sich gegen Google. Keycloak hielt den Datensatz des Nutzers vor. Danach musste sich der Nutzer auf der Account Seite ein neues Passwort setzen, dass er dann beim docker login nutzen konnte. Ziemlich umständlich oder?

Docker Auth Proxy

Da wir mit der kompletten Firma in der Google Cloud sind und dort auch unsere Daten und Zugänge für alle Mitarbeiter pflegen war mir der Keycloak ein Dorn im Auge, da er als Middleware (Google <-> Keycloak <-> Docker Registry) unnötige Komplexität in das Setup bringt und für diesen Use Case einfach zu mächtig ist. Zudem hatten wir eine Abhängigkeit zwischen beiden Systemen. Die Registry brauchte Keycloak um die Authentifizierung der Nutzer zu machen und Keycloak brauchte die Registry um sein Docker Image zu pullen, falls man mal ein Update gemacht oder das System einfach kurzzeitig Probleme hatte. Ist eins der beiden Systeme ausgefallen, war Sense und wir hatten manuelle Aufwände.

Abhilfe schaffte da docker-auth von cesanta.

Der Ablauf ist etwas einfacher geworden: Der Nutzer geht einmalig auf die Login Seite des Docker Auth Proxies. Dort authentifiziert er sich gegen Google und bekommt ein Secret vom Proxy. Nun kann er sich mit docker login und seiner Email und dem Secret gegen die Registry authentifizieren.

Zur Zeit bin ich dran ein Helm Chart für den Docker Auth Proxy zu bauen.

4 Dec 2018 #DevOps #Docker #google #OpenID #Oauth