Secrets Docker

🔒 Pourquoi un secret est mieux qu’une variable d’environnement ?

  • Si tu mets ton mot de passe en variable d’environnement (WORDPRESS_DB_PASSWORD=xxx) :
    • Il apparaĂ®t dans docker inspect.
    • Il peut ĂŞtre lu par n’importe qui qui a accès Ă  la machine.
    • Il peut finir dans des logs ou dans Portainer en clair.
  • Avec un secret (WORDPRESS_DB_PASSWORD_FILE=/run/secrets/mysql) :
    • Le mot de passe n’est pas stockĂ© dans l’environnement.
    • Il est montĂ© dans le conteneur comme un fichier temporaire, en lecture seule, dans /run/secrets/....
    • Seul le conteneur qui a explicitement demandĂ© le secret peut y accĂ©der.

⚙️ Techniquement, ce qui rend ça sécurisé

  1. Stockage chiffré
    • Dans Swarm, les secrets sont stockĂ©s chiffrĂ©s sur disque dans /var/lib/docker/swarm/.
    • Ils sont aussi chiffrĂ©s lors du transit entre les nĹ“uds Swarm.
  2. Isolation
    • Un secret est uniquement montĂ© dans le conteneur qui en a besoin.
    • MĂŞme si tu as 10 services sur la mĂŞme machine, un conteneur qui n’a pas dĂ©clarĂ© le secret n’y aura jamais accès.
  3. Lecture en mémoire
    • Quand le conteneur s’arrĂŞte, le fichier /run/secrets/... disparaĂ®t.
    • Il n’y a pas de copie permanente du mot de passe dans les logs, ni dans docker inspect.
  4. Accès minimal
    • Les secrets sont montĂ©s en lecture seule.
    • Impossible pour ton conteneur de modifier ou supprimer ce secret.

Pour commencer vous aurez besoin d’une installation de docker officiel (ce) et non via snap.
Par la suite il faudra activer swarm de docker avec cette commande :

Si vous utilisez Portainer vous aurez accès à de nouvelle fonctionnalités comme les secrets, ce qui nous intéresse

Alors vous pouvez utiliser l’interface Portainer pour crĂ©er votre secret ou sinon continuer en ligne de commande comme je vais le faire. De toute manière pour lancer le container ça sera en ligne de commande.

Pour créer votre secret lancez la commande suivante :

Pour vérifier que votre secret est bien ajouté vous pouvez lancer la commande :

Vous devriez obtenir ceci :

Maintenant pour l’exemple je vais crĂ©er un container MYSQL et Ă  la place du mot de passe je vais ajouter mon secret


Créez un fichier pour stoker la configuration de votre container puis rendez vous dans ce dossier.

Ensuite vous devez créer un fichier docker-compose.yml et le modifier :

Puis ajouter la configuration de votre container MYSQL, WORDPRESS etc … , pour ma part ça sera MYSQL

La diffĂ©rence avec une configuration classique c’est l’ajout de secret.
Dans certaines applications comme mysql ou wordpress, il suffit de rajouter _FILE , puis le chemin de votre secret pour que ça fonctionne.
Mais toutes les applications ne fonctionnent pas de cette manière.

Par la suite il nous faut déployer le container

Pour vérifier si tout fonctionne vous pouvez utilisez la commande :

Ou se diriger sur Portainer :

Attention, votre container sera affichĂ© dans les services. Si vous avez des Failed ou des shutdown, ça peut s’expliquer par ce que mon serveur fait des sauvegardes la nuit et par consĂ©quent il l’Ă©teint puis le relance.
A partir du moment oĂą vous avez une ligne running votre service devrait fonctionner.
Si ça ne fonctionne pas vous pouvez vous rendre dans les logs pour vĂ©rifier l’erreur.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *