
Запускает Trivy как действие GitHub для сканирования вашего образа Docker контейнера на уязвимости
GitHub Action для Trivy
[![GitHub Release][release-img]][release] [![GitHub Marketplace][marketplace-img]][marketplace] [![License][license-img]][license]

name: build on: push: branches: - main pull_request: jobs: build: name: Build runs-on: ubuntu-24.04 steps: - name: Checkout code uses: actions/checkout@v4 - name: Build an image from Dockerfile run: docker build -t docker.io/my-organization/my-app:${{ github.sha }} . - name: Run Trivy vulnerability scanner uses: aquasecurity/[email protected] with: image-ref: 'docker.io/my-organization/my-app:${{ github.sha }}' format: 'table' exit-code: '1' ignore-unfixed: true vuln-type: 'os,library' severity: 'CRITICAL,HIGH'
### Сканирование CI конвейера (с Trivy Config)```yaml
name: build
on:
push:
branches:
- main
pull_request:
jobs:
build:
name: Build
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Trivy vulnerability scanner in fs mode
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
trivy-config: trivy.yaml
В данном случае trivy.yaml — это YAML-конфигурация, которая включена в состав репозитория. Подробная информация доступна на сайте Trivy, но пример выглядит следующим образом:```yaml
format: json
exit-code: 1
severity: CRITICAL
secret:
config: config/trivy/secret.yaml
Все параметры можно определить в файле `trivy.yaml`. Указание отдельных параметров через action оставлено для обратной совместимости. Определение следующих параметров обязательно, так как их нельзя задать через файл конфигурации:
- `scan-ref`: Если используется сканирование `fs, repo`.
- `image-ref`: Если используется сканирование `image`.
- `scan-type`: Для определения типа сканирования, например `image`, `fs`, `repo` и т.д.
#### Порядок приоритета параметров
Trivy использует [Viper](https://github.com/spf13/viper), который имеет определённый порядок приоритета для параметров. Порядок следующий:
- Флаг GitHub Action
- Переменная окружения
- Файл конфигурации
- По умолчанию
### Кеш
Действие имеет встроенную функциональность для кеширования и восстановления [базы данных уязвимостей](https://github.com/aquasecurity/trivy-db), [базы данных Java](https://github.com/aquasecurity/trivy-java-db) и [набора проверок](https://github.com/aquasecurity/trivy-checks), если они загружаются во время сканирования.
Кеш по умолчанию хранится в каталоге `$GITHUB_WORKSPACE/.cache/trivy`.
Кеш восстанавливается перед началом сканирования и сохраняется после его завершения.
Под капотом используется [actions/cache](https://github.com/actions/cache), но требуется меньше настроек конфигурации.
Параметр `cache` является необязательным, и кеширование включено по умолчанию.
#### Отключение кеширования
Если вы хотите отключить кеширование, установите входной параметр `cache` в `false`, но мы рекомендуем оставить его включённым, чтобы избежать проблем с ограничением частоты запросов.```yaml
- name: Run Trivy scanner without cache
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
cache: 'false'
Обратите внимание, что в GitHub Actions существуют ограничения на доступ к кэшу между ветками.
По умолчанию рабочий процесс может получить доступ и восстановить кэш, созданный либо в текущей ветке, либо в ветке по умолчанию (обычно main или master).
Если вам нужно делиться кэшами между ветками, вам может потребоваться создать кэш в ветке по умолчанию и восстановить его в текущей ветке.
Чтобы оптимизировать рабочий процесс, вы можете настроить задачу cron для регулярного обновления кэша в ветке по умолчанию. Это позволит последующим сканированиям использовать кэшированную базу данных без повторной загрузки.```yaml
name: Update Trivy Cache
on: schedule: - cron: '0 0 * * *' # Run daily at midnight UTC workflow_dispatch: # Allow manual triggering
jobs: update-trivy-db: runs-on: ubuntu-latest steps: - name: Setup oras uses: oras-project/setup-oras@v1
- name: Get current date
id: date
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Download and extract the vulnerability DB
run: |
mkdir -p $GITHUB_WORKSPACE/.cache/trivy/db
oras pull ghcr.io/aquasecurity/trivy-db:2
tar -xzf db.tar.gz -C $GITHUB_WORKSPACE/.cache/trivy/db
rm db.tar.gz
- name: Download and extract the Java DB
run: |
mkdir -p $GITHUB_WORKSPACE/.cache/trivy/java-db
oras pull ghcr.io/aquasecurity/trivy-java-db:1
tar -xzf javadb.tar.gz -C $GITHUB_WORKSPACE/.cache/trivy/java-db
rm javadb.tar.gz
- name: Cache DBs
uses: actions/cache/save@v4
with:
path: ${{ github.workspace }}/.cache/trivy
key: cache-trivy-${{ steps.date.outputs.date }}
При запуске сканирования установите переменные окружения `TRIVY_SKIP_DB_UPDATE` и `TRIVY_SKIP_JAVA_DB_UPDATE`, чтобы пропустить процесс загрузки.```yaml
- name: Run Trivy scanner without downloading DBs
uses: aquasecurity/[email protected]
with:
scan-type: 'image'
scan-ref: 'myimage'
env:
TRIVY_SKIP_DB_UPDATE: true
TRIVY_SKIP_JAVA_DB_UPDATE: true
По умолчанию действие вызывает aquasecurity/setup-trivy в качестве первого шага,
который устанавливает версию trivy, указанную во входном параметре version. Если вы уже установили trivy другим способом,
например, вызвав aquasecurity/setup-trivy напрямую, или запускаете это действие несколько раз, вы можете использовать
входной параметр skip-setup-trivy, чтобы отключить этот шаг.