Aller au contenu

Qu'est-ce que le DevSecOps ?

Mise à jour :

logo devops

Quand une équipe développe un logiciel, elle suit généralement un cycle : écrire du code, le tester, le déployer. Historiquement, la sécurité arrivait à la fin de ce cycle, juste avant la mise en production. Quelqu’un vérifiait que “tout allait bien” — souvent trop tard pour corriger les problèmes de fond. Le DevSecOps change cette logique. Au lieu de traiter la sécurité comme une étape finale, on l’intègre à chaque moment du cycle. Ce n’est pas un outil ni une équipe dédiée : c’est une manière de travailler où chaque personne qui touche au code porte une part de responsabilité sur sa sécurité.

Définition courte : Le DevSecOps (Développement + Sécurité + Opérations) est une approche qui intègre la sécurité dans tout le cycle de vie du logiciel, du premier commit jusqu’à la production. L’objectif : détecter et corriger les failles tôt, quand elles coûtent moins cher à résoudre.

Le problème que DevSecOps résout

Dans un projet classique, voici ce qui se passe :

  1. Les développeurs écrivent le code pendant des semaines ou des mois
  2. L’équipe QA teste les fonctionnalités
  3. Juste avant la release, l’équipe sécurité fait un audit
  4. Elle découvre des failles — parfois critiques
  5. Les développeurs doivent réécrire des pans entiers du code
  6. La release est retardée, le budget explose

Ce schéma crée plusieurs problèmes concrets :

  • Coût de correction élevé : une faille découverte en production demande beaucoup plus d’efforts qu’une faille détectée pendant l’écriture du code. Il faut comprendre le contexte, retrouver qui a écrit quoi, tester la correction sans casser le reste.
  • Retards à répétition : les audits de dernière minute bloquent les releases. Les équipes métier perdent confiance.
  • Failles qui passent entre les mailles : sous pression du calendrier, certaines vulnérabilités sont acceptées “temporairement” — et ne sont jamais corrigées.
  • Conflits entre équipes : les développeurs voient la sécurité comme un frein qui arrive toujours au mauvais moment. La sécurité voit les développeurs comme des gens qui ignorent les risques.

Le DevSecOps casse ce cycle en déplaçant la sécurité vers le début — c’est le principe du Shift Left. On ne supprime pas les audits finaux, mais on réduit drastiquement ce qu’ils trouvent parce que les contrôles ont déjà eu lieu plus tôt.

DevOps vs DevSecOps : la différence réelle

Le DevOps rapproche développeurs et opérationnels. L’objectif : livrer plus vite, plus souvent, avec moins de friction entre “ceux qui codent” et “ceux qui déploient”. Les équipes partagent des outils (CI/CD, monitoring), des pratiques (infrastructure as code, déploiement continu) et des responsabilités.

Le DevSecOps ajoute la sécurité dans cette boucle. Mais attention : ce n’est pas juste “ajouter un scan de sécurité dans le pipeline”. C’est un changement plus profond.

Ce qui change concrètement :

AspectDevOps classiqueDevSecOps
Qui s’occupe de la sécuritéÉquipe dédiée, en fin de cycleTout le monde, à chaque étape
Quand on détecte les faillesAvant la releaseDès le commit
Comment on forme les équipesFormation sécurité optionnelleFormation intégrée au parcours dev
Gestion des dépendances”Ça marche” suffitVérification des vulnérabilités connues
Secrets (mots de passe, clés)Parfois en dur dans le codeJamais en dur, toujours externalisés

La vraie différence, c’est la responsabilité. En DevSecOps, un développeur qui introduit une dépendance vulnérable n’est pas “couvert” par l’équipe sécurité. C’est sa responsabilité de vérifier. L’équipe sécurité devient un support, pas un contrôleur.

Les principes DevSecOps (sans outils)

Avant de parler d’outils, il faut comprendre les principes. Ce sont des manières de penser qui guident les décisions techniques.

Responsabilité partagée

La sécurité n’est pas le travail d’une équipe isolée. Chaque personne qui modifie le système porte une part de responsabilité. Le développeur qui ajoute une librairie, l’ops qui ouvre un port réseau, le product owner qui demande une fonctionnalité risquée : tous participent à la posture de sécurité.

En pratique : si je casse quelque chose, c’est à moi de le réparer (ou au moins de le signaler immédiatement). Je ne peux pas dire “ce n’est pas mon domaine”.

→ Voir Responsabilités partagées

Sécurité by design

Au lieu de sécuriser après coup, on intègre la sécurité dès la conception. Avant d’écrire du code, je me pose des questions : quelles données sont sensibles ? Qui doit y accéder ? Que se passe-t-il si cette API est appelée par un attaquant ?

C’est l’opposé de la sécurité “a posteriori” où on ajoute des protections sur un système déjà construit — souvent avec des rustines qui ne tiennent pas.

→ Voir Sécurité by design vs a posteriori

Principe du moindre privilège

