Dockerfile Best Practices Security
cloudDéfinition
Les Dockerfile Best Practices de sécurité sont un ensemble de bonnes pratiques de rédaction des Dockerfiles pour créer des images conteneurs sûres, minimisant la surface d'attaque et les vulnérabilités dans les images résultantes. Ces pratiques couvrent le choix des images de base, la gestion des utilisateurs, la gestion des secrets pendant le build, et la réduction de la taille et du contenu des images finales. La première pratique critique est d'utiliser des images de base officielles et minimales. Préférez les variantes slim ou alpine des images officielles (python:3.12-slim plutôt que python:3.12 complète) qui n'incluent pas les outils de build, les compilers, et les packages non nécessaires à l'exécution. Les images distroless de Google (gcr.io/distroless/python3) sont encore plus minimalistes : elles ne contiennent que l'application et ses dépendances runtime, sans shell ni gestionnaire de paquets. La gestion des utilisateurs est critique : les conteneurs ne doivent pas s'exécuter en tant que root. Créez un utilisateur non-privilegié dans le Dockerfile (RUN useradd -r -s /bin/false appuser) et basculez sur cet utilisateur avant la commande CMD/ENTRYPOINT (USER appuser). Vérifiez que les fichiers de l'application appartiennent à cet utilisateur et que les répertoires sensibles n'ont pas des permissions trop larges. La gestion des secrets dans les Dockerfiles est un risque majeur : ne jamais utiliser ARG ou ENV pour passer des secrets (ils apparaissent dans l'historique des layers Docker via docker history), ne jamais copier de fichiers de secrets (.env, credentials.json, .aws/credentials) dans l'image. Utilisez les BuildKit secrets (--mount=type=secret) pour accéder aux secrets pendant le build sans les inclure dans les layers de l'image. Le multi-stage build est une pratique fondamentale pour la sécurité : compilez l'application dans un stage "builder" incluant les outils de compilation (gcc, go, node avec devDependencies), puis copiez uniquement les artefacts binaires dans un stage final minimal. L'image finale ne contient pas les outils de build, réduisant la surface d'exploitabilité post-compromission.
Image distroless et sécurité maximale
Les images distroless de Google offrent la surface d'attaque minimale : elles ne contiennent pas de shell, pas de package manager, et uniquement les bibliothèques nécessaires à l'exécution de l'application. Dockerfile exemple pour une app Python : FROM python:3.12-slim AS builder / COPY . . / RUN pip install . / FROM gcr.io/distroless/python3 / COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages / COPY --from=builder /app /app / CMD ["python", "/app/main.py"]. Impossible d'exec bash dans ce conteneur - un attaquant ne peut pas obtenir un shell interactif.
BuildKit Secrets pour les builds nécessitant des credentials
Pour les builds nécessitant des credentials (accès à des registres privés, dépôts npm privés) : utilisez DOCKER_BUILDKIT=1 docker build --secret id=npm_token,src=$HOME/.npmrc. Dans le Dockerfile : RUN --mount=type=secret,id=npm_token npm install. Le fichier .npmrc est disponible pendant le RUN mais n'est pas inclus dans le layer Docker résultant. docker history et docker inspect ne révèlent pas le secret. Cette approche remplace la pratique dangereuse de copier des fichiers de configuration avec credentials dans l'image.
Scan de sécurité des Dockerfiles
Intégrez le scan de Dockerfiles dans la CI/CD : hadolint (linter Dockerfile avec règles de sécurité), dockle (vérification des bonnes pratiques CIS Docker Benchmark pour les images construites), et trivy (scan de vulnérabilités des images résultantes). Ces outils identifient : USER root sans changement d'utilisateur, ADD au lieu de COPY (ADD peut extraire des archives et faire des requêtes réseau), COPY de secrets, et packages avec vulnérabilités connues. La combinaison hadolint + trivy dans la CI garantit une qualité sécurité des images dès la phase de développement.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h