
Componente de CI de GitLab para escaneo con Trivy
Un componente de CI de GitLab para Trivy — el escáner de seguridad integral que cubre imágenes de contenedores, sistemas de archivos, repositorios, clústeres de Kubernetes, SBOMs y cumplimiento de licencias. Conecta estas plantillas directamente en tus pipelines para obtener escaneos repetibles, informes nativos de GitLab y artefactos portátiles sin casi necesidad de scripting de 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
Cada plantilla a continuación enumera sus entradas disponibles y valores predeterminados según la especificación del componente, seguida de un ejemplo mínimo funcional.
templates/main.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_rootfs@latest
inputs:
TRIVY_ROOTFS_PATH: "/mnt/root"
TRIVY_SCANNERS: "vuln"
templates/target_repository.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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.ymlEjemplo
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"
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo de CI | "trivy scanning" |
stage | Etapa del pipeline | "test" |
image | Imagen de contenedor que ejecuta Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_NEEDED_STAGE | Etapa que debe finalizar antes de que Trivy se ejecute | "build" |
TRIVY_SCAN_REMOTE_IMAGE | Imagen remota a escanear | "" |
TRIVY_SCAN_LOCAL_IMAGES | Ruta a entradas tar/OCI (busca en . cuando está vacío) | "" |
TRIVY_SCANNERS | Escáneres separados por comas | "vuln,secret,misconfig" |
severity | Severidades a incluir | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar el trabajo cuando se encuentran problemas | true |
TRIVY_EXTRA_ARGS | Banderas adicionales de CLI | "" |
allow_failure | Permitir fallo del trabajo sin fallar el pipeline | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo de CI | "trivy:scan:containers" |
stage | Etapa del pipeline | "test" |
image | Imagen de contenedor Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Referencia de imagen remota | "" |
TRIVY_SCAN_LOCAL_IMAGES | Directorio/tar para escaneos locales | "" |
TRIVY_SCANNERS | Escáneres habilitados | "vuln,secret,misconfig" |
TRIVY_IMAGE_SRC | Backend de origen de imagen (remote/docker/...) | "" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar al coincidir severidad | true |
TRIVY_IGNORE_UNFIXED | Ignorar problemas sin corrección | true |
TRIVY_PKG_TYPES | Tipos de paquetes | "os,library" |
TRIVY_VULN_TYPE | Alias obsoleto para tipos de paquete | "" |
TRIVY_TIMEOUT | Tiempo de espera del comando | "10m" |
TRIVY_EXTRA_ARGS | Argumentos CLI adicionales | "" |
TRIVY_DB_REPOSITORY | Espejo de base de datos personalizado | "" |
TRIVY_JAVA_DB_REPOSITORY | Espejo de base de datos Java personalizado | "" |
TRIVY_SKIP_FILES | Exclusiones de patrones glob de archivos | "" |
TRIVY_SKIP_DIRS | Exclusiones de directorios | "" |
allow_failure | Permitir fallo sin fallar el pipeline | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo de CI | "trivy:scan:filesystem" |
stage | Etapa del pipeline | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_FS_PATH | Archivo o directorio a escanear | "." |
TRIVY_SCANNERS | Escáneres habilitados | "vuln,secret" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar al coincidir severidad | true |
TRIVY_IGNORE_UNFIXED | Ignorar problemas sin corrección | true |
TRIVY_PKG_TYPES | Tipos de paquetes | "os,library" |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
TRIVY_SKIP_FILES | Patrones glob de archivos a omitir | "" |
TRIVY_SKIP_DIRS | Directorios a omitir | "" |
TRIVY_EXTRA_ARGS | Argumentos CLI adicionales | "" |
TRIVY_REPORT_BASENAME | Nombre base del artefacto | "filesystem-scan" |
allow_failure | Permitir fallo del trabajo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:rootfs" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_ROOTFS_PATH | Ruta del sistema de archivos raíz | "/" |
TRIVY_SCANNERS | Escáneres | "vuln,secret" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar trabajo al encontrar hallazgos | true |
TRIVY_IGNORE_UNFIXED | Ignorar sin corregir | true |
TRIVY_PKG_TYPES | Tipos de paquetes | "os,library" |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
TRIVY_SKIP_FILES | Archivos a omitir | "" |
TRIVY_SKIP_DIRS | Directorios a omitir | "" |
TRIVY_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_REPORT_BASENAME | Nombre base del artefacto | "rootfs-scan" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:repo" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | Ruta local o URL Git | "." |
TRIVY_REPO_BRANCH | Rama remota | "" |
TRIVY_REPO_COMMIT | Hash de commit | "" |
TRIVY_REPO_TAG | Nombre de etiqueta | "" |
TRIVY_SCANNERS | Escáneres | "vuln,secret" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar trabajo al encontrar hallazgos | true |
TRIVY_IGNORE_UNFIXED | Ignorar sin corregir | true |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
TRIVY_SKIP_FILES | Archivos a omitir | "" |
TRIVY_SKIP_DIRS | Directorios a omitir | "" |
TRIVY_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_REPORT_BASENAME | Nombre base del artefacto | "repo-scan" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:vm" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_VM_TARGET | Ruta local o identificador ami:/ebs: | "" |
TRIVY_AWS_REGION | Región AWS para escaneos AMI/EBS | "" |
TRIVY_SCANNERS | Escáneres | "vuln" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar trabajo al encontrar hallazgos | true |
TRIVY_IGNORE_UNFIXED | Ignorar sin corregir | true |
TRIVY_TIMEOUT | Tiempo de espera | "20m" |
TRIVY_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_REPORT_BASENAME | Nombre base del artefacto | "vm-scan" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:k8s" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_OBJECT | Alcance (cluster, namespace/foo, etc.) | "" |
TRIVY_K8S_REPORT | Detalle del informe (summary/all) | "summary" |
TRIVY_K8S_KUBECONFIG | Ruta personalizada a kubeconfig | "" |
TRIVY_K8S_INCLUDE_NAMESPACES | Espacios de nombres a incluir | "" |
TRIVY_K8S_EXCLUDE_NAMESPACES | Espacios de nombres a excluir | "" |
TRIVY_K8S_INCLUDE_KINDS | Tipos (kinds) a incluir | "" |
TRIVY_K8S_EXCLUDE_KINDS | Tipos (kinds) a excluir | "" |
TRIVY_K8S_SKIP_IMAGES | Omitir escaneo de imágenes de cargas de trabajo | false |
TRIVY_K8S_DISABLE_NODE_COLLECTOR | Deshabilitar recolector de nodos | false |
TRIVY_SCANNERS | Escáneres | "vuln,misconfig,secret" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar trabajo al encontrar hallazgos | true |
TRIVY_IGNORE_UNFIXED | Ignorar sin corregir | true |
TRIVY_TIMEOUT | Tiempo de espera | "15m" |
TRIVY_K8S_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_REPORT_BASENAME | Nombre base del artefacto | "k8s-scan" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:iac" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_CONFIG_PATH | Directorio IaC | "." |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar al encontrar hallazgos | true |
TRIVY_CONFIG_REPORT | Detalle del informe | "all" |
TRIVY_CONFIG_INCLUDE_NON_FAILURES | Incluir pases | false |
TRIVY_MISCONFIG_SCANNERS | Lista de escáneres de misconfig | "azure-arm,cloudformation,dockerfile,helm,kubernetes,terraform" |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
TRIVY_SKIP_FILES | Archivos a omitir | "" |
TRIVY_SKIP_DIRS | Directorios a omitir | "" |
TRIVY_CONFIG_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_REPORT_BASENAME | Nombre base del artefacto | "iac-scan" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:license" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Referencia de imagen remota | "" |
TRIVY_SCAN_LOCAL_IMAGES | Ruta local tar/OCI o sistema de archivos | "" |
TRIVY_SCANNERS | Lista de escáneres | "license" |
severity | Severidades | "CRITICAL" |
exit_on_vulnerability | Fallar al coincidir severidad | true |
TRIVY_LICENSE_FULL | Habilitar --license-full | false |
TRIVY_LICENSE_CONFIDENCE | Umbral de confianza | "0.9" |
TRIVY_LICENSE_IGNORED | Licencias a ignorar | "" |
TRIVY_PKG_TYPES | Tipos de paquetes | "os,library" |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
TRIVY_EXTRA_ARGS | Argumentos adicionales | "" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:sbom:image" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_IMAGE | Referencia de imagen remota | "" |
TRIVY_SBOM_INPUT | Entrada local OCI/tar | "" |
TRIVY_SBOM_FORMAT | Formato SBOM | "cyclonedx" |
TRIVY_SBOM_FILENAME | Nombre de archivo de salida | "image-sbom.cdx.json" |
TRIVY_SBOM_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:sbom:repo" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | Ruta o URL Git remota | "." |
TRIVY_REPO_BRANCH | Rama | "" |
TRIVY_REPO_COMMIT | Hash de commit | "" |
TRIVY_REPO_TAG | Etiqueta | "" |
TRIVY_SBOM_FORMAT | Formato | "cyclonedx" |
TRIVY_SBOM_FILENAME | Nombre de archivo de salida | "repo-sbom.cdx.json" |
TRIVY_REPO_SCANNERS | Escáneres durante la creación del SBOM | "vuln,secret" |
TRIVY_REPO_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:sbom:kbom" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_TARGET | Objetivo trivy k8s (cluster, namespace/...) | "cluster" |
TRIVY_K8S_CONTEXT | Contexto de kubeconfig | "" |
TRIVY_K8S_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_SBOM_FILENAME | Nombre de archivo KBOM | "kbom.cdx.json" |
TRIVY_TIMEOUT | Tiempo de espera | "15m" |
scan_kbom | Ejecutar escaneo de vulnerabilidades en el KBOM generado | true |
TRIVY_SBOM_SCANNERS | Escáneres para el escaneo KBOM | "vuln" |
severity | Severidades para el escaneo KBOM | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar al encontrar hallazgos | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | Argumentos adicionales para el escaneo KBOM | "" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:sbom" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_PATH | Ruta al archivo SBOM | "artifacts/trivy/image-sbom.cdx.json" |
TRIVY_SBOM_REPORT_BASENAME | Nombre base de salida | "sbom-scan" |
TRIVY_SCANNERS | Escáneres a ejecutar | "vuln,license" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar al encontrar hallazgos | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | Argumentos adicionales | "" |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
allow_failure | Permitir fallo | false |
| Entrada | Descripción | Predeterminado |
|---|
job_name | Nombre del trabajo | "trivy:scan:rekor" |
stage | Etapa | "test" |
image | Imagen de Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Imagen remota atestiguada | "" |
TRIVY_REKOR_URL | Endpoint de la API de Rekor | "" |
TRIVY_SCANNERS | Escáneres | "vuln" |
severity | Severidades | "CRITICAL,HIGH" |
exit_on_vulnerability | Fallar al encontrar hallazgos | true |
TRIVY_IGNORE_UNFIXED | Ignorar sin corregir | true |
TRIVY_TIMEOUT | Tiempo de espera | "10m" |
TRIVY_EXTRA_ARGS | Argumentos adicionales | "" |
allow_failure | Permitir fallo | false |