Chaque composant (utilisateur, service, conteneur) ne doit avoir que les droits strictement nécessaires à sa fonction. Un service qui lit une base de données n’a pas besoin de droits d’écriture. Un conteneur qui sert des fichiers statiques n’a pas besoin d’accès root.

Pourquoi ? Parce que si ce composant est compromis, l’attaquant hérite de ses droits. Moins de droits = moins de dégâts possibles.

→ Voir Moindre privilège

Zero Trust

“Ne faire confiance à personne par défaut.” Même un service interne doit prouver son identité avant d’accéder à une ressource. On ne suppose pas qu’un réseau interne est sûr, ni qu’un utilisateur connecté est légitime pour toutes les actions.

Concrètement : chaque requête est authentifiée et autorisée, même entre services internes. Les communications sont chiffrées, même dans le datacenter.

→ Voir Zero Trust

Où placer la sécurité dans le flux

Le cycle de développement comporte plusieurs étapes. À chaque étape, des contrôles de sécurité peuvent (et doivent) intervenir.

Poste développeur

C’est le premier point de contrôle. Avant même que le code n’atteigne le dépôt :

  • Hooks pre-commit : vérifient qu’aucun secret (mot de passe, clé API) n’est dans le code
  • Linters de sécurité : signalent les patterns dangereux (injection SQL, désérialisation non sécurisée)
  • IDE configuré : extensions qui alertent en temps réel sur les vulnérabilités connues des dépendances

Dépôt de code (Repository)

Quand le code est poussé :

  • Analyse des secrets : re-vérification automatique (au cas où le hook local aurait été contourné)
  • Revue de code obligatoire : une autre personne doit valider, avec une checklist sécurité
  • Branch protection : impossible de merger directement sur main sans validation

Pipeline CI (Intégration Continue)

Là où la plupart des contrôles automatisés s’exécutent :

  • Analyse statique du code (SAST) : cherche les failles dans le code source
  • Analyse des dépendances (SCA) : vérifie si les librairies utilisées ont des vulnérabilités connues
  • Tests de sécurité automatisés : scénarios d’attaque simulés

Artefacts (images, packages)

Avant de déployer :

  • Scan des images conteneur : vérifie les vulnérabilités dans l’image construite
  • Signature des artefacts : garantit que l’image n’a pas été modifiée entre la CI et le déploiement
  • Vérification de conformité : l’image respecte-t-elle les politiques de l’organisation ?

Déploiement

Au moment de mettre en production :

  • Vérification de l’infrastructure : les configurations respectent-elles les bonnes pratiques ?
  • Politiques d’admission : Kubernetes peut refuser de déployer une image non signée ou avec des vulnérabilités critiques

Runtime (Production)

Une fois déployé :

  • Monitoring de sécurité : détection d’anomalies, de comportements suspects
  • Analyse dynamique (DAST) : tests sur l’application en fonctionnement
  • Réponse aux incidents : procédures pour réagir quand quelque chose se passe mal

Types d’analyse de sécurité

Avant d’automatiser, il faut comprendre ce que chaque type d’analyse fait.

  • SAST (Static Application Security Testing) : analyse le code source sans l’exécuter. Cherche des patterns dangereux (ex : concaténation de chaînes dans une requête SQL).
  • DAST (Dynamic Application Security Testing) : teste l’application en fonctionnement, comme le ferait un attaquant externe. Envoie des requêtes malformées pour voir comment l’application réagit.
  • SCA (Software Composition Analysis) : inventorie les dépendances (librairies tierces) et vérifie si elles ont des vulnérabilités connues (CVE).
  • IaC Scanning : analyse les fichiers de configuration d’infrastructure (Terraform, CloudFormation) pour détecter les mauvaises pratiques (ports ouverts, chiffrement désactivé).
TypeCe qu’il vérifieExemple d’outil
SASTCode sourceSemgrep
DASTApplication en exécutionOWASP ZAP
SCADépendances vulnérablesTrivy
IaC ScanningConfiguration d’infrastructureCheckov

→ Voir Analyser le code pour comprendre les CVE

Automatiser sans paralyser

L’automatisation est au cœur du DevSecOps. Mais mal configurée, elle peut bloquer toute l’équipe.

Quand bloquer le pipeline

Je bloque (empêche le merge ou le déploiement) quand :

  • Un secret est détecté dans le code (mot de passe, clé privée)
  • Une vulnérabilité critique (CVSS ≥ 9) est présente dans une dépendance directe
  • Une règle de conformité obligatoire n’est pas respectée (ex : image non signée)

Quand alerter sans bloquer

Je crée une alerte (notification, ticket) sans bloquer quand :

  • Une vulnérabilité moyenne est détectée (CVSS 4-6)
  • Une bonne pratique n’est pas suivie, mais ce n’est pas critique
  • Le problème est dans une dépendance transitive (dépendance d’une dépendance)

Gérer les exceptions

