Sécuriser ses pipelines et applications (DevSecOps)
🎯 Objectifs
- Intégrer la sécurité dans le cycle de développement
- Gérer les secrets de manière sécurisée
- Scanner les images Docker et les dépendances
- Sécuriser les pipelines CI/CD
- Connaître les principes de la supply chain security
📖 Prérequis
- CI/CD niveau introduction
- Docker niveau intermédiaire
- Notions de Git et GitHub
🤔 Pourquoi DevSecOps ?
Shift Left Security
Intégrer la sécurité le plus tôt possible dans le cycle de développement.
| Phase de détection | Coût de correction |
|---|---|
| Design | 1x |
| Développement | 6x |
| Tests | 15x |
| Production | 100x |
💡 La sécurité n'est pas la responsabilité d'une seule équipe - c'est l'affaire de tous.
🔐 Gestion des Secrets
Règle n°1
⚠️ Ne jamais stocker de secrets dans le code source ou les images Docker.
Où stocker les secrets ?
| Solution | Usage | Complexité |
|---|---|---|
| Variables d'environnement | Développement local | Faible |
| GitHub Secrets | CI/CD GitHub Actions | Faible |
| HashiCorp Vault | Production, équipes | Élevée |
| .env (gitignored) | Développement local | Faible |
Détecter les secrets leakés
# Installation de gitleaks
brew install gitleaks # ou via binaire GitHub
# Scanner un dépôt
gitleaks detect --source=. --verbose
# Scanner avant chaque commit (pre-commit hook)
gitleaks protect --staged⚠️ Si un secret a été commité, changez-le immédiatement. L'historique Git conserve tout.
🐳 Sécurité des Images Docker
Bonnes pratiques
- ✅ Utilisez des images officielles et vérifiées
- ✅ Spécifiez un tag précis (pas
:latest) - ✅ Utilisez des images minimales (alpine, distroless)
- ✅ Exécutez en non-root
- ✅ Utilisez le multi-stage build
Dockerfile sécurisé
FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build
FROM node:20-alpine
RUN addgroup -S app && adduser -S app -G app
USER app
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
CMD ["node", "dist/index.js"]Scanner les vulnérabilités
# Avec Trivy (recommandé)
trivy image mon-app:latest
# Avec Docker Scout
docker scout cves mon-app:latest| Outil | Type | Gratuit |
|---|---|---|
| Trivy | Scanner complet | ✅ |
| Docker Scout | Intégré Docker Desktop | ✅ (limité) |
| Snyk Container | Scanner + fix | ✅ (limité) |
🔍 Analyse de Code
Types d'analyse
| Type | Cible | Quand |
|---|---|---|
| SAST | Code source | Avant le build |
| DAST | Application en cours d'exécution | Après le déploiement |
| SCA | Dépendances (npm, pip…) | En continu |
Outils recommandés
| Outil | Type | Usage |
|---|---|---|
| SonarQube | SAST | Qualité et sécurité du code |
| OWASP ZAP | DAST | Tests d'intrusion automatisés |
| Snyk | SCA | Vulnérabilités des dépendances |
| Dependabot | SCA | Mises à jour automatiques (GitHub) |
GitHub Dependabot
# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10💡 Activez Dependabot sur tous vos dépôts GitHub - c'est gratuit et automatique.
🏗️ Sécurité des Pipelines CI/CD
Règles essentielles
- ✅ Pinnez les versions des actions (SHA, pas
@main) - ✅ Privilèges minimaux pour les tokens CI
- ✅ Audit trail : loggez tous les déploiements
- ✅ Branch protection : reviews obligatoires, tests requis
- ✅ Commits signés (GPG)
Exemple : action pinnée
# ❌ Dangereux - l'action peut changer
- uses: actions/checkout@main
# ✅ Sécurisé - version pinnée
- uses: actions/checkout@v4
# ✅✅ Encore mieux - SHA pinnée
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11Permissions minimales
permissions:
contents: read
packages: write⚠️ Ne donnez jamais
permissions: write-allà un workflow.
📦 Supply Chain Security
SBOM (Software Bill of Materials)
Liste complète de tous les composants de votre application.
# Générer un SBOM avec Trivy
trivy sbom --format cyclonedx mon-app:latestSignature de conteneurs
# Signer une image avec cosign
cosign sign mon-registry/mon-app:latest
# Vérifier la signature
cosign verify mon-registry/mon-app:latestAttestation de provenance
Prouve qui a construit l'image et comment. GitHub Actions génère automatiquement des attestations SLSA.
🌐 Réseau et Infrastructure
- ✅ Principe du moindre privilège : accès minimum nécessaire
- ✅ TLS partout : chiffrez toutes les communications
- ✅ Network Policies (Kubernetes) : isolez les pods
- ✅ Firewall : n'exposez que les ports nécessaires
# Kubernetes NetworkPolicy - isoler un namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress🛡️ OWASP Top 10 (2021)
| # | Vulnérabilité | Description |
|---|---|---|
| 1 | Broken Access Control | Accès non autorisé à des ressources |
| 2 | Cryptographic Failures | Données sensibles mal protégées |
| 3 | Injection | SQL, NoSQL, OS command injection |
| 4 | Insecure Design | Failles architecturales |
| 5 | Security Misconfiguration | Configurations par défaut dangereuses |
| 6 | Vulnerable Components | Dépendances avec des failles connues |
| 7 | Auth Failures | Authentification/session mal implémentée |
| 8 | Data Integrity Failures | Mises à jour non vérifiées |
| 9 | Logging Failures | Monitoring insuffisant |
| 10 | SSRF | Requêtes forgées côté serveur |
💡 Consultez owasp.org/Top10 pour les détails.
✅ Checklist Sécurité DevOps
- ✅ Secrets dans un vault, jamais dans le code
- ✅ Images scannées et minimales
- ✅ Dépendances mises à jour et auditées
- ✅ Actions CI/CD pinnées (version ou SHA)
- ✅ Branch protection activée
- ✅ TLS sur tous les endpoints
- ✅ Audits de sécurité réguliers
- ✅ SBOM généré pour chaque release
- ✅ Logs centralisés et monitoring actif
- ✅ OWASP Top 10 connu de l'équipe
🔑 Points Clés
| Concept | À retenir |
|---|---|
| Shift Left | Sécurité dès le début du cycle |
| Secrets | Vault ou variables d'environnement, jamais dans le code |
| Images | Minimales, scannées, non-root |
| SAST/DAST/SCA | Analyse statique, dynamique et des dépendances |
| Supply Chain | SBOM, signatures, attestations |
| OWASP Top 10 | Les 10 vulnérabilités web les plus critiques |
📚 Ressources
🚀 Prochaines étapes
Félicitations ! Vous avez terminé le parcours DevOps complet. Pour aller plus loin :
- Voir tous les modules - Revenez sur les modules qui vous intéressent
- Parcours de formation - Retrouvez votre progression dans le parcours complet