Trivy (Aqua Security) là một binary duy nhất, tải DB lỗ hổng lần đầu chạy và cache tại ~/.cache/trivy. Bối cảnh vì sao cần quét: Bảo mật container.
Target
| Mục đích | Lệnh |
|---|---|
| Quét image (từ registry hoặc local) | trivy image nginx:1.27 |
Quét image dạng tar (docker save) |
trivy image --input app.tar |
| Quét thư mục code (lockfile, secret) | trivy fs . |
| Quét IaC: Dockerfile, K8s YAML, Terraform, Helm | trivy config ./deploy |
| Quét repo Git từ xa | trivy repo https://github.com/example/app |
| Quét file SBOM có sẵn | trivy sbom sbom.cdx.json |
| Quét rootfs (VM, container đã giải nén) | trivy rootfs /mnt/rootfs |
Scanner và lọc
| Mục đích | Lệnh |
|---|---|
| Chọn loại quét | trivy image --scanners vuln,secret,misconfig <image> |
| Chỉ HIGH và CRITICAL | trivy image --severity HIGH,CRITICAL <image> |
| Bỏ CVE chưa có bản vá | trivy image --ignore-unfixed <image> |
| Chỉ quét package OS hoặc thư viện app | trivy image --pkg-types os <image> (hoặc library) |
| Bỏ qua thư mục/file | trivy fs --skip-dirs node_modules --skip-files test/fixture.pem . |
| Liệt kê mọi package (kể cả không có CVE) | trivy image --list-all-pkgs -f json <image> |
Output
| Mục đích | Lệnh |
|---|---|
| JSON để xử lý tiếp | trivy image -f json -o result.json <image> |
| SARIF cho GitHub code scanning | trivy fs -f sarif -o trivy.sarif . |
| Sinh SBOM CycloneDX / SPDX | trivy image -f cyclonedx -o sbom.cdx.json <image> (hoặc -f spdx-json) |
| Đếm CVE CRITICAL bằng jq | jq '[.Results[]?.Vulnerabilities[]? | select(.Severity=="CRITICAL")] | length' result.json |
Bỏ qua có kiểm soát
# CVE không ảnh hưởng: hàm lỗi không được gọi. Review lại 2027-01
CVE-2024-12345
# Misconfig chấp nhận được
AVD-DS-0026| Mục đích | Lệnh |
|---|---|
| Dùng file ignore khác | trivy image --ignorefile ci/.trivyignore <image> |
| Ghi chú lý do ngay trong file | mỗi CVE một dòng, comment bằng # phía trên |
CI
| Mục đích | Lệnh |
|---|---|
| Fail pipeline khi có CRITICAL đã có bản vá | trivy image --exit-code 1 --severity CRITICAL --ignore-unfixed <image> |
| Báo cáo đầy đủ nhưng không fail | trivy image --exit-code 0 <image> |
| Tăng timeout image lớn | --timeout 15m |
| Cache DB giữa các job | cache thư mục --cache-dir .trivycache |
| Chạy bằng container | docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image <image> |
- uses: aquasecurity/trivy-action@<version> # pin tag hoặc SHA cụ thể
with:
image-ref: registry.example.com/api:${{ github.sha }}
severity: CRITICAL,HIGH
ignore-unfixed: true
exit-code: "1"Hai lệnh hay dùng: chạy --exit-code 1 --severity CRITICAL để chặn merge, và một lệnh đầy đủ xuất SARIF/JSON để theo dõi. Chặn ở mức HIGH ngay từ đầu thường làm pipeline đỏ liên tục và bị tắt luôn.
Mount docker.sock vào container trivy là trao quyền root host cho container đó; chỉ làm trên runner tin cậy, hoặc quét file tar bằng --input.