Featured image of post Les fichiers secrets avec Docker

Les fichiers secrets avec Docker

Les fichiers secrets avec Docker

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 :

Remarque : On rajoute une section ‘secrets’ locale et globale qui relie le secret vers un emplacement de fichier à l’extérieur de notre containeur.

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 :

sudo mkdir /chemin/secrets
cd /chemin/secrets
sudo echo "motdepasse_mysql" > ./secrets_mysql-password.txt

Fichier secret contennant le mot de passe MySQL

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 !!

Généré avec Hugo
Thème Stack conçu par Jimmy