Aller au contenu
Culture DevOps high
🚧 Section en cours de réécriture — Le contenu est en cours de restructuration et peut évoluer.

Bonnes pratiques DevSecOps

21 min de lecture

Adopter des outils sans méthode peut compromettre la sécurité, la fiabilité et la maintenabilité des systèmes. Installer Kubernetes ne rend pas votre application plus sûre. Mettre en place un pipeline CI/CD ne garantit pas des déploiements fiables. C’est la manière dont vous utilisez ces outils qui fait la différence.

Cette page rassemble les bonnes pratiques éprouvées pour construire des plateformes performantes et durables. Chaque recommandation est actionnable et issue de retours terrain. L’objectif n’est pas de tout appliquer immédiatement, mais de comprendre les principes pour les adapter à votre contexte.

Avant d’appliquer ces bonnes pratiques, maîtrisez les fondamentaux :

Les bonnes pratiques DevSecOps s’organisent autour de quatre piliers complémentaires. Chacun répond à une question fondamentale que tout système en production doit se poser. Négliger l’un de ces piliers crée tôt ou tard des problèmes : une application peut être sécurisée mais impossible à déboguer, ou fiable mais impossible à maintenir.

Les 4 piliers DevSecOps : Sécurité, Fiabilité, Exploitabilité, Maintenabilité

PilierObjectifQuestion clé
SécuritéProtéger les données et systèmesComment détecter une vulnérabilité avant la production ?
FiabilitéGarantir disponibilité et performanceComment résister à une panne sans impact utilisateur ?
ExploitabilitéSurveiller, diagnostiquer, réagirComment identifier la cause d’un incident en 5 minutes ?
MaintenabilitéFaire évoluer et corriger facilementComment modifier ce système dans 6 mois ?

Pourquoi formaliser des bonnes pratiques ? Parce que sans cadre commun, chaque équipe invente ses propres solutions, souvent dans l’urgence. Les erreurs se répètent, la dette technique s’accumule, et les incidents deviennent la norme plutôt que l’exception.

La sécurité coûte moins cher quand elle est intégrée tôt. Une vulnérabilité détectée au moment du commit se corrige en quelques minutes. La même vulnérabilité découverte en production peut nécessiter des jours de travail, sans compter les impacts potentiels.

Le principe du shift-left consiste à déplacer les contrôles de sécurité le plus tôt possible dans le cycle de développement. Concrètement, cela signifie scanner les dépendances avant de merger une pull request, vérifier les secrets avant le commit, et bloquer les images vulnérables avant qu’elles n’atteignent la production.

PratiqueAction concrète
Shift-left securityScanner les dépendances dans la CI (Trivy, Snyk, Grype)
Secrets managementJamais de secrets en clair ; utiliser Vault, SOPS, ou Sealed Secrets
Moindre privilègeComptes de service avec permissions minimales, révision trimestrielle
Scan d’imagesBloquer les images avec CVE critiques non corrigées
SAST/DASTAnalyse statique et dynamique intégrée au pipeline
Revue de code sécuritéChecklist sécurité dans les pull requests

La sécurité de la chaîne d’approvisionnement logicielle est devenue critique après les attaques SolarWinds et Log4Shell. Ces incidents ont révélé une vérité inconfortable : vous pouvez avoir le code le plus sécurisé du monde, si une de vos dépendances est compromise, votre application l’est aussi.

Deux standards complémentaires émergent pour sécuriser la supply chain. Le SBOM répond à la question « de quoi est composé mon logiciel ? ». SLSA répond à « puis-je faire confiance à la manière dont il a été construit ? ».

Sécurité de la Supply Chain : Source, Build, Distribution avec SBOM et SLSA

Le Software Bill of Materials (SBOM) est un inventaire complet des composants d’un logiciel :

  • Quoi : Liste de toutes les dépendances (directes et transitives)
  • Pourquoi : Traçabilité des CVE, conformité licences, audit sécurité
  • Formats : SPDX (Linux Foundation), CycloneDX (OWASP)
  • Outils : Syft, Trivy, Grype pour générer et scanner
Fenêtre de terminal
# Générer un SBOM avec Syft
syft packages alpine:latest -o spdx-json > sbom.spdx.json
# Scanner le SBOM avec Grype
grype sbom:sbom.spdx.json

La question n’est pas si une panne arrivera, mais quand. Un serveur tombera, un disque se corrompra, un datacenter subira une coupure. Les systèmes fiables ne sont pas ceux qui ne tombent jamais, mais ceux qui résistent aux pannes et se rétablissent rapidement.

La fiabilité repose sur deux principes fondamentaux : l’immutabilité et la redondance. L’immutabilité signifie qu’on ne modifie jamais un système en production — on le remplace par une nouvelle version. La redondance garantit qu’une panne d’un composant n’impacte pas le service global.

