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.
Prérequis
Section intitulée « Prérequis »Avant d’appliquer ces bonnes pratiques, maîtrisez les fondamentaux :
Vue d’ensemble : les 4 piliers
Section intitulée « Vue d’ensemble : les 4 piliers »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.
| Pilier | Objectif | Question clé |
|---|---|---|
| Sécurité | Protéger les données et systèmes | Comment détecter une vulnérabilité avant la production ? |
| Fiabilité | Garantir disponibilité et performance | Comment résister à une panne sans impact utilisateur ? |
| Exploitabilité | Surveiller, diagnostiquer, réagir | Comment identifier la cause d’un incident en 5 minutes ? |
| Maintenabilité | Faire évoluer et corriger facilement | Comment modifier ce système dans 6 mois ? |
Le problème terrain
Section intitulée « Le problème terrain »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.
Pilier 1 : Sécurité
Section intitulée « Pilier 1 : Sécurité »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.
Pratiques essentielles
Section intitulée « Pratiques essentielles »| Pratique | Action concrète |
|---|---|
| Shift-left security | Scanner les dépendances dans la CI (Trivy, Snyk, Grype) |
| Secrets management | Jamais de secrets en clair ; utiliser Vault, SOPS, ou Sealed Secrets |
| Moindre privilège | Comptes de service avec permissions minimales, révision trimestrielle |
| Scan d’images | Bloquer les images avec CVE critiques non corrigées |
| SAST/DAST | Analyse statique et dynamique intégrée au pipeline |
| Revue de code sécurité | Checklist sécurité dans les pull requests |
Supply Chain Security : SBOM et SLSA
Section intitulée « Supply Chain Security : SBOM et SLSA »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 ? ».
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
# Générer un SBOM avec Syftsyft packages alpine:latest -o spdx-json > sbom.spdx.json
# Scanner le SBOM avec Grypegrype sbom:sbom.spdx.jsonSLSA (Supply-chain Levels for Software Artifacts) définit 4 niveaux de maturité :
| Niveau | Exigences | Protège contre |
|---|---|---|
| Level 1 | Documentation du processus de build | Erreurs humaines |
| Level 2 | Build sur service hébergé + logs | Modifications non autorisées |
| Level 3 | Build isolé + provenance vérifiable | Compromission du builder |
| Level 4 | Review 2 personnes + build hermétique | Insiders malveillants |
# Exemple attestation SLSA dans GitHub Actions- uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v1.9.0 with: base64-subjects: "${{ needs.build.outputs.digest }}"| Outil | Usage |
|---|---|
| Cosign | Signature et vérification d’images OCI |
| Syft | Génération de SBOM |
| Grype | Scan de vulnérabilités |
| in-toto | Attestations de provenance |
| Sigstore | PKI publique pour la signature |
# Signer une image avec Cosigncosign sign --key cosign.key myregistry/myimage:v1.0.0
# Vérifier la signaturecosign verify --key cosign.pub myregistry/myimage:v1.0.0Pilier 2 : Fiabilité
Section intitulée « Pilier 2 : Fiabilité »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.
Pratiques essentielles
Section intitulée « Pratiques essentielles »| Pratique | Action concrète |
|---|---|
| Infrastructure as Code | 100 % de l’infra versionnée (Terraform, Pulumi, Ansible) |
| Immutabilité | Pas de modification manuelle en production ; redéployer |
| Redondance | Multi-AZ ou multi-région pour les services critiques |
| Circuit breakers | Isoler les défaillances pour éviter les cascades |
| Chaos engineering | Tests de résilience réguliers (Chaos Monkey, Litmus) |
| Capacity planning | Projections 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é.
-
Définir les SLI (Service Level Indicators)
Métriques mesurables : latence p99, taux d’erreur, throughput.
# Exemple SLIsli:latency_p99: "temps de réponse 99e percentile < 200ms"error_rate: "taux d'erreurs HTTP 5xx"availability: "succès des health checks" -
Fixer les SLO (Service Level Objectives)
Objectifs internes basés sur les SLI.
# Exemple SLOslo:availability: 99.9% # 8h45 de downtime autorisé par anlatency_p99: 200mserror_rate: < 0.1% -
Calculer l’Error Budget
Error Budget = 100% - SLOAvec SLO = 99.9% → Error Budget = 0.1%Sur 30 jours = 43 minutes de downtime autorisées -
Appliquer la politique Error Budget
Budget restant Action > 50% Nouvelles features, expérimentations 20-50% Features + travail sur la fiabilité < 20% Stop features, focus stabilité Épuisé Gel complet, incident review
Pilier 3 : Exploitabilité
Section intitulée « Pilier 3 : Exploitabilité »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.
Pratiques essentielles
Section intitulée « Pratiques essentielles »| Pratique | Action concrète |
|---|---|
| Observabilité 3 piliers | Métriques + Logs + Traces corrélés |
| Dashboards actionnables | Indicateurs clés visibles, pas de « vanity metrics » |
| Alertes pertinentes | Seuils basés sur SLO, pas sur des valeurs arbitraires |
| Runbooks | Procédures documentées pour chaque alerte critique |
| Post-mortems | Analyse blameless après chaque incident majeur |
| On-call rotation | Équipes formées et outillées pour l’astreinte |
OpenTelemetry : observabilité standardisée
Section intitulée « OpenTelemetry : observabilité standardisée »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 │ └─────────┘ └─────────┘ └─────────┘# Python avec OpenTelemetryfrom opentelemetry import tracefrom opentelemetry.sdk.trace import TracerProviderfrom opentelemetry.sdk.trace.export import BatchSpanProcessorfrom opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
# Configurationprovider = TracerProvider()processor = BatchSpanProcessor(OTLPSpanExporter(endpoint="otel-collector:4317"))provider.add_span_processor(processor)trace.set_tracer_provider(provider)
# Utilisationtracer = trace.get_tracer(__name__)with tracer.start_as_current_span("process_request") as span: span.set_attribute("user.id", user_id) # ... traitementreceivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318
processors: batch: timeout: 1s send_batch_size: 1024 memory_limiter: check_interval: 1s limit_mib: 1000
exporters: prometheus: endpoint: "0.0.0.0:8889" jaeger: endpoint: jaeger:14250 tls: insecure: true loki: endpoint: http://loki:3100/loki/api/v1/push
service: pipelines: traces: receivers: [otlp] processors: [memory_limiter, batch] exporters: [jaeger] metrics: receivers: [otlp] processors: [memory_limiter, batch] exporters: [prometheus] logs: receivers: [otlp] processors: [memory_limiter, batch] exporters: [loki]Pilier 4 : Maintenabilité
Section intitulée « Pilier 4 : Maintenabilité »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.
Pratiques essentielles
Section intitulée « Pratiques essentielles »| Pratique | Action concrète |
|---|---|
| Documentation à jour | README, ADR, diagrammes |
| Sauvegardes testées | Restauration validée mensuellement |
| Plan de reprise (PRA/PCA) | Testé annuellement avec les équipes |
| Versioning sémantique | Contrats d’API clairs, breaking changes documentés |
| Refactoring continu | Budget temps dédié à la réduction de dette |
| Tests automatisés | Couverture suffisante pour refactorer sereinement |
Golden Paths : standardiser sans contraindre
Section intitulée « Golden Paths : standardiser sans contraindre »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.
Composants d’un Golden Path
Section intitulée « Composants d’un Golden Path »-
Template de projet
Structure de repo, Dockerfile, CI/CD, configs de base pré-configurés.
Fenêtre de terminal # Exemple avec Backstagebackstage-cli create --template=microservice-template# Génère automatiquement :# ├── src/# ├── Dockerfile# ├── .gitlab-ci.yml# ├── kubernetes/# │ ├── deployment.yaml# │ └── service.yaml# ├── docs/# │ └── ADR/# └── README.md -
Self-service portal
Interface pour créer des ressources sans tickets.
Outil Type Points forts Backstage IDP open-source Templates, catalog, plugins Port SaaS Rapide à déployer, scorecards Humanitec SaaS Focus déploiement -
Documentation intégrée
Guides dans le flux de travail, pas sur un wiki séparé. Voir Docs-as-Code.
-
Guardrails automatiques
Policies qui préviennent les erreurs sans bloquer.
# Kyverno policy exempleapiVersion: kyverno.io/v1kind: ClusterPolicymetadata:name: require-labelsspec:validationFailureAction: Enforcerules:- name: check-team-labelmatch:resources:kinds:- Deploymentvalidate:message: "Le label 'team' est obligatoire"pattern:metadata:labels:team: "?*"
Scénarios concrets
Section intitulée « Scénarios concrets »Scénario 1 : Fuite de secrets dans un commit
Section intitulée « Scénario 1 : Fuite de secrets dans un commit »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.
- Le hook pre-commit (git-secrets, detect-secrets) bloque le commit
- Si le commit passe, le scan CI (Gitleaks, TruffleHog) échoue
- La clé est révoquée immédiatement via Vault
- Nouvelle clé générée et injectée automatiquement
- L’incident est documenté, le processus amélioré
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é.
- L’alerte contient un lien vers le runbook correspondant
- Le dashboard montre la corrélation entre le déploiement de 17h et les erreurs
- Le rollback automatique est déclenché en 2 clics
- Le service est restauré en 15 minutes
- Post-mortem planifié pour lundi
Pièges courants
Section intitulée « Pièges courants »| Piège | Pourquoi c’est un problème | Correction |
|---|---|---|
| Sécurité en fin de cycle | Correctifs coûteux, retards de livraison | Shift-left : scanner dès le commit |
| Trop d’alertes | Alert fatigue, alertes ignorées | Seuils basés sur SLO, suppression du bruit |
| Backups non testés | Restauration impossible le jour J | Test de restauration mensuel |
| Documentation obsolète | Confiance perdue, erreurs de procédure | Docs dans le repo, revue à chaque PR |
| Environnements manuels | Divergences, « works on my machine » | Tout en IaC, environnements éphémères |
| Moindre privilège ignoré | Surface d’attaque étendue | Audit trimestriel des permissions |
| Post-mortems punitifs | Dissimulation des erreurs | Culture blameless, focus sur le système |
| Dette technique accumulée | Vélocité en chute libre | Budget dédié (20 % du sprint) |
Critères de réussite
Section intitulée « Critères de réussite »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
À retenir
Section intitulée « À retenir »- 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