Parfois, une vulnérabilité ne peut pas être corrigée immédiatement (pas de patch disponible, migration complexe). Dans ce cas :

  1. Documenter pourquoi l’exception est acceptée
  2. Définir une date limite de revue
  3. Mettre en place des mesures compensatoires (monitoring renforcé, isolation)
  4. Faire valider par quelqu’un d’habilité

L’objectif : ne jamais ignorer silencieusement un problème.

Scénarios concrets

Scénario 1 : Dépendance compromise (supply chain)

Situation : Un développeur ajoute une nouvelle librairie JavaScript pour gérer les dates. Le pipeline CI lance automatiquement une analyse SCA.

Ce qui se passe :

  1. L’outil détecte que cette librairie a une vulnérabilité connue (CVE) avec un score critique
  2. Le merge est bloqué avec un message clair : “Dépendance vulnérable : event-stream@3.3.4 contient du code malveillant”
  3. Le développeur vérifie : cette version a effectivement été compromise par un attaquant
  4. Il choisit une alternative (date-fns) et relance le pipeline
  5. Cette fois, l’analyse passe

Ce qu’on refuse : merger “pour tester” en prod, ignorer l’alerte parce que “ça marche”, utiliser la version vulnérable avec une exception non documentée.

→ Voir Supply chain et SBOM

Scénario 2 : Fuite de secret

Situation : Un développeur commit accidentellement un token d’API AWS dans un fichier de configuration.

Ce qui se passe :

  1. Le hook pre-commit (Gitleaks) détecte le pattern et bloque le commit localement
  2. Si le hook était désactivé et que le code atteint le dépôt, le scan CI le détecte
  3. Le pipeline bloque et alerte l’équipe sécurité
  4. Actions immédiates :
    • Révoquer le token compromis (dans la console AWS)
    • Créer un nouveau token
    • Vérifier les logs : le token a-t-il été utilisé frauduleusement ?
    • Nettoyer l’historique Git (le secret reste visible dans les anciens commits)

Réduire le blast radius : si ce token avait des droits limités (moindre privilège), les dégâts potentiels sont limités. S’il avait des droits admin sur tout le compte AWS, c’est une autre histoire.

→ Voir Gitleaks et Gestion des secrets

Scénario 3 : Infrastructure mal configurée

Situation : Un ops écrit un module Terraform pour créer un bucket de stockage.

Ce qui se passe :

  1. Le pipeline exécute Checkov sur le code Terraform
  2. Checkov détecte : “Le bucket est accessible publiquement” et “Le chiffrement n’est pas activé”
  3. Le pipeline bloque avec les règles violées
  4. L’ops corrige : accès privé, chiffrement activé
  5. Le pipeline passe

Pas de validation humaine nécessaire pour ces règles de base — c’est l’automatisation qui garantit le standard minimum.

Ce que DevSecOps n’est pas

  • Ce n’est pas une équipe sécurité intégrée au pipeline. C’est l’inverse : la sécurité est distribuée, pas centralisée.
  • Ce n’est pas “ajouter des outils”. Les outils sans culture ni processus ne changent rien.
  • Ce n’est pas un frein à la vélocité. Bien fait, ça accélère en évitant les corrections tardives.
  • Ce n’est pas une garantie de sécurité absolue. C’est une réduction des risques, pas une élimination.
  • Ce n’est pas réservé aux grandes entreprises. Les principes s’appliquent à toute taille d’équipe.

Pièges courants

PiègeSymptômeCorrectif
Trop d’alertes500 alertes/jour, l’équipe ignore toutPrioriser par criticité réelle, supprimer les faux positifs
Outils sans formationLes devs contournent les contrôlesFormer, expliquer le “pourquoi”, impliquer dans le choix des outils
Shift Left extrêmeTout est bloqué, rien ne passeDéfinir des seuils réalistes, bloquer uniquement le critique
Sécurité = l’affaire des autres”C’est le job de l’équipe sécu”Responsabiliser chaque rôle, inclure dans les objectifs
Ignorer les dépendances transitivesVulnérabilité dans une sous-dépendanceInclure les transitives dans l’analyse, mais avec seuils différents
Pas de gestion des exceptionsExceptions permanentes non documentéesProcessus formel avec date limite et mesures compensatoires
Oublier le runtimeTout est vérifié en CI, rien en prodMonitoring, DAST périodique, détection d’anomalies
Secrets en dur “temporaires""Je nettoierai avant le merge”Hook pre-commit obligatoire, pas d’exception

À retenir

  • Le DevSecOps intègre la sécurité dès le début du cycle, pas à la fin
  • C’est d’abord une culture (responsabilité partagée) avant d’être des outils
  • Chaque étape du flux (dev → repo → CI → artefact → déploiement → runtime) est un point de contrôle
  • L’automatisation doit bloquer le critique et alerter le reste — pas tout bloquer
  • Les principes (moindre privilège, zero trust, sécurité by design) guident les décisions techniques

Pour aller plus loin