PratiqueAction concrète
Infrastructure as Code100 % de l’infra versionnée (Terraform, Pulumi, Ansible)
ImmutabilitéPas de modification manuelle en production ; redéployer
RedondanceMulti-AZ ou multi-région pour les services critiques
Circuit breakersIsoler les défaillances pour éviter les cascades
Chaos engineeringTests de résilience réguliers (Chaos Monkey, Litmus)
Capacity planningProjections de charge et tests de performance

Error Budgets : équilibrer vélocité et stabilité

Section intitulée « Error Budgets : équilibrer vélocité et stabilité »

L’Error Budget est un concept SRE qui transforme la fiabilité en décision business. Au lieu de viser 100% de disponibilité (impossible et coûteux), on définit un budget d’erreur acceptable.

L’idée est simple : si votre SLO est de 99.9% de disponibilité, vous « autorisez » 0.1% d’indisponibilité. Ce budget peut être « dépensé » pour livrer des features (qui comportent toujours un risque) ou « économisé » pour absorber les incidents imprévus. Quand le budget est épuisé, l’équipe se concentre exclusivement sur la stabilité.

Pyramide SRE : SLI, SLO, Error Budget et politique associée

  1. Définir les SLI (Service Level Indicators)

    Métriques mesurables : latence p99, taux d’erreur, throughput.

    # Exemple SLI
    sli:
    latency_p99: "temps de réponse 99e percentile < 200ms"
    error_rate: "taux d'erreurs HTTP 5xx"
    availability: "succès des health checks"
  2. Fixer les SLO (Service Level Objectives)

    Objectifs internes basés sur les SLI.

    # Exemple SLO
    slo:
    availability: 99.9% # 8h45 de downtime autorisé par an
    latency_p99: 200ms
    error_rate: < 0.1%
  3. Calculer l’Error Budget

    Error Budget = 100% - SLO
    Avec SLO = 99.9% → Error Budget = 0.1%
    Sur 30 jours = 43 minutes de downtime autorisées
  4. Appliquer la politique Error Budget

    Budget restantAction
    > 50%Nouvelles features, expérimentations
    20-50%Features + travail sur la fiabilité
    < 20%Stop features, focus stabilité
    ÉpuiséGel complet, incident review

Vous ne pouvez pas réparer ce que vous ne voyez pas. L’observabilité consiste à instrumenter vos systèmes pour comprendre leur comportement en production. Sans elle, chaque incident devient une enquête à l’aveugle.

L’observabilité moderne repose sur trois piliers complémentaires : les métriques (que se passe-t-il en ce moment ?), les logs (qu’est-ce qui s’est passé ?), et les traces (comment les requêtes traversent-elles le système ?). La corrélation entre ces trois sources permet de diagnostiquer rapidement les problèmes les plus complexes.

PratiqueAction concrète
Observabilité 3 piliersMétriques + Logs + Traces corrélés
Dashboards actionnablesIndicateurs clés visibles, pas de « vanity metrics »
Alertes pertinentesSeuils basés sur SLO, pas sur des valeurs arbitraires
RunbooksProcédures documentées pour chaque alerte critique
Post-mortemsAnalyse blameless après chaque incident majeur
On-call rotationÉquipes formées et outillées pour l’astreinte

OpenTelemetry (OTel) est devenu le standard de facto pour l’instrumentation. Il offre une approche vendor-neutral pour collecter métriques, logs et traces.

L’avantage principal d’OpenTelemetry est sa portabilité : vous instrumentez une fois votre code, et vous pouvez envoyer les données vers n’importe quel backend (Jaeger, Zipkin, Datadog, New Relic…). Le Collector agit comme un point central qui reçoit, transforme et route les données vers les destinations appropriées.

┌─────────────────────────────────────────────────────────────┐
│ Applications │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Service A│ │ Service B│ │ Service C│ │ Service D│ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │ │
│ └─────────────┴─────────────┴─────────────┘ │
│ │ │
│ OTel SDK │
│ (auto-instrumentation) │
└─────────────────────────┬───────────────────────────────────┘
│ OTLP
┌───────────────────────┐
│ OTel Collector │
│ ┌─────────────────┐ │
│ │ Receivers │ │
│ │ Processors │ │
│ │ Exporters │ │
│ └─────────────────┘ │
└───────────┬───────────┘
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Jaeger │ │Prometheus│ │ Loki │
│ Traces │ │ Metrics │ │ Logs │
└─────────┘ └─────────┘ └─────────┘

Un système sera modifié bien plus souvent qu’il ne sera écrit. La maintenabilité consiste à faciliter ces modifications futures : documentation à jour, tests qui permettent de refactorer sereinement, sauvegardes qui fonctionnent vraiment.

La maintenabilité se joue souvent dans les détails : un README clair qui explique comment lancer le projet, des ADR (Architecture Decision Records) qui documentent les choix techniques, des tests qui servent de spécification vivante. C’est ce qui fait la différence entre un projet qu’on peut faire évoluer sereinement et un projet qu’on a peur de toucher.

