
Компонент GitLab CI для сканирования Trivy
Компонент GitLab CI для Trivy — универсального сканера безопасности, охватывающего образы контейнеров, файловые системы, репозитории, кластеры Kubernetes, SBOM и лицензионную совместимость. Подключайте эти шаблоны напрямую в свои конвейеры, чтобы получать повторяемые сканирования, нативные отчёты GitLab и переносимые артефакты практически без написания 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
Каждый шаблон ниже перечисляет доступные входные данные и значения по умолчанию, определённые в спецификации компонента, а затем минимальный рабочий пример.
templates/main.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
include:
- component: $CI_SERVER_FQDN/niclas-zone/ci/trivy/target_rootfs@latest
inputs:
TRIVY_ROOTFS_PATH: "/mnt/root"
TRIVY_SCANNERS: "vuln"
templates/target_repository.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
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.ymlПример
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"
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания CI | "trivy scanning" |
stage | Стадия конвейера | "test" |
image | Образ контейнера, выполняющий Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_NEEDED_STAGE | Стадия, которая должна завершиться до запуска Trivy | "build" |
TRIVY_SCAN_REMOTE_IMAGE | Удалённый образ для сканирования | "" |
TRIVY_SCAN_LOCAL_IMAGES | Путь к tar/OCI входным данным (ищет в . при пустом значении) | "" |
TRIVY_SCANNERS | Разделённые запятыми сканеры | "vuln,secret,misconfig" |
severity | Включаемые уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать задание с ошибкой при обнаружении проблем | true |
TRIVY_EXTRA_ARGS | Дополнительные флаги CLI | "" |
allow_failure | Разрешить сбой задания без сбоя конвейера | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания CI | "trivy:scan:containers" |
stage | Стадия конвейера | "test" |
image | Образ контейнера Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Ссылка на удалённый образ | "" |
TRIVY_SCAN_LOCAL_IMAGES | Каталог/tar для локального сканирования | "" |
TRIVY_SCANNERS | Включённые сканеры | "vuln,secret,misconfig" |
TRIVY_IMAGE_SRC | Бэкенд источника образа (remote/docker/...) | "" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать с ошибкой при совпадении по серьёзности | true |
TRIVY_IGNORE_UNFIXED | Игнорировать проблемы без исправлений | true |
TRIVY_PKG_TYPES | Типы пакетов | "os,library" |
TRIVY_VULN_TYPE | Устаревший псевдоним для типов пакетов | "" |
TRIVY_TIMEOUT | Таймаут команды | "10m" |
TRIVY_EXTRA_ARGS | Дополнительные аргументы CLI | "" |
TRIVY_DB_REPOSITORY | Пользовательское зеркало БД | "" |
TRIVY_JAVA_DB_REPOSITORY | Пользовательское зеркало БД Java | "" |
TRIVY_SKIP_FILES | Исключения файлов по шаблону | "" |
TRIVY_SKIP_DIRS | Исключения каталогов | "" |
allow_failure | Разрешить сбой без сбоя конвейера | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания CI | "trivy:scan:filesystem" |
stage | Стадия конвейера | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_FS_PATH | Файл или каталог для сканирования | "." |
TRIVY_SCANNERS | Включённые сканеры | "vuln,secret" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать с ошибкой при совпадении по серьёзности | true |
TRIVY_IGNORE_UNFIXED | Игнорировать неисправленные проблемы | true |
TRIVY_PKG_TYPES | Типы пакетов | "os,library" |
TRIVY_TIMEOUT | Таймаут | "10m" |
TRIVY_SKIP_FILES | Шаблоны файлов для пропуска | "" |
TRIVY_SKIP_DIRS | Каталоги для пропуска | "" |
TRIVY_EXTRA_ARGS | Дополнительные аргументы CLI | "" |
TRIVY_REPORT_BASENAME | Базовое имя артефакта | "filesystem-scan" |
allow_failure | Разрешить сбой задания | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:rootfs" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_ROOTFS_PATH | Путь к корневой файловой системе | "/" |
TRIVY_SCANNERS | Сканеры | "vuln,secret" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать задание при обнаружении | true |
TRIVY_IGNORE_UNFIXED | Игнорировать неисправленные | true |
TRIVY_PKG_TYPES | Типы пакетов | "os,library" |
TRIVY_TIMEOUT | Таймаут | "10m" |
TRIVY_SKIP_FILES | Файлы для пропуска | "" |
TRIVY_SKIP_DIRS | Каталоги для пропуска | "" |
TRIVY_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_REPORT_BASENAME | Базовое имя артефакта | "rootfs-scan" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:repo" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | Локальный путь или Git URL | "." |
TRIVY_REPO_BRANCH | Удалённая ветка | "" |
TRIVY_REPO_COMMIT | Хэш коммита | "" |
TRIVY_REPO_TAG | Имя тега | "" |
TRIVY_SCANNERS | Сканеры | "vuln,secret" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать задание при обнаружении | true |
TRIVY_IGNORE_UNFIXED | Игнорировать неисправленные | true |
TRIVY_TIMEOUT | Таймаут | "10m" |
TRIVY_SKIP_FILES | Файлы для пропуска | "" |
TRIVY_SKIP_DIRS | Каталоги для пропуска | "" |
TRIVY_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_REPORT_BASENAME | Базовое имя артефакта | "repo-scan" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:vm" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_VM_TARGET | Локальный путь или идентификатор ami:/ebs: | "" |
TRIVY_AWS_REGION | Регион AWS для сканирования AMI/EBS | "" |
TRIVY_SCANNERS | Сканеры | "vuln" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать задание при обнаружении | true |
TRIVY_IGNORE_UNFIXED | Игнорировать неисправленные | true |
TRIVY_TIMEOUT | Таймаут | "20m" |
TRIVY_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_REPORT_BASENAME | Базовое имя артефакта | "vm-scan" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:k8s" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_OBJECT | Область (cluster, namespace/foo и т.д.) | "" |
TRIVY_K8S_REPORT | Детализация отчёта (summary/all) | "summary" |
TRIVY_K8S_KUBECONFIG | Пользовательский путь kubeconfig | "" |
TRIVY_K8S_INCLUDE_NAMESPACES | Включаемые пространства имён | "" |
TRIVY_K8S_EXCLUDE_NAMESPACES | Исключаемые пространства имён | "" |
TRIVY_K8S_INCLUDE_KINDS | Включаемые виды | "" |
TRIVY_K8S_EXCLUDE_KINDS | Исключаемые виды | "" |
TRIVY_K8S_SKIP_IMAGES | Пропускать сканирование образов рабочих нагрузок | false |
TRIVY_K8S_DISABLE_NODE_COLLECTOR | Отключить сборщик узлов | false |
TRIVY_SCANNERS | Сканеры | "vuln,misconfig,secret" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать задание при обнаружении | true |
TRIVY_IGNORE_UNFIXED | Игнорировать неисправленные | true |
TRIVY_TIMEOUT | Таймаут | "15m" |
TRIVY_K8S_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_REPORT_BASENAME | Базовое имя артефакта | "k8s-scan" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:iac" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_CONFIG_PATH | Каталог IaC | "." |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать при обнаружении | true |
TRIVY_CONFIG_REPORT | Детализация отчёта | "all" |
TRIVY_CONFIG_INCLUDE_NON_FAILURES | Включать прошедшие проверки | false |
TRIVY_MISCONFIG_SCANNERS | Список сканеров конфигураций | "azure-arm,cloudformation,dockerfile,helm,kubernetes,terraform" |
TRIVY_TIMEOUT | Таймаут | "10m" |
TRIVY_SKIP_FILES | Файлы для пропуска | "" |
TRIVY_SKIP_DIRS | Каталоги для пропуска | "" |
TRIVY_CONFIG_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_REPORT_BASENAME | Базовое имя артефакта | "iac-scan" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:license" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Ссылка на удалённый образ | "" |
TRIVY_SCAN_LOCAL_IMAGES | Локальный tar/OCI или путь файловой системы | "" |
TRIVY_SCANNERS | Список сканеров | "license" |
severity | Уровни серьёзности | "CRITICAL" |
exit_on_vulnerability | Завершать при совпадении по серьёзности | true |
TRIVY_LICENSE_FULL | Включить --license-full | false |
TRIVY_LICENSE_CONFIDENCE | Порог уверенности | "0.9" |
TRIVY_LICENSE_IGNORED | Игнорируемые лицензии | "" |
TRIVY_PKG_TYPES | Типы пакетов | "os,library" |
TRIVY_TIMEOUT | Таймаут | "10m" |
TRIVY_EXTRA_ARGS | Дополнительные аргументы | "" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:sbom:image" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_IMAGE | Ссылка на удалённый образ | "" |
TRIVY_SBOM_INPUT | Локальный OCI/tar вход | "" |
TRIVY_SBOM_FORMAT | Формат SBOM | "cyclonedx" |
TRIVY_SBOM_FILENAME | Имя выходного файла | "image-sbom.cdx.json" |
TRIVY_SBOM_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_TIMEOUT | Таймаут | "10m" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:sbom:repo" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_REPO_TARGET | Путь или удалённый Git URL | "." |
TRIVY_REPO_BRANCH | Ветка | "" |
TRIVY_REPO_COMMIT | Хэш коммита | "" |
TRIVY_REPO_TAG | Тег | "" |
TRIVY_SBOM_FORMAT | Формат | "cyclonedx" |
TRIVY_SBOM_FILENAME | Имя выходного файла | "repo-sbom.cdx.json" |
TRIVY_REPO_SCANNERS | Сканеры при создании SBOM | "vuln,secret" |
TRIVY_REPO_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_TIMEOUT | Таймаут | "10m" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:sbom:kbom" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_K8S_TARGET | Цель trivy k8s (cluster, namespace/...) | "cluster" |
TRIVY_K8S_CONTEXT | Контекст kubeconfig | "" |
TRIVY_K8S_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_SBOM_FILENAME | Имя файла KBOM | "kbom.cdx.json" |
TRIVY_TIMEOUT | Таймаут | "15m" |
scan_kbom | Выполнить сканирование уязвимостей на сгенерированном KBOM | true |
TRIVY_SBOM_SCANNERS | Сканеры для сканирования KBOM | "vuln" |
severity | Уровни серьёзности для сканирования KBOM | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать при обнаружении | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | Дополнительные аргументы для сканирования KBOM | "" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:sbom" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SBOM_PATH | Путь к файлу SBOM | "artifacts/trivy/image-sbom.cdx.json" |
TRIVY_SBOM_REPORT_BASENAME | Базовое имя выходного файла | "sbom-scan" |
TRIVY_SCANNERS | Выполняемые сканеры | "vuln,license" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать при обнаружении | true |
TRIVY_SBOM_SCAN_EXTRA_ARGS | Дополнительные аргументы | "" |
TRIVY_TIMEOUT | Таймаут | "10m" |
allow_failure | Разрешить сбой | false |
| Входные данные | Описание | По умолчанию |
|---|
job_name | Имя задания | "trivy:scan:rekor" |
stage | Стадия | "test" |
image | Образ Trivy | "ghcr.io/aquasecurity/trivy:0.68.1" |
TRIVY_SCAN_REMOTE_IMAGE | Аттестованный удалённый образ | "" |
TRIVY_REKOR_URL | Endpoint Rekor API | "" |
TRIVY_SCANNERS | Сканеры | "vuln" |
severity | Уровни серьёзности | "CRITICAL,HIGH" |
exit_on_vulnerability | Завершать при обнаружении | true |
TRIVY_IGNORE_UNFIXED | Игнорировать неисправленные | true |
TRIVY_TIMEOUT | Таймаут | "10m" |
TRIVY_EXTRA_ARGS | Дополнительные аргументы | "" |
allow_failure | Разрешить сбой | false |