Le DevSecOps a mauvaise réputation dans certaines équipes de développement : des scans qui ralentissent les pipelines, des faux positifs à la pelle, et des rapports que personne ne lit. Cette mauvaise expérience vient d’une mise en œuvre incorrecte.
Principe fondamental : fast fail, silent pass
Un contrôle de sécurité dans un pipeline doit :
- Échouer rapidement si un problème grave est détecté (et bloquer le build)
- Passer silencieusement si tout est en ordre (aucun bruit pour l’équipe)
Un scan qui génère 500 warnings “Low” que personne ne regarde est du bruit, pas de la sécurité.
SAST : l’analyse statique dans la CI
# .gitlab-ci.yml
sast:
stage: test
image: python:3.11
script:
- pip install semgrep
- semgrep --config=p/owasp-top-ten --error --json src/ | jq '.results | length'
rules:
- if: $CI_MERGE_REQUEST_ID
Semgrep est rapide (secondes, pas minutes) et précis. Configurez-le uniquement sur les règles HIGH/CRITICAL pour éviter les faux positifs. Limitez aux MRs pour ne pas bloquer les branches de feature.
SCA : les vulnérabilités dans les dépendances
dependency-scan:
stage: test
script:
- pip install safety
- safety check --full-report --json > safety-report.json
- python -c "
import json, sys
report = json.load(open('safety-report.json'))
criticals = [v for v in report['vulnerabilities'] if v['severity'] == 'critical']
if criticals:
print(f'{len(criticals)} vulnérabilités critiques trouvées')
sys.exit(1)
"
artifacts:
reports:
dependency_scanning: safety-report.json
Ne bloquez que sur les CVE CRITICAL — les LOW et MEDIUM vont dans un rapport pour revue hebdomadaire.
Scan d’image Docker : Trivy en pratique
container-scan:
stage: build
script:
- docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .
- trivy image
--exit-code 1
--severity HIGH,CRITICAL
--ignore-unfixed
$CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
L’option --ignore-unfixed ne bloque que sur les CVE pour lesquelles un correctif existe. Sans cette option, vous blocquez sur des vulnérabilités pour lesquelles vous n’avez rien à faire.
Secrets scanning : éviter les fuites de credentials
secrets-detection:
stage: test
script:
- gitleaks detect --source . --exit-code 1
rules:
- if: $CI_MERGE_REQUEST_ID
Gitleaks détecte les secrets dans le code (clés API, tokens, mots de passe). Intégrez-le systématiquement sur les MRs — c’est là que les fuites arrivent le plus souvent.
La politique de sécurité-as-code
Centralisez vos politiques de sécurité dans un dépôt dédié (.security-policies) et incluez-les dans tous vos pipelines. Quand une politique change, elle se propage à tous les projets qui l’incluent.
Notre formation Cybersécurité aborde DevSecOps avec des labs sur pipelines réels.