概念介绍:Trivy 是什么,解决什么问题
概念介绍:Trivy 是什么,解决什么问题
Trivy 是 Aqua Security 开源的制品安全扫描器,用 Go 写成,编译后是一个静态二进制文件。它把「这个镜像/这个仓库/这套 IaC 里有没有已知漏洞、有没有写死的密钥、配置有没有踩坑」这几件事收进同一套命令行里完成。名字来自 trivial 与 tri 的组合,官方定位是 all-in-one scanner:一次安装,覆盖 OS 包、语言依赖、IaC 配置、密钥、SBOM 生成与复用五类目标。
它解决的问题很具体。传统镜像扫描器大多要求先跑一个常驻服务(daemon),再通过 API 或客户端提交镜像;运维要额外维护一个服务、一个数据库、一套升级流程。Trivy 把这层全部去掉:trivy image nginx:latest 一条命令就能出结果,扫完就退出,不占端口、不留进程。对于「在 CI 里跑一次、拿退出码卡门禁」这种最常见的用法,无 daemon 是决定性的优势——CI runner 是临时的,没有地方常驻服务。
第二个问题是覆盖面碎片化。过去要查容器漏洞装一个工具、查 Terraform 配置装另一个、查密钥再装第三个,三套规则三套输出格式。Trivy 用 --scanners 参数切换扫描器,输出格式统一,可以把漏洞、配置问题、密钥泄露写进同一份报告里。
与 Clair、Grype、Snyk、Docker Scout、Anchore 的区别
| 工具 | 形态 | 覆盖范围 | 适合场景 |
|---|---|---|---|
| Trivy | 单二进制,无常驻进程 | OS 包、语言依赖、IaC、密钥、SBOM、K8s、云账号 | CI 门禁、离线内网、多目标统一扫描 |
| Clair | 服务 + API + 数据库,需常驻 | 基本只做容器镜像的 OS 包 | 已有镜像仓库(如 Harbor)内嵌扫描后端 |
| Grype(Anchore) | 单二进制,配 Syft 生成 SBOM | 镜像与文件系统,语言依赖覆盖好 | 已有 SBOM 流水线,只补漏洞比对环节 |
| Snyk | 商业 SaaS,有 CLI 与 IDE 插件 | 依赖、容器、IaC、代码,修复建议强 | 团队愿意付费换更细的修复指引与看板 |
| Docker Scout | Docker 官方,偏 SaaS | 镜像与 Dockerfile 层 | 已经全量使用 Docker Hub / Docker Desktop 的团队 |
| Anchore Engine | 服务化平台 | 镜像与 SBOM,策略引擎强 | 需要集中式策略中心的企业 |
选型时的经验判断:如果目标是「CI 里跑一条命令,非零退出码就挡下构建」,Trivy 的接入成本最低;如果组织已经有一个集中式的镜像仓库要挂扫描后端,Clair 更省事;如果已经产出 SBOM、只想要漏洞比对,Grype 更轻。Trivy 的代价是首次运行必须下载漏洞库,在网络受限的环境里这一步往往是最容易出问题的地方,后文会专门讲。
核心术语表
| 术语 | 含义 |
|---|---|
| CVE | Common Vulnerabilities and Exposures,公开漏洞的统一编号,形如 CVE-2021-44228 |
| CVSS | 漏洞严重程度的评分体系,给出 0.0 到 10.0 的分数 |
| Severity | Trivy 报告里的分级字段:CRITICAL / HIGH / MEDIUM / LOW / UNKNOWN |
| Fixed Version | 上游发布补丁的版本号。字段为空表示「尚无修复版本」,这类漏洞短期内无法靠升级消除 |
| VEX | Vulnerability Exploitability eXchange,用机器可读的方式声明「这个漏洞在我的产品里不受影响」,Trivy 支持读取 OpenVEX 文档 |
| SBOM | Software Bill of Materials,软件物料清单,列出制品里所有组件及版本 |
| SPDX / CycloneDX | 两种主流的 SBOM 标准格式,Trivy 都能输出 |
| misconfiguration | 配置错误,例如 Dockerfile 里用 root 跑、K8s 没设 resource limit、Terraform 安全组开成 0.0.0.0/0 |
| secret scanning | 扫描代码与镜像层里写死的密码、token、私钥 |
| DB / JavaDB | Trivy 下载的两份数据:漏洞库(trivy-db)与 Java 依赖索引(trivy-java-db),Java 生态需要后者才能定位坐标 |

