Aller au contenu principal
Retour au blog
DevSecOps CI/CD Sécurité

Comment construire un pipeline DevSecOps moderne

· 6 min de lecture

Introduction

La sécurité ne peut plus être une réflexion tardive dans le cycle de développement. Selon le rapport IBM 2024, le coût moyen d’une violation de données atteint 4,88 millions de dollars, et les vulnérabilités détectées tardivement coûtent 6 à 10 fois plus cher à corriger qu’en phase de développement.

Chez Nommade, nous intégrons la sécurité dès la première ligne de code grâce à une approche DevSecOps complète. Dans cet article, nous partageons notre méthodologie éprouvée pour construire un pipeline CI/CD qui intègre la sécurité à chaque étape, sans sacrifier la vélocité de livraison.


Architecture d’un pipeline DevSecOps

Avant de plonger dans les détails, voici la vue d’ensemble du pipeline que nous mettons en place pour nos clients :

┌─────────┐    ┌─────────┐    ┌─────────┐    ┌──────────┐    ┌─────────┐    ┌─────────┐
│  CODE   │───▶│  BUILD  │───▶│  TEST   │───▶│ SECURITY │───▶│ DEPLOY  │───▶│ MONITOR │
│         │    │         │    │         │    │          │    │         │    │         │
│ • SAST  │    │ • SCA   │    │ • Unit  │    │ • DAST   │    │ • K8s   │    │ • Prom  │
│ • Lint  │    │ • Image │    │ • Integ │    │ • Pentest│    │ • Helm  │    │ • Alert │
│ • Secret│    │ • SBOM  │    │ • E2E   │    │ • Scan   │    │ • GitOps│    │ • SIEM  │
└─────────┘    └─────────┘    └─────────┘    └──────────┘    └─────────┘    └─────────┘

Chaque étape agit comme un garde-fou : si une vérification échoue, le pipeline s’arrête et l’équipe est notifiée immédiatement. C’est le principe du “shift-left” — déplacer la détection des problèmes le plus tôt possible dans le cycle.


Les 6 piliers du pipeline

1. Analyse statique du code (SAST)

L’analyse statique permet de détecter les vulnérabilités directement dans le code source, avant même l’exécution. C’est la première ligne de défense.

Ce que nous détectons :

  • Injections SQL, XSS, CSRF
  • Secrets hardcodés (clés API, mots de passe)
  • Mauvaises pratiques cryptographiques
  • Violations des règles OWASP Top 10
# .gitlab-ci.yml — Stage SAST
sast:
  stage: test
  image: sonarsource/sonar-scanner-cli
  script:
    - sonar-scanner
      -Dsonar.projectKey=$CI_PROJECT_NAME
      -Dsonar.sources=./src
      -Dsonar.qualitygate.wait=true
  allow_failure: false
  rules:
    - if: $CI_MERGE_REQUEST_ID

En complément, nous intégrons un scan de secrets pour éviter les fuites accidentelles :

secret-detection:
  stage: test
  image: trufflesecurity/trufflehog:latest
  script:
    - trufflehog git file://. --since-commit HEAD~1 --fail

Outils recommandés selon le contexte :

OutilForcesIdéal pour
SonarQubeMulti-langages, quality gatesÉquipes enterprise
SemgrepRègles custom, très rapideStartups / CI rapide
CodeQLAnalyse sémantique profondeProjets open-source
TruffleHogDétection de secretsTout projet

2. Scan des dépendances (SCA)

Les dépendances tierces représentent souvent le vecteur d’attaque le plus sous-estimé. L’incident Log4Shell (2021) a rappelé l’importance cruciale de la surveillance des dépendances.

Notre approche combine plusieurs niveaux de vérification :

dependency-check:
  stage: test
  script:
    # Audit des packages npm
    - npm audit --audit-level=high
    # Scan multi-format avec Trivy
    - trivy fs --severity HIGH,CRITICAL --exit-code 1 .
    # Génération du SBOM (Software Bill of Materials)
    - syft . -o cyclonedx-json > sbom.json
  artifacts:
    reports:
      dependency_scanning: gl-dependency-scanning-report.json
    paths:
      - sbom.json

Le SBOM (Software Bill of Materials) est devenu un standard exigé par de nombreuses réglementations. Il documente l’ensemble des composants logiciels utilisés et facilite la traçabilité en cas d’incident.

