DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesSécuriser ses pipelines et applications (DevSecOps)02 - Gérer les secrets sans les exposer

Détails

  • 20 minutes
  • Débutant

Objectifs

  • Détecter des secrets commités avec gitleaks
  • Passer des secrets via variables d'environnement Docker
  • Comprendre Docker secrets et Kubernetes secrets
Module Sécuriser ses pipelines et applications (DevSecOps)

Exercice 02 : Gérer les secrets sans les exposer

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Identifier les risques des secrets hardcodés dans le code
  • ✅ Détecter des secrets dans un dépôt avec gitleaks
  • ✅ Passer des secrets via -e et --env-file dans Docker
  • ✅ Utiliser Docker Secrets pour les stacks Swarm
  • ✅ Comprendre le concept de vault de secrets (HashiCorp Vault)

Durée estimée : 20 minutes

Difficulté : ⭐☆☆☆☆ (Débutant)

Prérequis : Docker installé, notions de Git


📖 Contexte

En 2023, plus de 10 millions de secrets ont été détectés sur GitHub par GitGuardian. Un secret commité dans Git est compromis définitivement - même si supprimé, il reste dans l'historique. La règle est simple : les secrets ne doivent jamais toucher le code source ni les images Docker.


📋 Énoncé

Reproduisez les erreurs courantes de gestion de secrets, détectez-les avec gitleaks, puis appliquez les bonnes pratiques.


🧭 Déroulement de l'exercice

Tâche 1 : Identifier les secrets hardcodés

Créez un fichier app.py simulant le problème classique :

python
# MAUVAISE PRATIQUE - NE JAMAIS FAIRE
DATABASE_URL = "postgresql://admin:motdepasse123@db.prod.example.com/myapp"
API_KEY = "sk-proj-abc123xyz789secretkey"
AWS_SECRET_KEY = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"

def connect():
    return DATABASE_URL

Indice : Ce code contient 3 types de secrets : credentials de base de données, clé d'API, et clé AWS. Si ce fichier est commité et le dépôt rendu public (même 5 minutes), les secrets sont compromis et doivent être immédiatement révoqués.

Vérification : Listez mentalement les 3 secrets et les conséquences d'une fuite pour chacun.


Tâche 2 : Détecter les secrets avec gitleaks

Initialisez un dépôt Git, committez le fichier, puis scannez avec gitleaks.

Indice :

`bash

# Installer gitleaks

docker run --rm -v $(pwd):/repo zricethezav/gitleaks:latest detect \

--source="/repo" --no-git

>

# Ou avec installation locale

# brew install gitleaks (macOS)

# https://github.com/gitleaks/gitleaks/releases (Linux)

>

# Scanner un dépôt Git (tout l'historique)

gitleaks detect --source . --verbose

>

# Scanner seulement les fichiers non commités

gitleaks protect --staged

`

Vérification : Gitleaks détecte les 3 secrets dans app.py et affiche les lignes concernées avec le type de secret.


Tâche 3 : Variables d'environnement Docker

Réécrivez app.py pour lire les secrets depuis l'environnement, puis lancez le conteneur correctement :

python
# BONNE PRATIQUE
import os

DATABASE_URL = os.environ.get("DATABASE_URL")
API_KEY = os.environ.get("API_KEY")

if not DATABASE_URL:
    raise ValueError("DATABASE_URL non définie")

Lancez avec -e ou --env-file :

Indice :

`bash

# Option 1 : passer directement (visible dans ps)

docker run -e DATABASE_URL="postgresql://..." mon-app

>

# Option 2 : fichier .env (à ajouter dans .gitignore !)

# Créez .env :

# DATABASE_URL=postgresql://admin:secret@localhost/myapp

# API_KEY=sk-proj-abc123

docker run --env-file .env mon-app

`

Vérification : .env est dans .gitignore. gitleaks detect ne trouve plus de secrets dans le code Python.


Tâche 4 : Docker Secrets (Swarm)

Créez un secret Docker et montez-le dans un service :

Indice :

`bash

# Créer un secret

echo "motdepasse_super_secret" | docker secret create db_password -

>

# Utiliser dans un service Docker Swarm

docker service create \

--name mon-app \

--secret db_password \

mon-image

>

# Dans le conteneur, le secret est disponible dans

# /run/secrets/db_password (fichier en RAM, non loggué)

`

>

Dans le code :

`python

with open("/run/secrets/db_password") as f:

password = f.read().strip()

`

Vérification : docker secret ls liste le secret créé. Le secret n'apparaît jamais dans les variables d'environnement (docker inspect).


Tâche 5 : Comprendre les Kubernetes Secrets

Créez un Kubernetes Secret et injectez-le dans un Pod :

Indice :

`yaml

# secret.yaml

apiVersion: v1

kind: Secret

metadata:

name: db-credentials

type: Opaque

stringData:

DB_PASSWORD: "motdepasse_secret"

DB_USER: "admin"

`

>

`yaml

# pod.yaml

env:

- name: DB_PASSWORD

valueFrom:

secretKeyRef:

name: db-credentials

key: DB_PASSWORD

`

>

Attention : les Kubernetes Secrets sont encodés en base64, pas chiffrés. Utilisez Sealed Secrets ou Vault pour chiffrer au repos.

Vérification : kubectl create -f secret.yaml crée le secret. kubectl get secret db-credentials -o yaml montre les valeurs en base64.


🗂️ Mini-Projet

Configurez un hook Git pre-commit qui bloque tout commit contenant des secrets :

bash
# Installer pre-commit
pip install pre-commit

# .pre-commit-config.yaml
repos:
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.18.0
    hooks:
      - id: gitleaks
bash
pre-commit install
pre-commit run --all-files

Checkpoints :

  • gitleaks détecte les secrets dans app.py
  • Le code Python lit les secrets depuis os.environ
  • .env est dans .gitignore et non commité
  • Le hook pre-commit bloque un commit avec un secret
  • Vous connaissez la différence entre Docker Secrets et K8s Secrets

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Identifier les secrets hardcodés
  • Tâche 2 : Détecter les secrets avec gitleaks
  • Tâche 3 : Variables d'environnement Docker
  • Tâche 4 : Docker Secrets (Swarm)
  • Tâche 5 : Comprendre les Kubernetes Secrets
  • 🗂️ Mini-Projet