Traefik permet d'ajouter une authentification dite "basique" pour vos services web grĂące Ă un couple identifiant/mot de passe. En effet, certaines applications n'ont pas de mĂ©canisme d'authentification interne (par exemple Prometheus), l'exposition de ces services web sans authentification peut ĂȘtre critique.
Version | Date | Commentaires |
---|---|---|
1 | 05/2022 | Création de l'article |
1.1 | 05/2023 | Mise à jour de la syntaxe, ajout du contexte d'exécution, mise à jour des numéros de version, ajout d'un bloc exemple d'utilisation du middleware |
Objectif : Utiliser l'authentification (HTTP Basic auth) avec Traefik
Environnement : Debian 11.7
, Docker 23.x
, docker compose (plugin) 2.17.x
, Traefik 2.10
.
Contexte d'exécution :
jho@vmi866042:/srv/docker/dc$ tree
.
âââ conf
â  âââ acme.json
â  âââ traefik.yml
â  âââ traefikdynamic
â  â  âââ general.yml
â  â  âââ routersservices.yml
âââ docker-compose.yml
âââ logs
âââ traefikAccess.log
âââ traefik.log
- dossier oĂč se trouvent tous les fichiers et dossiers pour cet exemple :
/opt/docker/
- emplacement du fichier de configuration principal de Traefik :
/opt/docker/conf/traefik.yml
- dossier oĂč se trouvent les configurations de Traefik (fichiers dynamiques) :
/opt/docker/conf/traefikdynamic
- emplacement du fichier comportant tous les certificats générés par let's encrypt (ou autre) :
/opt/docker/traefik/conf/acme.json
- dossier oĂč se trouvent les journaux d'Ă©vĂ©nements (logs) :
/opt/docker/logs/
J'utiliserai une configuration dite "dynamique" (rappel sur les configurations sur le site).
Nous allons utiliser un "middleware", une configuration intermédiaire, permettant d'effectuer une opération à la volée avant de rediriger vers le service ciblé. Il en existe de plusieurs types dont les listes sont les suivantes :
- HTTP : https://doc.traefik.io/traefik/middlewares/http/overview/#available-http-middlewares
- TCP : https://doc.traefik.io/traefik/middlewares/tcp/overview/#available-tcp-middlewares

Une authentification basique est un identifiant et un mot de passe. Seul le mot de passe doit ĂȘtre chiffrĂ© en bcrypt. Ajoutons dans un premier temps le middleware, puis configurons le tableau de bord Traefik avec ce middleware, dans le fichier de configuration dynamique (fichier  /srv/docker/dc/conf/traefikdynamic/dynamic.yml
) :
http:
middlewares:
authentification:
basicAuth:
users: # admin / admin
- admin:$2y$10$KbBxnjLyBfFi355gJKhgJuXzGUaWbSRvNnvB2R9WDKpLFG1NEdcdi
routers:
rt-traefik:
entryPoints:
- websecure
middlewares:
- authentification
service: api@internal
rule: Host (`traefik.rezo.net`)
Le chiffrement des mots de passe d'authentification pour Traefik se fait via MD5, SHA1 ou BCrypt. Ici, ce sera du BCrypt, en utilisant le site web "bcrypt.fr" pour générer les hash. L'utilisation de la commande htpasswd
est aussi envisageable (en installation le paquet apache2-utils
) = htpasswd -nbB admin Le-Motdepa$$e
.
L'utilisateur créé (admin) a pour mot de passe "admin". Puisqu'il s'agit d'une configuration dynamique, vous n'avez pas besoin de redémarrer Traefik. Retenez qu'il s'agit d'une sécurité assez simpliste et ne remplacera pas une suite de mécanismes de sécurité.
Vous pouvez rĂ©utiliser ce middleware pour toutes les ressources derriĂšre Traefik, pour chaque dĂ©finition de routeurs que vous voulez. Ăcrivez le nom du middleware dans les dĂ©finitions de vos routeurs Ă protĂ©ger, comme dans l'exemple ci-dessous :
---
http:
services:
sc-prometheus:
loadBalancer:
servers:
- url: "http://prometheus:9090"
routers:
rt-prometheus:
entryPoints:
- websecure
middlewares:
- authentification
service: sc-prometheus
rule: Host (`prometheus.prive.hommet.local`)