3. Scan des images conteneurs

Avant de déployer une image Docker, il est essentiel de scanner ses couches pour détecter les vulnérabilités connues (CVE). Une image basée sur un OS non patché peut exposer l’ensemble de votre infrastructure.

container-scan:
  stage: security
  image: aquasec/trivy
  script:
    # Scan de l'image avec seuil de blocage
    - trivy image
      --exit-code 1
      --severity HIGH,CRITICAL
      --ignore-unfixed
      $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

Bonnes pratiques pour les images Docker :

  • Utiliser des images de base minimales (Alpine, Distroless)
  • Appliquer le principe du moindre privilège (USER non-root)
  • Figer les versions des images de base
  • Mettre à jour régulièrement les images de base

4. Tests dynamiques (DAST)

Les tests dynamiques simulent des attaques réelles sur l’application déployée en environnement de staging. Contrairement au SAST qui analyse le code source, le DAST teste l’application en cours d’exécution.

dast:
  stage: security
  image: ghcr.io/zaproxy/zaproxy:stable
  script:
    - zap-baseline.py
      -t $STAGING_URL
      -r zap-report.html
      -l WARN
      -I  # Ne pas échouer sur les warnings
  artifacts:
    paths:
      - zap-report.html
  needs:
    - deploy-staging

Le DAST détecte des vulnérabilités que le SAST ne peut pas voir : erreurs de configuration serveur, headers de sécurité manquants, problèmes CORS, etc.

5. Infrastructure as Code Security

Terraform, Ansible et les autres outils IaC doivent également être audités. Un bucket S3 public ou un security group trop permissif peut compromettre toute l’infrastructure.

iac-scan:
  stage: security
  script:
    # Scan Terraform
    - checkov -d ./terraform --framework terraform --compact
    # Vérification des bonnes pratiques
    - tfsec ./terraform --minimum-severity HIGH
    # Validation Ansible
    - ansible-lint playbooks/

Règles critiques à vérifier :

  • Pas de credentials en clair dans les fichiers IaC
  • Chiffrement activé sur tous les volumes et bases de données
  • Accès réseau restreint (pas de 0.0.0.0/0 sur les ports sensibles)
  • Logging et monitoring activés sur tous les services

6. Monitoring et réponse aux incidents

Le pipeline ne s’arrête pas au déploiement. La supervision continue est essentielle pour détecter les comportements anormaux en production.

# Prometheus alerting rules
groups:
  - name: security-alerts
    rules:
      - alert: HighErrorRate
        expr: rate(http_requests_total{status=~"5.."}[5m]) > 0.1
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Taux d'erreur élevé détecté"

      - alert: UnusualTrafficSpike
        expr: rate(http_requests_total[5m]) > 10 * avg_over_time(rate(http_requests_total[5m])[1h:5m])
        for: 2m
        labels:
          severity: warning

Métriques de succès

Voici les indicateurs que nous suivons pour mesurer l’efficacité d’un pipeline DevSecOps :

MétriqueAvantAprèsAmélioration
Temps de détection des vulnérabilitésSemainesMinutes~99%
Coût moyen de correctionÉlevé (post-prod)Faible (pré-merge)-85%
Couverture de sécuritéManuelle, partielleAutomatisée, 100%+100%
Temps de déploiementHeuresMinutes-70%
Faux positifsÉlevéCalibré-60%

Conclusion

L’intégration de la sécurité dans le pipeline CI/CD n’est pas un frein à la vélocité — c’est un investissement qui réduit considérablement le coût de correction des vulnérabilités et protège la réputation de votre entreprise.

Les points clés à retenir :

  1. Shift-left : détecter les problèmes le plus tôt possible
  2. Automatiser : éliminer les vérifications manuelles sujettes aux erreurs
  3. Bloquer : un pipeline qui ne bloque pas les vulnérabilités critiques est inutile
  4. Mesurer : suivre les métriques pour améliorer continuellement
  5. Former : sensibiliser les développeurs aux bonnes pratiques de sécurité

Chez Nommade, nous accompagnons nos clients dans cette transformation depuis plus de 5 ans. Que vous démarriez votre démarche DevSecOps ou que vous souhaitiez renforcer un pipeline existant, nous pouvons vous aider.

Contactez-nous pour discuter de votre projet →