J'avais plusieurs applications web sans authentification sur une instance Traefik avec une simple BasicAuth. Cette dernière est suffisante dans une majorité des cas, mais le fait que les OS ne gèrent pas correctement les gestionnaires de mot de passe type 1Password m'ennuyait.
Je me suis dit que Traefik devait bien avoir un moyen de mettre en place un système plus globale et j'ai donc trouvé ce tutoriel, que j'ai suivi, sans le côté Swarm puisque je suis en Docker classique. Je partage donc ici ma réinterprétation du tutoriel.
Middleware
Je ne reviens pas sur mon installation de Traefik, mais pour le contexte, sachez que toutes mes applications sont connectées à Traefik par le réseau traefik_default et que je configure Traefik par les labels Docker.
Voici ma config docker-compose :
Ma configuration de Dex :
Pour générer le mot de passe bcrypt, avec Ruby : ruby -e 'require "bcrypt"; puts BCrypt::Password.create("password")'.
La configuration de base Traefik Forward Auth :
Ajouter l'authentification sur vos services
Il ne reste plus qu'à ajouter le middleware sur les containers à sécuriser. Par exemple pour mon instance d'Hyperion, les labels dans mon docker-compose seront les suivants :
La ligne importante étant traefik.http.routers.hyperion.middlewares=forward-auth qui ajoute le middleware à Traefik.
J'ai quelques services non configurés via Docker (par exemple, le dashboard Traefik) et pour cela j'ajoute le middleware dans la configuration dynamique de Traefik. Par exemple pour le dashboard Traefik :
Votre certificat vers auth.example.com reste autosigné
Si c'est votre cas, c'est probablement parce que vous utilisez la méthode TLS Challenge pour générer votre certificat plutôt que DNS Challenge dans la configuration de Traefik. Allez voir de ce côté-là.