2. Trivy 基础:简介、安装方式与基本扫描命令

2.1 Trivy 简介

Trivy(Trident Vulnerability Scanner)是由 Aqua Security 开源的全方位容器安全扫描工具。它采用“一次扫描,全面覆盖”的设计理念,能够检测容器镜像、文件系统、Git 仓库、Kubernetes 集群等多种目标中的安全风险。

核心能力:Trivy 内置了 CVE 数据库、IaC 误配置规则、密钥检测引擎和 SBOM 生成器,无需额外配置即可开箱即用。
特性 说明
扫描类型 容器镜像、文件系统、Git 仓库、Kubernetes、AWS/Azure/GCP
漏洞数据库 NVD、Red Hat、Debian、Ubuntu、Alpine、Amazon Linux 等
误配置检测 Dockerfile、Kubernetes YAML、Terraform、CloudFormation
密钥扫描 、密码、令牌、私钥等 700+ 种模式
SBOM 支持 生成 CycloneDX / SPDX 格式的软件物料清单
输出格式 Table、JSON、SARIF、HTML、CycloneDX、SPDX
为什么选择 Trivy? 在镜像供应链安全场景中,Trivy 的轻量级(单二进制)、快速更新(每小时同步 CVE)、以及丰富的 CI/CD 集成能力,使其成为扫描队列与仓库配额管理的首选工具。
Trivy 扫描架构与数据流 输入目标 容器镜像 文件系统 Git 仓库 / K8s Trivy 扫描引擎 漏洞匹配器 误配置检测器 密钥扫描器 扫描结果 Table / JSON / SARIF HTML / CycloneDX SPDX CVE 数据库 每小时自动同步 NVD / Red Hat / Debian 等 CI/CD 集成:Jenkins / GitLab CI / GitHub Actions / Argo Workflows

2.2 安装方式

Trivy 支持多种安装方式,适应不同环境需求。以下列出三种最常用的安装方法:

2.2.1 二进制安装(Linux / macOS)

# Linux (amd64)
wget https://github.com/aquasecurity/trivy/releases/download/v0.50.1/trivy_0.50.1_Linux-64bit.tar.gz
tar zxvf trivy_0.50.1_Linux-64bit.tar.gz
sudo mv trivy /usr/local/bin/

# macOS (Homebrew)
brew install aquasecurity/trivy/trivy

# 验证安装
trivy --version

2.2.2 容器方式运行

# 直接使用 Docker 运行
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  aquasec/trivy:0.50.1 image nginx:1.25

# 持久化缓存目录(推荐)
docker run --rm \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $HOME/.trivy/cache:/root/.trivy/cache \
  aquasec/trivy:0.50.1 image alpine:3.19
注意:容器方式运行时,必须挂载 Docker socket 才能扫描本地镜像。生产环境中建议使用 --cache-dir 持久化漏洞数据库,避免每次启动都重新下载。

2.2.3 Helm 安装(Kubernetes 环境)

# 添加 Helm 仓库
helm repo add aquasecurity https://aquasecurity.github.io/helm-charts
helm repo update

# 安装 Trivy-Operator(集群扫描)
helm upgrade --install trivy-operator aquasecurity/trivy-operator \
  --namespace trivy-system \
  --create-namespace \
  --set="trivy.ignoreUnfixed=true"

# 验证 Pod 状态
kubectl get pods -n trivy-system
安装方式 适用场景 优势 局限
二进制 CI/CD 节点、本地开发 单文件、无依赖、启动快 需手动更新版本
容器 容器化 CI/CD、临时扫描 环境隔离、版本管理方便 需挂载 Docker socket
Helm Kubernetes 集群持续扫描 自动发现工作负载、策略集成 资源占用较高

2.3 基本扫描命令与输出格式

2.3.1 常用扫描命令

# 1. 扫描容器镜像(默认输出表格)
trivy image nginx:1.25

# 2. 扫描文件系统
trivy fs ./my-project/

# 3. 扫描 Git 仓库
trivy repo https://github.com/org/repo.git

# 4. 扫描 Kubernetes 资源
trivy k8s --namespace=production deployment/my-app

# 5. 仅扫描严重和高危漏洞
trivy image --severity CRITICAL,HIGH alpine:3.19

# 6. 忽略已修复的漏洞
trivy image --ignore-unfixed nginx:1.25

2.3.2 输出格式详解

Trivy 支持多种输出格式,满足不同消费端需求:

# Table 格式(默认,适合终端查看)
trivy image alpine:3.19

# JSON 格式(适合程序解析)
trivy image --format json alpine:3.19

# SARIF 格式(适合 GitHub / Azure DevOps 集成)
trivy image --format sarif alpine:3.19

# HTML 报告(适合审计归档)
trivy image --format html --output report.html alpine:3.19

# CycloneDX SBOM(生成软件物料清单)
trivy image --format cyclonedx alpine:3.19

# SPDX SBOM
trivy image --format spdx alpine:3.19
Trivy 输出格式选择决策 Trivy 扫描结果 消费端是谁? 人类 阅读 Table / HTML 程序 解析 JSON / SARIF SBOM 审计 CycloneDX / SPDX 建议:CI/CD 流水线使用 JSON 或 SARIF;审计归档使用 HTML;供应链共享使用 CycloneDX

2.4 扫描队列与仓库配额场景中的 Trivy 定位

在本课程后续章节中,Trivy 将作为扫描队列的核心执行引擎。理解其基础能力有助于后续配置:

  • 扫描队列调度:Trivy 的轻量级特性使其适合在队列中并行执行,每个扫描任务对应一个 Trivy 进程。
  • 仓库配额管理:通过 Trivy 的 --severity 和 --ignore-unfixed 参数,可以过滤出真正需要关注的漏洞,避免配额浪费。
  • 结果持久化:JSON 输出格式便于将扫描结果存入数据库,用于后续的容量水位分析和趋势预测。
实践建议:在部署扫描队列前,先在本地用 trivy image --format json 测试目标镜像,确认扫描时间和结果结构,以便合理设置队列超时和配额阈值。