PratiqueAction concrète
Documentation à jourREADME, ADR, diagrammes
Sauvegardes testéesRestauration validée mensuellement
Plan de reprise (PRA/PCA)Testé annuellement avec les équipes
Versioning sémantiqueContrats d’API clairs, breaking changes documentés
Refactoring continuBudget temps dédié à la réduction de dette
Tests automatisésCouverture suffisante pour refactorer sereinement

Les Golden Paths sont des chemins balisés qui permettent aux développeurs de livrer rapidement tout en respectant les bonnes pratiques de l’organisation. C’est le concept central du Platform Engineering.

L’idée est de réduire la charge cognitive des développeurs : au lieu de devoir choisir parmi des dizaines d’options pour chaque aspect technique (framework, CI/CD, monitoring…), ils suivent un chemin pré-validé. Ce n’est pas une contrainte rigide — c’est un raccourci vers les bonnes pratiques. Les équipes expérimentées peuvent toujours dévier si nécessaire.

Golden Paths : comparaison avant/après avec composants clés

  1. Template de projet

    Structure de repo, Dockerfile, CI/CD, configs de base pré-configurés.

    Fenêtre de terminal
    # Exemple avec Backstage
    backstage-cli create --template=microservice-template
    # Génère automatiquement :
    # ├── src/
    # ├── Dockerfile
    # ├── .gitlab-ci.yml
    # ├── kubernetes/
    # │ ├── deployment.yaml
    # │ └── service.yaml
    # ├── docs/
    # │ └── ADR/
    # └── README.md
  2. Self-service portal

    Interface pour créer des ressources sans tickets.

    OutilTypePoints forts
    BackstageIDP open-sourceTemplates, catalog, plugins
    PortSaaSRapide à déployer, scorecards
    HumanitecSaaSFocus déploiement
  3. Documentation intégrée

    Guides dans le flux de travail, pas sur un wiki séparé. Voir Docs-as-Code.

  4. Guardrails automatiques

    Policies qui préviennent les erreurs sans bloquer.

    # Kyverno policy exemple
    apiVersion: kyverno.io/v1
    kind: ClusterPolicy
    metadata:
    name: require-labels
    spec:
    validationFailureAction: Enforce
    rules:
    - name: check-team-label
    match:
    resources:
    kinds:
    - Deployment
    validate:
    message: "Le label 'team' est obligatoire"
    pattern:
    metadata:
    labels:
    team: "?*"

Contexte : Un développeur commit accidentellement une clé API dans le code source.

La clé reste dans l’historique Git. Elle est découverte 6 mois plus tard par un audit externe. Coût : rotation de tous les accès, analyse forensique, communication de crise.

Scénario 2 : Incident production un vendredi soir

Section intitulée « Scénario 2 : Incident production un vendredi soir »

Contexte : L’application principale renvoie des erreurs 500. L’ingénieur d’astreinte est alerté.

4 heures de diagnostic dans les logs non structurés. Pas de runbook. Rollback manuel hasardeux. Weekend ruiné.

PiègePourquoi c’est un problèmeCorrection
Sécurité en fin de cycleCorrectifs coûteux, retards de livraisonShift-left : scanner dès le commit
Trop d’alertesAlert fatigue, alertes ignoréesSeuils basés sur SLO, suppression du bruit
Backups non testésRestauration impossible le jour JTest de restauration mensuel
Documentation obsolèteConfiance perdue, erreurs de procédureDocs dans le repo, revue à chaque PR
Environnements manuelsDivergences, « works on my machine »Tout en IaC, environnements éphémères
Moindre privilège ignoréSurface d’attaque étendueAudit trimestriel des permissions
Post-mortems punitifsDissimulation des erreursCulture blameless, focus sur le système
Dette technique accumuléeVélocité en chute libreBudget dédié (20 % du sprint)

Comment savoir si vos pratiques sont matures ? Ces critères vous donnent une grille d’évaluation objective :

  • Aucun secret en clair dans les repos ou les pipelines
  • Les images Docker sont scannées et les CVE critiques bloquent le déploiement
  • SBOM généré automatiquement pour chaque release
  • 100 % de l’infrastructure est versionnée et reproductible
  • Les SLO sont définis et l’Error Budget est suivi
  • Les alertes déclenchent des actions documentées (runbooks)
  • Les restaurations de backup sont testées au moins une fois par trimestre
  • Un post-mortem blameless est rédigé après chaque incident majeur
  • Les équipes peuvent déployer de manière autonome sans intervention manuelle
  • Les métriques DORA (MTTD, MTTR, Deployment Frequency, Change Failure Rate) sont mesurées
  • La sécurité s’intègre dès le premier commit avec SBOM et SLSA
  • La fiabilité se pilote avec des SLO et Error Budgets
  • L’exploitabilité repose sur OpenTelemetry et des runbooks actionnables
  • La maintenabilité nécessite documentation, tests et sauvegardes validées
  • Les Golden Paths standardisent sans contraindre
  • Ces pratiques se renforcent mutuellement : commencez par celles qui traitent vos incidents récurrents