DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesSécuriser ses pipelines et applications (DevSecOps)01 - Scanner des images Docker avec Trivy

Détails

  • 20 minutes
  • Débutant

Objectifs

  • Installer Trivy et scanner une image Docker
  • Comprendre les niveaux de sévérité des CVE
  • Filtrer et corriger les vulnérabilités critiques
Module Sécuriser ses pipelines et applications (DevSecOps)

Exercice 01 : Scanner des images Docker avec Trivy

🎯 Objectifs

À la fin de cet exercice, vous serez capable de :

  • ✅ Installer Trivy sur votre machine
  • ✅ Scanner une image Docker avec trivy image
  • ✅ Interpréter les niveaux CRITICAL, HIGH, MEDIUM, LOW
  • ✅ Filtrer les vulnérabilités avec --severity et --ignore-unfixed
  • ✅ Comparer deux images et choisir la moins vulnérable

Durée estimée : 20 minutes

Difficulté : ⭐☆☆☆☆ (Débutant)

Prérequis : Docker installé


📖 Contexte

Trivy est un scanner de sécurité open-source développé par Aqua Security. Il détecte les vulnérabilités (CVE) dans les packages OS et les dépendances d'applications à l'intérieur des images Docker. Chaque CVE a un score CVSS qui détermine sa sévérité. Intégrer Trivy dans le pipeline CI bloque le déploiement d'images non conformes.


📋 Énoncé

Installez Trivy, scannez des images avec des niveaux de vulnérabilité différents, et identifiez la stratégie de remédiation.


🧭 Déroulement de l'exercice

Tâche 1 : Installer Trivy

Installez Trivy sur votre système via le gestionnaire de paquets ou Docker.

Indice :

`bash

# Via script d'installation (Linux/macOS)

curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin

>

# Ou via Docker (sans installation)

alias trivy="docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy"

>

# Ou via apt (Ubuntu/Debian)

sudo apt-get install trivy

`

Vérification : trivy --version affiche la version installée (ex: Version: 0.50.0).


Tâche 2 : Scanner une image ancienne

Scannez l'image ubuntu:20.04 qui contient des vulnérabilités connues :

bash
trivy image ubuntu:20.04

Observez la sortie : table de vulnérabilités avec colonnes Library, Vulnerability ID, Severity, Installed Version, Fixed Version.

Indice : La première ligne du résumé indique le total par sévérité. Ex: Total: 25 (UNKNOWN: 0, LOW: 10, MEDIUM: 8, HIGH: 5, CRITICAL: 2). Les entrées avec "Fixed Version" vide sont des vulnérabilités sans patch disponible.

Vérification : Le scan se termine et affiche un tableau de vulnérabilités. Notez le nombre de CRITICAL et HIGH.


Tâche 3 : Filtrer par sévérité

Réduisez le bruit en filtrant uniquement les vulnérabilités critiques et hautes :

bash
trivy image --severity CRITICAL,HIGH ubuntu:20.04

Puis ignorez les vulnérabilités sans correctif disponible :

bash
trivy image --severity CRITICAL,HIGH --ignore-unfixed ubuntu:20.04

Indice : --ignore-unfixed est très utile dans un pipeline CI : il ne bloque que les vulnérabilités pour lesquelles une mise à jour existe, évitant les faux bloquants.

Vérification : La liste est significativement réduite avec --ignore-unfixed. Ce sont les vulnérabilités actionnables.


Tâche 4 : Comparer deux images Python

Comparez python:3.8 (ancienne) vs python:3.12-slim (récente) :

bash
trivy image --severity CRITICAL,HIGH python:3.8
trivy image --severity CRITICAL,HIGH python:3.12-slim

Indice : python:3.8 est une image Debian complète avec beaucoup de packages. python:3.12-slim est une version allégée avec moins de packages installés = surface d'attaque réduite. L'image -slim a generalement 10 à 20 fois moins de vulnérabilités.

Vérification : python:3.12-slim affiche significativement moins de vulnérabilités. Notez la différence de taille avec docker images python.


Tâche 5 : Scanner avec sortie JSON

Générez un rapport JSON pour l'intégration CI :

bash
trivy image --format json --output rapport-trivy.json python:3.8

Puis comptez les vulnérabilités CRITICAL :

bash
cat rapport-trivy.json | jq '[.Results[].Vulnerabilities[]? | select(.Severity == "CRITICAL")] | length'

Indice : Le format --format json est utilisé dans les pipelines GitHub Actions/GitLab CI pour parser les résultats et décider si le pipeline doit échouer (exit 1) ou non selon un seuil défini.

Vérification : rapport-trivy.json est créé. La commande jq retourne un nombre entier représentant le total de CRITICAL.


🗂️ Mini-Projet

Créez un script scan-images.sh qui scanne 3 images et retourne un code de sortie non-nul si des vulnérabilités CRITICAL existent :

bash
#!/bin/bash
set -e

IMAGES=("ubuntu:20.04" "python:3.12-slim" "nginx:alpine")
FAILED=0

for IMAGE in "${IMAGES[@]}"; do
  echo "==> Scan de $IMAGE"
  if ! trivy image --severity CRITICAL --ignore-unfixed --exit-code 1 "$IMAGE"; then
    echo "ECHEC : $IMAGE contient des vulnérabilités CRITICAL"
    FAILED=1
  fi
done

exit $FAILED

Checkpoints :

  • Trivy est installé et fonctionne
  • ubuntu:20.04 affiche des vulnérabilités HIGH/CRITICAL
  • python:3.12-slim a moins de vulnérabilités que python:3.8
  • Le script retourne exit code 1 si une image a des CRITICAL
  • Le rapport JSON est généré

Retour au module

Sur cette page

  • 🎯 Objectifs
  • 📖 Contexte
  • 📋 Énoncé
  • 🧭 Déroulement de l'exercice
  • Tâche 1 : Installer Trivy
  • Tâche 2 : Scanner une image ancienne
  • Tâche 3 : Filtrer par sévérité
  • Tâche 4 : Comparer deux images Python
  • Tâche 5 : Scanner avec sortie JSON
  • 🗂️ Mini-Projet