
Ejecuta Trivy como acción de GitHub para escanear tu imagen de contenedor Docker en busca de vulnerabilidades
GitHub Action para 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'
### Pipeline de CI de Escaneo (con Configuración de Trivy)```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
En este caso, trivy.yaml es una configuración YAML que se incluye como parte del repositorio. Hay información detallada disponible en el sitio web de Trivy, pero un ejemplo es el siguiente:```yaml
format: json
exit-code: 1
severity: CRITICAL
secret:
config: config/trivy/secret.yaml
Es posible definir todas las opciones en el archivo `trivy.yaml`. Especificar opciones individuales a través de la acción se conserva por motivos de compatibilidad hacia atrás. Es necesario definir lo siguiente, ya que no se puede definir con el archivo de configuración:
- `scan-ref`: Si se utilizan escaneos `fs, repo`.
- `image-ref`: Si se utiliza el escaneo `image`.
- `scan-type`: Para definir el tipo de escaneo, p. ej. `image`, `fs`, `repo`, etc.
#### Orden de preferencia para las opciones
Trivy utiliza [Viper](https://github.com/spf13/viper), que tiene un orden de precedencia definido para las opciones. El orden es el siguiente:
- Flag de GitHub Action
- Variable de entorno
- Archivo de configuración
- Predeterminado
### Caché
La acción tiene una funcionalidad integrada para almacenar en caché y restaurar [la base de datos de vulnerabilidades](https://github.com/aquasecurity/trivy-db), [la base de datos de Java](https://github.com/aquasecurity/trivy-java-db) y [el paquete de comprobaciones](https://github.com/aquasecurity/trivy-checks) si se descargan durante el escaneo.
La caché se almacena en el directorio `$GITHUB_WORKSPACE/.cache/trivy` de forma predeterminada.
La caché se restaura antes de que comience el escaneo y se guarda después de que finalice.
Utiliza [actions/cache](https://github.com/actions/cache) internamente, pero requiere menos ajustes de configuración.
La entrada `cache` es opcional y el almacenamiento en caché está activado de forma predeterminada.
#### Desactivar el almacenamiento en caché
Si desea desactivar el almacenamiento en caché, establezca la entrada `cache` en `false`, pero recomendamos mantenerlo habilitado para evitar problemas de limitación de velocidad.```yaml
- name: Run Trivy scanner without cache
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
cache: 'false'
Ten en cuenta que existen restricciones de acceso a la caché entre ramas en GitHub Actions.
Por defecto, un flujo de trabajo puede acceder y restaurar una caché creada en la rama actual o en la rama predeterminada (normalmente main o master).
Si necesitas compartir cachés entre ramas, es posible que tengas que crear una caché en la rama predeterminada y restaurarla en la rama actual.
Para optimizar tu flujo de trabajo, puedes configurar un trabajo cron para actualizar periódicamente la caché en la rama predeterminada. Esto permite que los escaneos posteriores utilicen la base de datos en caché sin tener que descargarla de nuevo.```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 }}
Al ejecutar un escaneo, establece las variables de entorno `TRIVY_SKIP_DB_UPDATE` y `TRIVY_SKIP_JAVA_DB_UPDATE` para omitir el proceso de descarga.```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
Por defecto, la acción llama a aquasecurity/setup-trivy como primer paso
que instala la versión de trivy especificada por la entrada version. Si ya has instalado trivy por otros
medios, por ejemplo llamando a aquasecurity/setup-trivy directamente, o si invocas esta acción varias veces, puedes usar la entrada
skip-setup-trivy para desactivar este paso.