Sổ tay kỹ thuật

Trivy – quét image, filesystem, IaC, repo

cheatsheet#trivy#docker#security#ci· cập nhật 2026-11-06

Tra nhanh lệnh trivy để quét CVE, secret và misconfiguration trong image, thư mục code, Dockerfile/Kubernetes/Terraform và gắn vào CI.

Sửa trang này
Mục lục

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

.trivyignore
# 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>
.github/workflows/scan.yml (trích)
- 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.