🔒 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.
- Il apparaît dans
- 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é
- 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.
- Dans Swarm, les secrets sont stockés chiffrés sur disque dans
- 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.
- 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.
- Quand le conteneur s’arrête, le fichier
- 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 :
docker swarm init
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 :
echo "monMotDePasse" | docker secret create mysql -
Pour vérifier que votre secret est bien ajouté vous pouvez lancer la commande :
docker secret ls
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.
sudo mkdir mysql
cd mysql
Ensuite vous devez créer un fichier docker-compose.yml et le modifier :
sudo touch docker-compose.yml
sudo nano docker-compose.yml
Puis ajouter la configuration de votre container MYSQL, WORDPRESS etc … , pour ma part ça sera MYSQL

services:
db:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql-root
secrets:
- mysql-root
ports:
- 3307:3306
volumes:
- /home/mysql:/var/lib/mysql
volumes:
mysql_data:
driver: local
secrets:
mysql-root:
external: true
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
sudo docker stack deploy -c docker-compose.yml mysql
Pour vérifier si tout fonctionne vous pouvez utilisez la commande :
docker ps
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