Introduction
Les containeurs peuvent contenir dans leur fichier de configuration des informations sensibles comme des identifiants d’accès, des jetons pour accéder à une application tierce… etc. Docker offre pourtant la possibilité d’utiliser des ‘fichiers secrets’ pour stocker ces informations. Cette fonctionnalité est rarement utilisée, pourtant elle ajoute une sécurité supplémentaire au containeur.
Nous allons nous intéressés dans cet article comment utiliser ces ‘fichiers secrets’ avec des exemples concrets.
L’accès à une base de données
Dans cette exemple, nous allons reprendre l’exemple de la pile de ‘Matomo‘ (voir l’article sur l’installation de Matomo).
Si nous reprenons le fichier de configuration nous avions :
version: "2.9"
services:
matomo:
container_name: matomo
image: matomo
restart: always
networks:
- mariadb_default
- swag_default
external_links:
- mariadb
environment:
- PUID=1003
- PGID=100
- TZ=Europe/Paris
- MYSQL_ROOT_PASSWORD=passwd
volumes:
- /volume/docker/matomo:/var/www/html
labels:
- com.centurylinklabs.watchtower.monitor-only=true
networks:
swag_default:
external: true
mariadb_default:
external: true
Le mot de passe pour accéder à la base de données MySQL figure en clair dans le fichier de configuration ce qui n’est pas idéal en terme de sécurité. Nous allons modifier le fichier de configuration pour faire appel à un fichier externe au containeur qui contiendra le mot de passe d’accès à notre base de données. Le fichier sera modifié comme ceci :
version: "3"
services:
matomo:
container_name: matomo
image: matomo:latest
external_links:
- mariadb
networks:
- mariadb_default
- swag_default
environment:
- PUID=1003
- PGID=100
- TZ=Europe/Paris
- MYSQL_PASSWORD_FILE=/run/secrets/mysql-password # A ajouter
secrets: # A ajouter
- mysql-password # A ajouter
volumes:
- /volume/docker/matomo/matomo:/var/www/html:rw
pids_limit: 100
mem_limit: 500m
cpus: 0.5
cpu_shares: 512
restart: unless-stopped
networks:
swag_default:
external: true
mariadb_default:
external: true
secrets:
mysql-password: # A ajouter
file: /chemin/secrets/secrets_mysql-password.txt # A ajouter
Nous allons créer ce fichier qui contiendra seulement une seule ligne avec le mot de connexion mysql :
cd /chemin/secrets
sudo echo "motdepasse_mysql" > ./secrets_mysql-password.txt
L’accès à un serveur avec un jeton
Dans cette exemple, nous allons reprendre l’exemple de la pile de ‘swag‘ (voir l’article sur l’installation de swag).
Si nous reprenons le fichier de configuration nous avions :
version: "2.1"
services:
swag:
image: linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1003
- PGID=100
- TZ=Europe/Paris
- URL=subdomain.duckdns.org
- SUBDOMAINS=wildcard
- VALIDATION=duckdns
- DUCKDNSTOKEN=votreToken
- EMAIL=email
- DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-dbip # optionnel
volumes:
- /volume/docker/swag:/config
labels:
- com.centurylinklabs.watchtower.monitor-only=true
ports:
- 10443:443 # nginx
- 10081:81 # dashboard
restart: unless-stopped
Le jeton d’accès à notre compte ‘duckdns‘ figure en clair dans le fichier de configuration. Nous allons de la même façon que l’exemple précédant modifier le fichier de configuration pour faire appel à un fichier externe au containeur qui contiendra le jeton d’accès à notre compte. Le fichier sera modifié comme ceci :
version: "2.1"
services:
swag:
image: linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1003
- PGID=100
- TZ=Europe/Paris
- URL=cloud29310.duckdns.org
- SUBDOMAINS=wildcard
- VALIDATION=duckdns
- DUCKDNSTOKEN_FILE=/run/secrets/duckdns_token # A ajouter
- EMAIL=yannickInformatik@gmail.com
- DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-dbip
secrets: # A ajouter
- duckdns_token # A ajouter
volumes:
- /volume/docker/config/swag:/config
ports:
- 192.168.1.8:10443:443 # nginx
- 192.168.1.8:8209:81 # dashboard
pids_limit: 500
mem_limit: 250m
cpus: 0.5
cpu_shares: 512
restart: unless-stopped
secrets:
duckdns_token: # A ajouter
file: /chemin/secrets/duckdns_token.txt # A ajouter
Ce procédé peut-être généraliser pour la plupart de vos containeurs; mais il faudra tester car certaines images docker ne prennent pas en charge les fichiers secrets !!