🔍 Sécuriser ses Images Docker : Harbor + Trivy, le Duo Gagnant

🟡 Niveau : Intermédiaire | ⏱️ Lecture : 12 min | 🛠️ Mise en œuvre : 2-3 heures

📚 Prérequis

  • Docker installé et fonctionnel
  • Connaissance des concepts d’images et de registres Docker
  • Un serveur dédié (recommandé : 8 Go RAM, 4 vCPU, 100 Go stockage)
  • Un nom de domaine et un certificat SSL (optionnel mais recommandé)

Vous avez conteneurisé vos applications ? Excellent. Mais avez-vous vérifié les vulnérabilités cachées dans vos images Docker ? Une étude récente montre que 75% des images Docker contiennent au moins une vulnérabilité critique. Découvrez comment Harbor et Trivy peuvent sécuriser votre supply chain de conteneurs.


🏠 Pourquoi un Registry Privé est Indispensable

Docker Hub est pratique, mais en entreprise, vous avez besoin de plus :

  • Contrôle d’accès : Qui peut pusher/puller quelles images ?
  • Confidentialité : Vos images métier ne doivent pas être publiques
  • Fiabilité : Pas de dépendance à un service externe
  • Conformité : RGPD, données de santé, secteur bancaire…
  • Scan de vulnérabilités : Détecter les CVE avant le déploiement

Harbor est un registry open-source de niveau entreprise maintenu par la CNCF (Cloud Native Computing Foundation). Il offre toutes ces fonctionnalités et bien plus.

🔍 Comprendre les CVE et les Scores CVSS

Avant de scanner, comprenons ce qu’on cherche :

CVE (Common Vulnerabilities and Exposures)

C’est un identifiant unique pour chaque vulnérabilité connue. Exemple : CVE-2024-3094 (la fameuse backdoor XZ Utils).

Score CVSS (Common Vulnerability Scoring System)

Un score de 0 à 10 indiquant la gravité :

ScoreSévéritéAction recommandée
0.0 – 3.9FaibleCorriger lors de la prochaine maintenance
4.0 – 6.9MoyennePlanifier une correction sous 30 jours
7.0 – 8.9HauteCorriger sous 7 jours
9.0 – 10.0CritiqueCorriger immédiatement

🛡️ Trivy : Le Scanner Open-Source de Référence

Trivy (développé par Aqua Security) est un scanner de vulnérabilités rapide et complet. Il peut analyser :

  • Images Docker (couches, packages OS, dépendances applicatives)
  • Fichiers système (Filesystem)
  • Dépôts Git
  • Fichiers de configuration (IaC comme Terraform, Kubernetes)
Exemple d’utilisation CLI
# Scanner une image Docker
trivy image nginx:1.25

# Scanner avec rapport JSON
trivy image --format json --output report.json myapp:latest

# Scanner uniquement les vulnérabilités critiques et hautes
trivy image --severity CRITICAL,HIGH myapp:latest

# Sortie en erreur si des vulnérabilités critiques sont trouvées (pour CI/CD)
trivy image --exit-code 1 --severity CRITICAL myapp:latest
Exemple de sortie
nginx:1.25 (debian 12.4)
=========================
Total: 42 (UNKNOWN: 0, LOW: 25, MEDIUM: 12, HIGH: 4, CRITICAL: 1)

┌─────────────────────┬────────────────┬──────────┬─────────────────────────┐
│       Library       │ Vulnerability  │ Severity │    Installed Version    │
├─────────────────────┼────────────────┼──────────┼─────────────────────────┤
│ libssl3             │ CVE-2024-0727  │ CRITICAL │ 3.0.11-1~deb12u1        │
│ zlib1g              │ CVE-2023-45853 │ HIGH     │ 1:1.2.13.dfsg-1         │
└─────────────────────┴────────────────┴──────────┴─────────────────────────┘

🐳 Harbor + Trivy : L’Intégration Parfaite

Workflow Harbor + Trivy pour le scan de vulnérabilités des images Docker
Workflow de scan d’images avec Harbor et Trivy

