Tools

Trivy: quét lỗ hổng, cấu hình sai và secret cho image, code, IaC và Kubernetes

Tóm tắt

Trivy là một CLI quét lỗ hổng, cấu hình sai, secret và tạo SBOM. Trong CI dùng --severity CRITICAL --ignore-unfixed --exit-code 1, ghi ngoại lệ vào .trivyignore kèm lý do, xuất SBOM bằng --format cyclonedx.

Một image Docker "chạy ngon" có thể chứa hệ điều hành nền với hàng chục lỗ hổng đã biết, thư viện npm hay pip có CVE, file Terraform mở cổng ra Internet, và cả secret bị bỏ quên. Mỗi loại thường cần một công cụ riêng. Trivy của Aqua Security gom chúng vào một CLI: quét lỗ hổng, cấu hình sai, secret và tạo SBOM cho image container, thư mục code, repo git, file hạ tầng như code (IaC) và cả cluster Kubernetes.

Trang GitHub của aquasecurity/trivy
Trang GitHub của aquasecurity/trivy (ảnh chụp tháng 11/2026)

GitHub: https://github.com/aquasecurity/trivy · khoảng 39 nghìn sao · Go · Apache-2.0

Cài đặt

brew install trivy
# Hoặc chạy bằng Docker
docker run --rm aquasec/trivy image python:3.12-alpine

Lần chạy đầu, Trivy tải cơ sở dữ liệu lỗ hổng về máy; các lần sau chỉ cập nhật.

Các mục tiêu quét

LệnhQuétVí dụ
trivy imageImage container (gói hệ điều hành + thư viện ứng dụng)trivy image myapp:1.4
trivy fsThư mục code: lock file, secret, cấu hìnhtrivy fs --scanners vuln,secret,misconfig .
trivy repoRepo git từ xatrivy repo https://github.com/org/app
trivy configTerraform, Dockerfile, Kubernetes YAML, Helm…trivy config ./infra
trivy k8sCluster Kubernetes đang chạytrivy k8s --report summary cluster

Lọc kết quả cho hữu ích

Image thông thường có thể báo hàng trăm lỗ hổng, đa phần mức thấp hoặc chưa có bản vá. Lọc lại để tập trung:

# Chỉ HIGH và CRITICAL, bỏ lỗ hổng chưa có bản sửa
trivy image --severity HIGH,CRITICAL --ignore-unfixed myapp:1.4

# Dùng trong CI: thất bại nếu còn lỗ hổng nghiêm trọng
trivy image --severity CRITICAL --ignore-unfixed --exit-code 1 myapp:1.4

# Bỏ qua CVE đã đánh giá là không ảnh hưởng: ghi mã CVE vào file .trivyignore
echo "CVE-2023-12345" >> .trivyignore

Định dạng đầu ra

  • --format table (mặc định): đọc trên terminal.
  • --format json: xử lý bằng script, jq.
  • --format sarif: tải lên tab Security của GitHub (code scanning).
  • --format cyclonedx hoặc spdx-json: tạo SBOM, danh mục thành phần phần mềm, ví dụ trivy image --format cyclonedx -o sbom.json myapp:1.4.

Lưu ý

  • Không phải CVE nào cũng khai thác được trong bối cảnh của bạn; dùng .trivyignore kèm ghi chú lý do, và xem lại định kỳ.
  • Cách giảm lỗ hổng hiệu quả nhất thường là đổi image nền nhỏ hơn (slim, distroless) và cập nhật thường xuyên, không phải sửa từng CVE.
  • Trong CI, cache cơ sở dữ liệu lỗ hổng để tránh tải lại mỗi lần chạy.
  • Kết quả quét chỉ đúng tại thời điểm quét; CVE mới xuất hiện hằng ngày, nên quét lại image đang chạy theo lịch.

Áp dụng thế nào?

  • Dev: Chạy trivy fs . trước khi mở PR để thấy thư viện có lỗ hổng và secret lỡ để lại.
  • Tech Lead/DevOps: Thêm bước trivy image --exit-code 1 --severity CRITICAL sau khi build image trong CI; quét trivy config cho thư mục Terraform/Kubernetes; lưu SBOM cho mỗi bản phát hành.
  • PM: SBOM và báo cáo quét đang dần trở thành yêu cầu của khách hàng doanh nghiệp và quy định; Trivy giúp có chúng mà không tốn chi phí công cụ.

Nguồn & tham khảo

  1. aquasecurity/trivy — aquasecurity (GitHub)
  2. Trivy documentation — aquasecurity