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
Résultat de la commande "tree" dans le dossier /srv/docker/dc
  • 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 :

traefik middlewares architecture
Schéma récapitulatif de l'utilisation des middleware dans Traefik

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`)
Fichier /srv/docker/dc/conf/traefikdynamic/dynamic.yml

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`)
Partager l'article