
Composant GitLab CI pour le scan Trivy
Un composant GitLab CI pour Trivy — le scanner de sécurité tout-en-un couvrant les images de conteneurs, les systèmes de fichiers, les dépôts, les clusters Kubernetes, les SBOM et la conformité des licences. Insérez ces modèles directement dans vos pipelines pour obtenir des analyses reproductibles, des rapports natifs GitLab et des artefacts portables avec pratiquement aucun script shell.
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
stages:
- test
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
inputs:
job_name: "security:remote"
TRIVY_SCAN_REMOTE_IMAGE: "registry.gitlab.com/group/app:latest"
severity: "CRITICAL,HIGH,MEDIUM"
exit_on_vulnerability: true
stages:
- test
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
inputs:
job_name: "security:local"
TRIVY_SCAN_LOCAL_IMAGES: "dist/"
TRIVY_SCANNERS: "vuln,secret"
exit_on_vulnerability: false
stages:
- test
Chaque modèle ci-dessous liste ses entrées disponibles et leurs valeurs par défaut telles que définies dans la spécification du composant, suivies d'un exemple minimal fonctionnel.
templates/main.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/main@latest
inputs:
job_name: "trivy:basic"
TRIVY_SCAN_REMOTE_IMAGE: "nginx:latest"
templates/target_container.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_container@latest
inputs:
job_name: "trivy:containers"
TRIVY_SCAN_REMOTE_IMAGE: "registry.gitlab.com/group/service:latest"
TRIVY_SCANNERS: "vuln,secret"
exit_on_vulnerability: true
templates/target_filesystem.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_filesystem@latest
inputs:
TRIVY_FS_PATH: "services/api"
TRIVY_SCANNERS: "vuln,misconfig,secret"
templates/target_rootfs.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_rootfs@latest
inputs:
TRIVY_ROOTFS_PATH: "/mnt/root"
TRIVY_SCANNERS: "vuln"
templates/target_repository.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_repository@latest
inputs:
TRIVY_REPO_TARGET: "https://github.com/aquasecurity/trivy"
TRIVY_REPO_BRANCH: "main"
templates/target_vm.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_vm@latest
inputs:
TRIVY_VM_TARGET: "ami-0123456789abcdef0"
TRIVY_AWS_REGION: "us-east-1"
templates/target_kubernetes.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_kubernetes@latest
inputs:
TRIVY_K8S_OBJECT: "namespace/prod"
TRIVY_K8S_REPORT: "summary"
templates/scanner_iac_config.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/scanner_iac_config@latest
inputs:
TRIVY_CONFIG_PATH: "examples/iac/terraform"
severity: "CRITICAL,HIGH,MEDIUM"
templates/scanner_license.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/scanner_license@latest
inputs:
TRIVY_SCAN_LOCAL_IMAGES: "test.tar"
TRIVY_LICENSE_FULL: true
templates/sbom_generate_image.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_generate_image@latest
inputs:
TRIVY_SBOM_INPUT: "test.tar"
TRIVY_SBOM_FILENAME: "ci-image-sbom.cdx.json"
templates/sbom_generate_repo.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_generate_repo@latest
inputs:
TRIVY_REPO_TARGET: "."
TRIVY_SBOM_FORMAT: "spdx-json"
templates/sbom_generate_kbom.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_generate_kbom@latest
inputs:
TRIVY_K8S_TARGET: "namespace/default"
scan_kbom: true
templates/sbom_scan_file.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_scan_file@latest
inputs:
TRIVY_SBOM_PATH: "artifacts/trivy/ci-image-sbom.cdx.json"
TRIVY_SCANNERS: "vuln,license"
templates/sbom_scan_rekor.ymlExemple
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/sbom_scan_rekor@latest
inputs:
TRIVY_SCAN_REMOTE_IMAGE: "registry.gitlab.com/group/app@sha256:..."
TRIVY_REKOR_URL: "https://rekor.sigstore.dev"
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche CI | "trivy scanning" |
stage | Étape du pipeline | "test" |
image | Image conteneur exécutant Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_NEEDED_STAGE | Étape qui doit se terminer avant l'exécution de Trivy | "build" |
TRIVY_SCAN_REMOTE_IMAGE | Image distante à analyser | "" |
TRIVY_SCAN_LOCAL_IMAGES | Chemin vers les entrées tar/OCI (cherche dans . si vide) | "" |
TRIVY_SCANNERS | Analyseurs séparés par des virgules | "vuln,secret,misconfig" |
severity | Gravités à inclure | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer la tâche si des problèmes sont trouvés | true |
TRIVY_EXTRA_ARGS | Drapeaux CLI supplémentaires | "" |
allow_failure | Autoriser l'échec de la tâche sans faire échouer le pipeline | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche CI | "trivy:scan:containers" |
stage | Étape du pipeline | "test" |
image | Image conteneur Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Référence d'image distante | "" |
TRIVY_SCAN_LOCAL_IMAGES | Répertoire/tar pour les analyses locales | "" |
TRIVY_SCANNERS | Analyseurs activés | "vuln,secret,misconfig" |
TRIVY_IMAGE_SRC | Backend source de l'image (remote/docker/...) | "" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer sur correspondance de gravité | true |
TRIVY_IGNORE_UNFIXED | Ignorer les problèmes sans correctif | true |
TRIVY_PKG_TYPES | Types de paquets | "os,library" |
TRIVY_VULN_TYPE | Alias déprécié pour les types de paquets | "" |
TRIVY_TIMEOUT | Délai d'attente de la commande | "10m" |
TRIVY_EXTRA_ARGS | Arguments CLI supplémentaires | "" |
TRIVY_DB_REPOSITORY | Miroir de base de données personnalisé | "" |
TRIVY_JAVA_DB_REPOSITORY | Miroir de base de données Java personnalisé | "" |
TRIVY_SKIP_FILES | Exclusions par glob de fichiers | "" |
TRIVY_SKIP_DIRS | Exclusions de répertoires | "" |
allow_failure | Autoriser l'échec sans faire échouer le pipeline | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche CI | "trivy:scan:filesystem" |
stage | Étape du pipeline | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_FS_PATH | Fichier ou répertoire à analyser | "." |
TRIVY_SCANNERS | Analyseurs activés | "vuln,secret" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer sur correspondance de gravité | true |
TRIVY_IGNORE_UNFIXED | Ignorer les problèmes sans correctif | true |
TRIVY_PKG_TYPES | Types de paquets | "os,library" |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
TRIVY_SKIP_FILES | Glob de fichiers à ignorer | "" |
TRIVY_SKIP_DIRS | Répertoires à ignorer | "" |
TRIVY_EXTRA_ARGS | Arguments CLI supplémentaires | "" |
TRIVY_REPORT_BASENAME | Nom de base de l'artefact | "filesystem-scan" |
allow_failure | Autoriser l'échec de la tâche | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:rootfs" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_ROOTFS_PATH | Chemin du système de fichiers racine | "/" |
TRIVY_SCANNERS | Analyseurs | "vuln,secret" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer la tâche sur constatations | true |
TRIVY_IGNORE_UNFIXED | Ignorer sans correctif | true |
TRIVY_PKG_TYPES | Types de paquets | "os,library" |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
TRIVY_SKIP_FILES | Fichiers à ignorer | "" |
TRIVY_SKIP_DIRS | Répertoires à ignorer | "" |
TRIVY_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_REPORT_BASENAME | Nom de base de l'artefact | "rootfs-scan" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:repo" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | Chemin local ou URL Git | "." |
TRIVY_REPO_BRANCH | Branche distante | "" |
TRIVY_REPO_COMMIT | Hash de commit | "" |
TRIVY_REPO_TAG | Nom du tag | "" |
TRIVY_SCANNERS | Analyseurs | "vuln,secret" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer la tâche sur constatations | true |
TRIVY_IGNORE_UNFIXED | Ignorer sans correctif | true |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
TRIVY_SKIP_FILES | Fichiers à ignorer | "" |
TRIVY_SKIP_DIRS | Répertoires à ignorer | "" |
TRIVY_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_REPORT_BASENAME | Nom de base de l'artefact | "repo-scan" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:vm" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_VM_TARGET | Chemin local ou identifiant ami:/ebs: | "" |
TRIVY_AWS_REGION | Région AWS pour les analyses AMI/EBS | "" |
TRIVY_SCANNERS | Analyseurs | "vuln" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer la tâche sur constatations | true |
TRIVY_IGNORE_UNFIXED | Ignorer sans correctif | true |
TRIVY_TIMEOUT | Délai d'attente | "20m" |
TRIVY_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_REPORT_BASENAME | Nom de base de l'artefact | "vm-scan" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:k8s" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_OBJECT | Portée (cluster, namespace/foo, etc.) | "" |
TRIVY_K8S_REPORT | Détail du rapport (summary/all) | "summary" |
TRIVY_K8S_KUBECONFIG | Chemin kubeconfig personnalisé | "" |
TRIVY_K8S_INCLUDE_NAMESPACES | Espaces de noms à inclure | "" |
TRIVY_K8S_EXCLUDE_NAMESPACES | Espaces de noms à exclure | "" |
TRIVY_K8S_INCLUDE_KINDS | Types à inclure | "" |
TRIVY_K8S_EXCLUDE_KINDS | Types à exclure | "" |
TRIVY_K8S_SKIP_IMAGES | Ignorer les analyses d'images des charges de travail | false |
TRIVY_K8S_DISABLE_NODE_COLLECTOR | Désactiver le collecteur de nœuds | false |
TRIVY_SCANNERS | Analyseurs | "vuln,misconfig,secret" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer la tâche sur constatations | true |
TRIVY_IGNORE_UNFIXED | Ignorer sans correctif | true |
TRIVY_TIMEOUT | Délai d'attente | "15m" |
TRIVY_K8S_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_REPORT_BASENAME | Nom de base de l'artefact | "k8s-scan" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:iac" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_CONFIG_PATH | Répertoire IaC | "." |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer sur constatations | true |
TRIVY_CONFIG_REPORT | Détail du rapport | "all" |
TRIVY_CONFIG_INCLUDE_NON_FAILURES | Inclure les passes | false |
TRIVY_MISCONFIG_SCANNERS | Liste des analyseurs de mauvaise configuration | "azure-arm,cloudformation,dockerfile,helm,kubernetes,terraform" |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
TRIVY_SKIP_FILES | Fichiers à ignorer | "" |
TRIVY_SKIP_DIRS | Répertoires à ignorer | "" |
TRIVY_CONFIG_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_REPORT_BASENAME | Nom de base de l'artefact | "iac-scan" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:license" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Référence d'image distante | "" |
TRIVY_SCAN_LOCAL_IMAGES | Chemin local tar/OCI ou système de fichiers | "" |
TRIVY_SCANNERS | Liste d'analyseurs | "license" |
severity | Gravités | "CRITICAL" |
exit_on_vulnerability | Échouer sur correspondance de gravité | true |
TRIVY_LICENSE_FULL | Activer --license-full | false |
TRIVY_LICENSE_CONFIDENCE | Seuil de confiance | "0.9" |
TRIVY_LICENSE_IGNORED | Licences à ignorer | "" |
TRIVY_PKG_TYPES | Types de paquets | "os,library" |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
TRIVY_EXTRA_ARGS | Arguments supplémentaires | "" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:sbom:image" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_IMAGE | Référence d'image distante | "" |
TRIVY_SBOM_INPUT | Entrée OCI/tar locale | "" |
TRIVY_SBOM_FORMAT | Format SBOM | "cyclonedx" |
TRIVY_SBOM_FILENAME | Nom du fichier de sortie | "image-sbom.cdx.json" |
TRIVY_SBOM_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:sbom:repo" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | Chemin ou URL Git distante | "." |
TRIVY_REPO_BRANCH | Branche | "" |
TRIVY_REPO_COMMIT | Hash de commit | "" |
TRIVY_REPO_TAG | Tag | "" |
TRIVY_SBOM_FORMAT | Format | "cyclonedx" |
TRIVY_SBOM_FILENAME | Nom du fichier de sortie | "repo-sbom.cdx.json" |
TRIVY_REPO_SCANNERS | Analyseurs lors de la création du SBOM | "vuln,secret" |
TRIVY_REPO_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:sbom:kbom" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_TARGET | Cible trivy k8s (cluster, namespace/...) | "cluster" |
TRIVY_K8S_CONTEXT | Contexte kubeconfig | "" |
TRIVY_K8S_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_SBOM_FILENAME | Nom du fichier KBOM | "kbom.cdx.json" |
TRIVY_TIMEOUT | Délai d'attente | "15m" |
scan_kbom | Exécuter l'analyse des vulnérabilités sur le KBOM généré | true |
TRIVY_SBOM_SCANNERS | Analyseurs pour l'analyse KBOM | "vuln" |
severity | Gravités pour l'analyse KBOM | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer sur constatations | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | Arguments supplémentaires pour l'analyse KBOM | "" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:sbom" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_PATH | Chemin vers le fichier SBOM | "artifacts/trivy/image-sbom.cdx.json" |
TRIVY_SBOM_REPORT_BASENAME | Nom de base de sortie | "sbom-scan" |
TRIVY_SCANNERS | Analyseurs à exécuter | "vuln,license" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer sur constatations | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | Arguments supplémentaires | "" |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
allow_failure | Autoriser l'échec | false |
| Entrée | Description | Par défaut |
|---|
job_name | Nom de la tâche | "trivy:scan:rekor" |
stage | Étape | "test" |
image | Image Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Image distante attestée | "" |
TRIVY_REKOR_URL | Point de terminaison de l'API Rekor | "" |
TRIVY_SCANNERS | Analyseurs | "vuln" |
severity | Gravités | "CRITICAL,HIGH" |
exit_on_vulnerability | Échouer sur constatations | true |
TRIVY_IGNORE_UNFIXED | Ignorer sans correctif | true |
TRIVY_TIMEOUT | Délai d'attente | "10m" |
TRIVY_EXTRA_ARGS | Arguments supplémentaires | "" |
allow_failure | Autoriser l'échec | false |