Trivy : scanner de vulnérabilités, secrets et IaC
Mise à jour :

Dans le monde du développement logiciel, la sécurité est souvent reléguée au second plan dans les cycles de développement. Cependant, avec l’émergence du DevSecOps, il est devenu impératif d’intégrer la sécurité dès les premières étapes du développement (Shift Left). C’est ici qu’intervient Trivy, un outil d’analyse de sécurité open source, devenu rapidement populaire dans la communauté DevOps pour sa fiabilité, sa rapidité et sa facilité d’intégration dans les pipelines CI/CD.
L’histoire de Trivy
Trivy a été développé par Aqua Security avec la vision de simplifier la sécurité pour les développeurs et les équipes d’opérations. Contrairement à d’autres outils qui nécessitaient une configuration complexe et une compréhension approfondie des aspects de sécurité, Trivy se distinguait par sa simplicité d’utilisation. Cette facilité d’accès a permis même aux développeurs moins expérimentés en matière de sécurité de l’intégrer dans leurs workflows.
L’outil a évolué rapidement, passant d’un simple scanner de vulnérabilités à une solution complète pour la sécurité des applications et des infrastructures. Aujourd’hui, Trivy est capable de détecter non seulement les vulnérabilités dans les images de conteneurs, mais aussi les mauvaises configurations dans l’Infrastructure as Code (IaC), les secrets exposés, les risques de sécurité des clusters Kubernetes et bien plus encore.
Fonctionnalités de Trivy
Trivy se distingue non seulement par sa facilité d’utilisation, mais aussi par son éventail complet de fonctionnalités qui en font un outil polyvalent pour la sécurité dans le développement logiciel. Les bases de données de Trivy sont constamment mises à jour avec les dernières informations sur les failles, garantissant ainsi que les scans sont basés sur les données les plus récentes.
Trivy est capable de scanner une variété de targets :
- Images de conteneurs : Docker, Podman, OCI, images distroless et Chainguard
- Systèmes de fichiers : code source, dépendances applicatives
- Dépôts Git : analyse directe depuis GitHub, GitLab, Bitbucket
- Infrastructure as Code : Terraform, Kubernetes YAML, Helm, Dockerfile, CloudFormation
- Machines virtuelles : images VMDK, AMI AWS
- Clusters Kubernetes : workloads, configurations, RBAC
- Comptes AWS : audit de configuration cloud
Gestionnaires de paquets supportés
Trivy détecte automatiquement les dépendances dans de nombreux écosystèmes :
| Langage | Gestionnaires |
|---|---|
| Python | pip, Poetry, Pipenv, conda |
| JavaScript | npm, yarn, pnpm |
| Go | go.mod, binaires compilés |
| Java | Maven, Gradle, JAR/WAR |
| Ruby | Bundler, Gemfile |
| Rust | Cargo |
| PHP | Composer |
| .NET | NuGet, packages.config |
Génération de SBOM
Trivy génère des SBOM (Software Bill of Materials) et KBOM (Kubernetes BOM) détaillés, fournissant un inventaire complet des composants logiciels. Les SBOM permettent une compréhension approfondie des composants utilisés lors de la construction.
Les SBOM peuvent être signés avec Cosign, ainsi que l’image. Ces signatures pourront ensuite être vérifiées avant déploiement dans un cluster Kubernetes pour confirmer leur origine.
Trivy peut également lancer des benchs permettant de vérifier que les artefacts produits sont conformes aux normes. Vous l’aurez compris Trivy ne se limite plus au simple scan d’images de conteneurs. Voyons comment l’utiliser.
Installation de Trivy
L’installation de Trivy est assez simple, car le package ne contient qu’un seul binaire.
Installation sur Linux
Sur les systèmes Linux, Trivy peut être installé via le gestionnaire de paquets. Mais je vous conseille de le faire avec asdf qui permet d’installer les dernières versions.
asdf plugin add trivyasdf install trivy latestasdf set --home trivy latestSi vous préférez une installation manuelle, vous pouvez télécharger le binaire depuis la page des releases de Trivy sur GitHub ↗.
Installation sur macOS
Pour les utilisateurs de macOS, Trivy peut être installé via Homebrew en exécutant la commande suivante :
brew install trivyInstallation sur Windows
Sur Windows, Trivy peut être installé en téléchargeant le fichier exécutable depuis la page de releases de Trivy sur GitHub et en l’ajoutant au PATH du système. Un moyen est d’utiliser chocolatey ↗.
Vérification de l’Installation
Une fois installé, vous pouvez vérifier que Trivy fonctionne correctement en exécutant la commande suivante :
trivy --versionCette commande affichera la version de Trivy installée, confirmant que l’installation a été réussie.
Utilisation de la CLI Trivy
La CLI Trivy utilise ce format de commande :
trivy [global flags] command [flags] targetLes principales commandes de scan
Trivy propose plusieurs cibles de scan (targets) :
- image : analyse les images de conteneurs (Docker, OCI)
- fs : scanne un système de fichiers ou dossier local
- repository : analyse un dépôt Git directement
- rootfs : scanne le système de fichiers racine d’une image ou VM
- sbom : analyse un SBOM existant (CycloneDX, SPDX)
- vm : scanne les images de machines virtuelles (VMDK, AMI AWS)
- k8s : analyse un cluster Kubernetes complet
Trivy peut utiliser des scanners spécifiques :
- vuln : détection des vulnérabilités (CVE)
- misconfig : analyse des mauvaises configurations (IaC, Dockerfile, Kubernetes)
- secret : recherche de secrets exposés (clés API, tokens, mots de passe)
- license : inventaire des licences logicielles
Par défaut, seuls les scanners vuln et secret sont activés. Pour activer
les autres, utilisez le flag --scanners.
Exemples de combinaisons de scanners :
# Scan complet : vulnérabilités + secrets + licencestrivy image --scanners vuln,secret,license alpine:latest
# Scan rapide : vulnérabilités uniquement (recommandé en CI/CD)trivy image --scanners vuln alpine:latest
# Scan IaC complet : misconfigurations + secretstrivy fs --scanners misconfig,secret ./mon-projet/Exemple de sortie d’un scan complet :
$ trivy image --scanners vuln,secret,license alpine:latest2025-12-10T07:17:27Z INFO [vuln] Vulnerability scanning is enabled2025-12-10T07:17:27Z INFO [secret] Secret scanning is enabled2025-12-10T07:17:27Z INFO [license] License scanning is enabled2025-12-10T07:17:28Z INFO Detected OS family="alpine" version="3.23.0"2025-12-10T07:17:28Z INFO [alpine] Detecting vulnerabilities...
Report Summary
┌───────────────────────────────┬────────┬─────────────────┬─────────┬──────────┐│ Target │ Type │ Vulnerabilities │ Secrets │ Licenses │├───────────────────────────────┼────────┼─────────────────┼─────────┼──────────┤│ alpine:latest (alpine 3.23.0) │ alpine │ 0 │ - │ - │├───────────────────────────────┼────────┼─────────────────┼─────────┼──────────┤│ OS Packages │ - │ - │ - │ 19 │└───────────────────────────────┴────────┴─────────────────┴─────────┴──────────┘
OS Packages (license)Total: 19 (UNKNOWN: 0, LOW: 9, MEDIUM: 1, HIGH: 9, CRITICAL: 0)
┌────────────────────────┬──────────────────┬────────────────┬──────────┐│ Package │ License │ Classification │ Severity │├────────────────────────┼──────────────────┼────────────────┼──────────┤│ alpine-baselayout │ GPL-2.0-only │ restricted │ HIGH │├────────────────────────┼──────────────────┼────────────────┼──────────┤│ alpine-keys │ MIT │ notice │ LOW │├────────────────────────┼──────────────────┼────────────────┼──────────┤│ apk-tools │ GPL-2.0-only │ restricted │ HIGH │├────────────────────────┼──────────────────┼────────────────┼──────────┤│ ca-certificates-bundle │ MPL-2.0 │ reciprocal │ MEDIUM │├────────────────────────┼──────────────────┼────────────────┼──────────┤│ libcrypto3 │ Apache-2.0 │ notice │ LOW │├────────────────────────┼──────────────────┼────────────────┼──────────┤│ musl │ MIT │ notice │ LOW │├────────────────────────┼──────────────────┼────────────────┼──────────┤│ zlib │ Zlib │ notice │ LOW │└────────────────────────┴──────────────────┴────────────────┴──────────┘Pour voir un exemple avec des vulnérabilités détectées, scannons une image nginx :
$ trivy image --scanners vuln nginx:latest2025-12-10T07:17:38Z INFO [vuln] Vulnerability scanning is enabled2025-12-10T07:17:38Z INFO Detected OS family="debian" version="13.2"2025-12-10T07:17:38Z INFO [debian] Detecting vulnerabilities...
Report Summary
┌────────────────────────────┬────────┬─────────────────┐│ Target │ Type │ Vulnerabilities │├────────────────────────────┼────────┼─────────────────┤│ nginx:latest (debian 13.2) │ debian │ 106 │└────────────────────────────┴────────┴─────────────────┘
nginx:latest (debian 13.2)Total: 106 (UNKNOWN: 1, LOW: 85, MEDIUM: 16, HIGH: 4, CRITICAL: 0)
┌──────────────────┬─────────────────────┬──────────┬──────────────┬───────────────────┬───────────────┐│ Library │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │├──────────────────┼─────────────────────┼──────────┼──────────────┼───────────────────┼───────────────┤│ bsdutils │ CVE-2025-14104 │ MEDIUM │ affected │ 1:2.41-5 │ │├──────────────────┼─────────────────────┼──────────┼──────────────┼───────────────────┼───────────────┤│ curl │ CVE-2025-10966 │ LOW │ affected │ 8.14.1-2+deb13u2 │ │├──────────────────┼─────────────────────┼──────────┼──────────────┼───────────────────┼───────────────┤│ libc-bin │ CVE-2019-1010022 │ LOW │ affected │ 2.41-12 │ │└──────────────────┴─────────────────────┴──────────┴──────────────┴───────────────────┴───────────────┘Scan de code Infrastructure as Code (IaC)
Trivy peut analyser vos fichiers Terraform, Kubernetes YAML, Dockerfile, CloudFormation, Helm et Ansible pour détecter les mauvaises configurations :
# Scanner un dossier Terraformtrivy config ./infra/terraform
# Scanner des manifestes Kubernetestrivy fs --scanners misconfig ./k8s-manifests/
# Scanner un Dockerfile spécifiquetrivy config --file-patterns "dockerfile:Dockerfile" .
# Scanner un chart Helmtrivy config ./charts/mon-app/
# Scan complet d'un projet : vulnérabilités + IaC + secretstrivy fs --scanners vuln,misconfig,secret ./mon-projet/Exemple de sortie d’un scan Terraform avec des misconfigurations :
$ trivy config ./infra/terraform/2025-12-10T07:19:05Z INFO [misconfig] Misconfiguration scanning is enabled2025-12-10T07:19:06Z INFO [terraform scanner] Scanning root module
Report Summary
┌─────────┬───────────┬───────────────────┐│ Target │ Type │ Misconfigurations │├─────────┼───────────┼───────────────────┤│ main.tf │ terraform │ 8 │└─────────┴───────────┴───────────────────┘
main.tf (terraform)Tests: 8 (SUCCESSES: 0, FAILURES: 8)Failures: 8 (UNKNOWN: 0, LOW: 1, MEDIUM: 1, HIGH: 6, CRITICAL: 0)
AVD-AWS-0086 (HIGH): Public access block does not block public ACLs══════════════════════════════════════════════════════════════════════S3 buckets should block public ACLs on buckets and any objects they contain.
See https://avd.aquasec.com/misconfig/avd-aws-0086────────────────────────────────────────────────────────────────────── main.tf:8────────────────────────────────────────────────────────────────────── 5 resource "aws_s3_bucket_public_access_block" "example" { 8 [ block_public_acls = false──────────────────────────────────────────────────────────────────────
AVD-AWS-0088 (HIGH): Bucket does not have encryption enabled══════════════════════════════════════════════════════════════════════S3 Buckets should be encrypted to protect the data stored within them.
See https://avd.aquasec.com/misconfig/avd-aws-0088────────────────────────────────────────────────────────────────────── main.tf:1-3────────────────────────────────────────────────────────────────────── 1 ┌ resource "aws_s3_bucket" "example" { 2 │ bucket = "my-tf-test-bucket" 3 └ }──────────────────────────────────────────────────────────────────────Trivy s’appuie sur des règles intégrées (Rego policies) pour détecter :
- Conteneurs exécutés en root (
runAsNonRoot: false) - Ressources Kubernetes sans limites CPU/mémoire
- Buckets S3 publics ou sans chiffrement
- Secrets en clair dans les configurations Terraform
- Ports sensibles exposés (22, 3389, etc.)
- Images sans tag fixe (utilisation de
latest) - Privilèges élevés (
privileged: true,CAP_SYS_ADMIN)
Scan de machines virtuelles et rootfs
Trivy propose deux commandes pour auditer des systèmes complets :
Commande rootfs (machine locale ou image montée)
La commande rootfs scanne le système de fichiers racine d’une machine.
L’exécution en root est quasi indispensable pour une visibilité complète
sur tous les packages installés :
# Scanner le système de fichiers racine (nécessite les droits root)sudo trivy rootfs --scanners vuln --severity HIGH,CRITICAL /
# Scanner une image de VM montéesudo trivy rootfs --scanners vuln /mnt/vm-disk/Commande vm (images de machines virtuelles)
La commande vm cible spécifiquement les images de VM (VMDK, QCOW2, AMI
exportées). Idéal pour valider des golden images avant déploiement :
# Scanner une image QCOW2trivy vm --severity HIGH,CRITICAL ./disk.qcow2
# Scanner une image VMDK avec rapport détaillétrivy vm --format table ./windows-server.vmdkTests de compliance
Trivy permet de lancer des audits de compliance basés sur les référentiels des principales organisations sur les images de container ↗, les clusters kubernetes ↗ et les comptes AWS ↗.
$ trivy image --compliance docker-cis-1.6.0 nginx:latest2025-12-10T07:18:07Z INFO [image] Container image config scanners scanners=[misconfig secret]2025-12-10T07:18:07Z INFO [vuln] Vulnerability scanning is enabled2025-12-10T07:18:07Z INFO [misconfig] Misconfiguration scanning is enabled2025-12-10T07:18:09Z INFO Detected OS family="debian" version="13.2"2025-12-10T07:18:09Z INFO [debian] Detecting vulnerabilities...
Summary Report for compliance: CIS Docker Community Edition Benchmark v1.6.0┌──────┬──────────┬──────────────────────────────────────────────────────────────┬────────┬────────┐│ ID │ Severity │ Control Name │ Status │ Issues │├──────┼──────────┼──────────────────────────────────────────────────────────────┼────────┼────────┤│ 4.1 │ HIGH │ Ensure a user for the container has been created │ FAIL │ 1 ││ 4.2 │ HIGH │ Ensure that containers use only trusted base images (Manual) │ - │ - ││ 4.3 │ HIGH │ Ensure unnecessary packages are not installed in the │ - │ - ││ │ │ container (Manual) │ │ ││ 4.4 │ CRITICAL │ Ensure images are scanned and rebuilt to include security │ PASS │ 0 ││ │ │ patches │ │ ││ 4.5 │ LOW │ Ensure Content trust for Docker is Enabled (Manual) │ - │ - ││ 4.6 │ LOW │ Ensure HEALTHCHECK instructions have been added to the │ FAIL │ 1 ││ │ │ container image │ │ ││ 4.7 │ HIGH │ Ensure update instructions are not used alone in the │ PASS │ 0 ││ │ │ Dockerfile │ │ ││ 4.9 │ LOW │ Ensure COPY is used instead of ADD │ PASS │ 0 ││ 4.10 │ CRITICAL │ Ensure secrets are not stored in Dockerfiles │ PASS │ 0 ││ 4.11 │ MEDIUM │ Ensure only verified packages are installed (Manual) │ - │ - ││ 4.12 │ MEDIUM │ Ensure all signed artifacts are validated (Manual) │ - │ - │└──────┴──────────┴──────────────────────────────────────────────────────────────┴────────┴────────┘Les référentiels de compliance disponibles varient selon la cible :
- Images Docker (
trivy image --compliance) :- docker-cis-1.6.0 : CIS Docker Community Edition Benchmark v1.6.0
- Clusters Kubernetes (
trivy k8s --compliance) :- k8s-cis-1.23 : CIS Kubernetes Benchmark v1.23
- k8s-nsa : NSA Kubernetes Hardening Guide
- k8s-pss-baseline / k8s-pss-restricted : Pod Security Standards
- Comptes AWS (
trivy aws --compliance) :- aws-cis-1.2 / aws-cis-1.4 : CIS AWS Foundations Benchmark
Exemple de scan compliance sur un cluster Kubernetes :
# Audit NSA Kubernetes Hardening Guidetrivy k8s --compliance k8s-nsa --report summary
# Audit CIS Kubernetes Benchmark v1.23trivy k8s --compliance k8s-cis-1.23 --report allGestion de configuration
Trivy peut être configuré de plusieurs manières, par ordre de priorité décroissante :
- Les flags de la CLI (priorité maximale)
- Les variables d’environnement
- Le fichier de configuration
trivy.yaml
Les flags de la CLI
Vous pouvez afficher la liste des options disponibles avec --help :
$ trivy --helpScanner for vulnerabilities in container images, file systems,and Git repositories, as well as for configuration issues and hard-coded secrets
Usage: trivy [global flags] command [flags] target
Scanning Commands config Scan config files for misconfigurations filesystem Scan local filesystem image Scan a container image kubernetes [EXPERIMENTAL] Scan kubernetes cluster repository Scan a repository rootfs Scan rootfs sbom Scan SBOM for vulnerabilities and licenses vm [EXPERIMENTAL] Scan a virtual machine image
Flags: --cache-dir string cache directory (default "~/.cache/trivy") -c, --config string config path (default "trivy.yaml") -d, --debug debug mode --insecure allow insecure server connections -q, --quiet suppress progress bar and log output --timeout duration timeout (default 5m0s) -v, --version show versionLes variables d’environnement
Trivy peut être configuré via des variables d’environnement. Le format est
TRIVY_ suivi du nom du flag en majuscules :
# Exemples de variables d'environnementexport TRIVY_DEBUG=trueexport TRIVY_CACHE_DIR=/path/to/cacheexport TRIVY_TIMEOUT=10mLe fichier de configuration
Il est possible d’utiliser un fichier nommé trivy.yaml pour définir les
options de Trivy. Voici un exemple de fichier :
# Options globalescache: dir: "/tmp/trivy-cache"debug: falsetimeout: 10m
# Options de rapportformat: "table"exit-code: 1severity: - HIGH - CRITICALlist-all-pkgs: falsedependency-tree: false
# Options de scanscan: scanners: - vuln - secret skip-dirs: - /lib64 - /lib - /usr/lib - /usr/include offline: false
# Options de vulnérabilitésvulnerability: ignore-unfixed: true ignore-status: []
# Options de packagespkg: types: - os - libraryLa documentation des paramètres ↗
Formats de sortie et rapports
Trivy supporte plusieurs formats d’export pour s’intégrer dans différents outils :
# Format JSON (pour traitement automatisé)$ trivy image --format json --output report.json alpine:latest
# Format SARIF (intégration GitHub Security, Azure DevOps, GitLab)$ trivy image --format sarif --output report.sarif alpine:latest
# Format CycloneDX SBOM (standard OWASP)$ trivy image --format cyclonedx --output sbom.json alpine:latest
# Format SPDX SBOM (standard Linux Foundation)$ trivy image --format spdx-json --output sbom.spdx.json alpine:latestExemple de sortie JSON :
{ "SchemaVersion": 2, "CreatedAt": "2025-12-10T07:19:20Z", "ArtifactName": "alpine:latest", "ArtifactType": "container_image", "Metadata": { "OS": { "Family": "alpine", "Name": "3.23.0" }, "ImageID": "sha256:7acffee03fe864cd6b88219a1028855d6c912e7cf6fac..." }}Génération et consommation de SBOM
Le SBOM (Software Bill of Materials) est un inventaire complet des composants d’une application. Trivy peut générer un SBOM puis le scanner ultérieurement, ce qui est idéal pour les pipelines CI/CD et les environnements air-gapped :
# Étape 1 : Générer le SBOM lors du build (format CycloneDX)$ trivy image --format cyclonedx --output sbom.json alpine:latest2025-12-10T07:19:32Z INFO "--format cyclonedx" disables security scanning2025-12-10T07:19:34Z INFO Detected OS family="alpine" version="3.23.0"
# Le SBOM généré contient l'inventaire complet des composants$ head -20 sbom.json{ "bomFormat": "CycloneDX", "specVersion": "1.6", "metadata": { "tools": { "components": [{ "name": "trivy", "version": "0.68.1" }] } }}
# Étape 2 : Scanner le SBOM (sans accès à l'image)$ trivy sbom sbom.json2025-12-10T07:19:44Z INFO [vuln] Vulnerability scanning is enabled2025-12-10T07:19:44Z INFO Detected SBOM format format="cyclonedx-json"2025-12-10T07:19:44Z INFO Detected OS family="alpine" version="3.23.0"
Report Summary┌────────────────────────────────┬────────┬─────────────────┐│ Target │ Type │ Vulnerabilities │├────────────────────────────────┼────────┼─────────────────┤│ /tmp/sbom.json (alpine 3.23.0) │ alpine │ 0 │└────────────────────────────────┴────────┴─────────────────┘Cette approche découple la génération de l’analyse et s’intègre dans les stratégies de supply-chain security (SLSA, ANSSI). Le SBOM permet de tracer tous les composants et de réagir rapidement lors de la publication d’une nouvelle CVE.
Intégration de Trivy dans les pipelines CI/CD
L’intégration de Trivy dans vos pipelines CI/CD permet d’automatiser les scans de sécurité à chaque commit, pull request ou déploiement. Cette approche Shift Left détecte les vulnérabilités avant la mise en production.
Exemple avec Gitlab CI/CD
Pour analyser une image construite et transférée dans le registre GitLab. Le cache persistant améliore les temps de scan en évitant de retélécharger la base de vulnérabilités :
container_scanning: image: name: docker.io/aquasec/trivy:latest entrypoint: [""] variables: # Pas besoin de cloner le repo, on travaille uniquement sur l'image GIT_STRATEGY: none TRIVY_USERNAME: "$CI_REGISTRY_USER" TRIVY_PASSWORD: "$CI_REGISTRY_PASSWORD" TRIVY_AUTH_URL: "$CI_REGISTRY" TRIVY_NO_PROGRESS: "true" TRIVY_CACHE_DIR: ".trivycache/" FULL_IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG script: - trivy --version # Téléchargement de la base de vulnérabilités - time trivy image --download-db-only # Génération du rapport GitLab (format template) - time trivy image --exit-code 0 --format template --template "@/contrib/gitlab.tpl" --output "$CI_PROJECT_DIR/gl-container-scanning-report.json" "$FULL_IMAGE_NAME" # Affichage du rapport complet - time trivy image --exit-code 0 "$FULL_IMAGE_NAME" # Échec sur vulnérabilités critiques - time trivy image --exit-code 1 --severity CRITICAL "$FULL_IMAGE_NAME" cache: paths: - .trivycache/ artifacts: when: always reports: container_scanning: gl-container-scanning-report.json tags: - docker-runnerExemple avec GitHub Actions
Pour intégrer Trivy dans GitHub Actions, utilisez l’action officielle
aquasecurity/trivy-action. L’action gère automatiquement le cache des
bases de données de vulnérabilités :
name: Security Scan
on: push: branches: [main] pull_request: branches: [main]
jobs: trivy-scan: runs-on: ubuntu-latest permissions: contents: read security-events: write steps: - name: Checkout code uses: actions/checkout@v4
- name: Build image run: docker build -t myapp:${{ github.sha }} .
- name: Run Trivy vulnerability scanner uses: aquasecurity/trivy-action@0.33.1 with: image-ref: 'myapp:${{ github.sha }}' format: 'sarif' output: 'trivy-results.sarif' severity: 'CRITICAL,HIGH' exit-code: '1' ignore-unfixed: true
- name: Upload Trivy scan results to GitHub Security uses: github/codeql-action/upload-sarif@v4 if: always() with: sarif_file: 'trivy-results.sarif'Le format SARIF permet d’afficher les vulnérabilités directement dans l’onglet Security de GitHub, avec des liens vers les CVE et les fichiers concernés.
Scan Kubernetes avec Trivy Operator
Pour un scan continu de votre cluster Kubernetes, installez Trivy Operator. Cet opérateur analyse automatiquement tous les workloads déployés et stocke les résultats dans des Custom Resources (CR) Kubernetes :
# Ajout du dépôt Helmhelm repo add aqua https://aquasecurity.github.io/helm-charts/helm repo update
# Installation de Trivy Operatorhelm install trivy-operator aqua/trivy-operator \ --namespace trivy-system \ --create-namespace \ --version 0.31.0Vous pouvez aussi installer depuis l’OCI registry (Helm 3.8+) :
helm install trivy-operator \ oci://ghcr.io/aquasecurity/helm-charts/trivy-operator \ --namespace trivy-system \ --create-namespace \ --version 0.31.0L’opérateur crée des CRD pour stocker les rapports de sécurité :
# Lister les rapports de vulnérabilités de tous les namespaceskubectl get vulnerabilityreports -A
# Lister les rapports de configuration (misconfigs)kubectl get configauditreports -A
# Voir les secrets exposéskubectl get exposedsecretreports -A
# Détails d'un rapport spécifiquekubectl describe vulnerabilityreport -n default <nom-du-pod>Les rapports peuvent être exportés vers des outils de monitoring comme Prometheus/Grafana ou Datadog pour un suivi centralisé.
Optimisation des performances
Pour accélérer les scans dans vos pipelines :
# Utiliser un cache persistantexport TRIVY_CACHE_DIR="/path/to/cache"
# Télécharger la DB une seule foistrivy image --download-db-only
# Scanner sans mise à jour de la DBtrivy image --skip-db-update alpine:latest
# Scanner uniquement les vulnérabilités (plus rapide)trivy image --scanners vuln alpine:latest
# Ignorer les vulnérabilités non corrigéestrivy image --ignore-unfixed alpine:latestGestion des exceptions avec .trivyignore
Pour documenter les exceptions métier (faux positifs, risques acceptés),
créez un fichier .trivyignore à la racine du projet :
# .trivyignore - Exceptions documentées# CVE acceptée car non exploitable dans notre contexteCVE-2023-12345
# Vulnérabilité mitigée par configuration réseauCVE-2024-67890
# Secret de test (non utilisé en production)secret:generic-api-keyTrivy supporte également les dates d’expiration pour forcer une revue périodique des exceptions :
# Expire le 31 mars 2025 - à revoirCVE-2024-11111 exp:2025-03-31Bonnes pratiques et limites
Ce que Trivy fait bien
- Détection rapide des vulnérabilités connues (CVE) dans les images et dépendances
- Multi-cibles : images, IaC, code source, SBOM, Kubernetes
- Intégration CI/CD simple avec GitHub Actions, GitLab CI, Jenkins
- Génération de SBOM (CycloneDX, SPDX) pour la traçabilité supply-chain
- Scan offline possible grâce à la consommation de SBOM
Ce que Trivy ne remplace pas
Recommandations DevSecOps
- Combinez plusieurs outils : Trivy + Grype + tests manuels
- Images minimalistes : utilisez des images distroless ou Chainguard pour réduire la surface d’attaque
- Mettez à jour régulièrement Trivy et ses bases de vulnérabilités
- Signez vos artefacts avec Cosign pour garantir l’intégrité
- Auditez régulièrement vos systèmes avec Lynis
- Définissez des seuils : bloquez les builds sur les CVE CRITICAL et HIGH
- Archivez les SBOM pour pouvoir rescanner lors de nouvelles CVE
- Utilisez
.trivyignorepour documenter les exceptions avec dates d’expiration
Cross-check avec Grype
Pour une couverture maximale, croisez les résultats de Trivy avec Grype (≥0.87). Les versions récentes de Grype apportent le support CSAF (Custom Vulnerability Sources) et des améliorations VEX :
# Scan avec Trivytrivy image --severity HIGH,CRITICAL nginx:latest > trivy-report.txt
# Scan avec Grype (même image)grype nginx:latest --only-fixed --fail-on high > grype-report.txt
# Comparer les résultats pour identifier les écartsdiff trivy-report.txt grype-report.txtCette approche multi-scanner réduit les risques de faux négatifs et renforce la confiance dans vos audits de sécurité.
Conclusion
Trivy s’impose comme un outil incontournable pour les équipes DevSecOps. Sa capacité à scanner images, IaC, dépôts Git et clusters Kubernetes en fait une solution polyvalente pour intégrer la sécurité dès les premières étapes du développement.
L’approche Shift Left que Trivy facilite permet de détecter les vulnérabilités avant la production, réduisant ainsi les coûts de remédiation et les risques de sécurité. Combiné à la génération de SBOM et à l’intégration dans les pipelines CI/CD, Trivy devient un pilier de la supply-chain security.
Pour aller plus loin
Après avoir maîtrisé Trivy, complétez votre expertise DevSecOps :
- Registre sécurisé : Intégrez Trivy dans Harbor pour scanner automatiquement vos images.
- Scan alternatif : Comparez avec Grype pour croiser les résultats
- Supply Chain : Signez vos images avec Cosign
- Durcissement : Auditez vos systèmes avec Lynis
- Conformité : Appliquez les recommandations ANSSI-BP-028
Ressources
| Ressource | Description |
|---|---|
| Site Officiel ↗ | Page produit Aqua Security |
| Documentation ↗ | Documentation officielle |
| GitHub ↗ | Code source et issues |
| Trivy Action ↗ | Action GitHub officielle |
| Trivy Operator ↗ | Scan continu Kubernetes |