Harbor intègre Trivy nativement. À chaque docker push, l’image est automatiquement scannée. Voici le workflow :

  1. Le développeur push une image sur Harbor
  2. Trivy scanne automatiquement l’image
  3. Les résultats apparaissent dans l’interface web Harbor
  4. Selon les policies, l’image peut être bloquée pour le pull
Configuration des Policies de Sécurité

Harbor permet de définir des règles strictes :

  • Empêcher le pull d’images avec des vulnérabilités critiques
  • Forcer le scan avant tout pull
  • Alerter les équipes sur les nouvelles CVE

🔄 Intégrer le Scan dans le Pipeline CI/CD

Le scan ne doit pas être optionnel. Intégrez-le dans votre pipeline pour bloquer les déploiements vulnérables :

Exemple GitLab CI
stages:
  - build
  - scan
  - push
  - deploy

build:
  stage: build
  script:
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA .

scan_vulnerabilities:
  stage: scan
  script:
    - trivy image --exit-code 1 --severity CRITICAL,HIGH $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  allow_failure: false  # Bloque le pipeline si vulnérabilités trouvées

push_to_harbor:
  stage: push
  script:
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
  only:
    - main
  needs:
    - scan_vulnerabilities  # Ne push que si le scan passe

deploy:
  stage: deploy
  script:
    - ./deploy.sh
  needs:
    - push_to_harbor
Avantages de cette approche
  • Shift-left security : Les vulnérabilités sont détectées au plus tôt
  • Blocage automatique : Pas de déploiement vulnérable en production
  • Traçabilité : Chaque scan est enregistré dans les logs CI

📋 Bonnes Pratiques de Sécurité des Images

Le scan n’est qu’une partie de la solution. Voici d’autres bonnes pratiques :

1. Utilisez des Images de Base Minimales
# ❌ Image lourde avec beaucoup de packages
FROM ubuntu:22.04

# ✅ Image minimale
FROM alpine:3.19

# ✅ Encore mieux : distroless (Google)
FROM gcr.io/distroless/static-debian12
2. Multi-stage Builds
# Stage de build avec tous les outils
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp

# Stage final minimal
FROM alpine:3.19
COPY --from=builder /app/myapp /usr/local/bin/
CMD ["myapp"]
3. Mettez à Jour Régulièrement

Reconstruisez vos images au moins une fois par semaine pour intégrer les patches de sécurité des images de base.

4. Signez vos Images

Harbor supporte la signature d’images avec Notary/Cosign pour garantir l’intégrité et l’origine.


🚀 Déployer Harbor + Trivy en Production

Déployer Harbor manuellement est complexe :

  • Génération des certificats SSL
  • Configuration de la base PostgreSQL interne
  • Activation et configuration de Trivy
  • Gestion des volumes de données
  • Configuration du reverse proxy

Notre rôle Ansible automatise tout cela :

  • ✅ Certificats SSL auto-signés ou personnalisés
  • ✅ Trivy activé par défaut avec scan automatique
  • ✅ Métriques Prometheus exposées
  • ✅ Compatible Debian 12/13 et Ubuntu 22.04/24.04
  • ✅ Documentation Day-1 et Day-2 incluse

Prêt à sécuriser vos images Docker ? Découvrez notre rôle Ansible harbor_trivy.


📖 Glossaire

  • CVE (Common Vulnerabilities and Exposures) : Identifiant unique attribué à chaque vulnérabilité de sécurité connue
  • CVSS (Common Vulnerability Scoring System) : Système de notation standardisé de la gravité des vulnérabilités (0-10)
  • Registry : Serveur qui stocke et distribue les images Docker
  • CNCF : Cloud Native Computing Foundation, organisation qui maintient les projets cloud-native comme Kubernetes et Harbor
  • Supply Chain : Chaîne d’approvisionnement logicielle, incluant les dépendances et images de base
  • Shift-Left : Pratique consistant à déplacer les tests de sécurité plus tôt dans le cycle de développement
  • Distroless : Images Docker minimales de Google ne contenant que l’application, sans OS complet

Dans le prochain article, nous verrons comment protéger vos applications web avec un WAF ModSecurity. Restez connectés !