
Führt Trivy als GitHub-Action aus, um Ihr Docker-Container-Image auf Schwachstellen zu scannen.
GitHub Action für 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'
### Scan der CI-Pipeline (mit Trivy-Konfiguration)```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
In diesem Fall ist trivy.yaml eine YAML-Konfiguration, die als Teil des Repos eingecheckt wird. Detaillierte Informationen sind auf der Trivy-Website verfügbar, aber ein Beispiel ist wie folgt:```yaml
format: json
exit-code: 1
severity: CRITICAL
secret:
config: config/trivy/secret.yaml
Es ist möglich, alle Optionen in der Datei `trivy.yaml` zu definieren. Die Angabe einzelner Optionen über die Action dient der Abwärtskompatibilität. Die folgenden Optionen müssen definiert werden, da sie nicht mit der Konfigurationsdatei definiert werden können:
- `scan-ref`: Wenn `fs, repo`-Scans verwendet werden.
- `image-ref`: Wenn ein `image`-Scan verwendet wird.
- `scan-type`: Zur Definition des Scan-Typs, z. B. `image`, `fs`, `repo` usw.
#### Reihenfolge der Priorität für Optionen
Trivy verwendet [Viper](https://github.com/spf13/viper), das eine definierte Prioritätsreihenfolge für Optionen hat. Die Reihenfolge ist wie folgt:
- GitHub-Action-Flag
- Umgebungsvariable
- Konfigurationsdatei
- Standard
### Cache
Die Action verfügt über eine integrierte Funktion zum Caching und Wiederherstellen von [der Schwachstellen-DB](https://github.com/aquasecurity/trivy-db), [der Java-DB](https://github.com/aquasecurity/trivy-java-db) und [dem Checks-Bundle](https://github.com/aquasecurity/trivy-checks), sofern diese während des Scans heruntergeladen werden.
Der Cache wird standardmäßig im Verzeichnis `$GITHUB_WORKSPACE/.cache/trivy` gespeichert.
Der Cache wird vor dem Start des Scans wiederhergestellt und nach Abschluss des Scans gespeichert.
Es verwendet [actions/cache](https://github.com/actions/cache) unter der Haube, erfordert jedoch weniger Konfigurationseinstellungen.
Der Cache-Input ist optional, und das Caching ist standardmäßig aktiviert.
#### Deaktivieren des Cachings
Wenn Sie das Caching deaktivieren möchten, setzen Sie den `cache`-Input auf `false`, aber wir empfehlen, es aktiviert zu lassen, um Rate-Limiting-Probleme zu vermeiden.```yaml
- name: Run Trivy scanner without cache
uses: aquasecurity/[email protected]
with:
scan-type: 'fs'
scan-ref: '.'
cache: 'false'
Bitte beachten Sie, dass es Einschränkungen für den Cache-Zugriff zwischen Branches in GitHub Actions gibt.
Standardmäßig kann ein Workflow auf einen Cache zugreifen und ihn wiederherstellen, der entweder im aktuellen Branch oder im Standard-Branch (normalerweise main oder master) erstellt wurde.
Wenn Sie Caches über Branches hinweg teilen müssen, müssen Sie möglicherweise einen Cache im Standard-Branch erstellen und ihn im aktuellen Branch wiederherstellen.
Um Ihren Workflow zu optimieren, können Sie einen Cron-Job einrichten, der den Cache im Standard-Branch regelmäßig aktualisiert. Dadurch können nachfolgende Scans die zwischengespeicherte DB verwenden, ohne sie erneut herunterzuladen.```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