如何使用 Trivy 实现漏洞扫描自动化
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
人工扫描发现的是昨天的风险,自动扫描则保护的是明天的发布。
目录
- 介绍
- Trivy是什么?
- 为什么漏洞扫描很重要
- Trivy 的主要特点
- 安装和设置 Trivy
- 如何运行手动扫描
- 在 CI/CD 流水线中自动化漏洞扫描
- 将 Trivy 与 Docker 和 Kubernetes 集成
- 有趣的事实和统计数据
- 常见问题解答
- 要点总结
- 结论
介绍
随着 DevOps 和安全融合为 DevSecOps,自动化成为确保安全快速软件交付的关键。Trivy 就是这样一款不可或缺的工具。它是一款开源漏洞扫描器,能够检测容器镜像、文件系统、IaC(基础设施即代码)模板等中的安全问题。
本指南将引导您了解如何使用 Trivy 自动执行漏洞扫描,将其集成到 CI/CD 管道中,并确保您的软件保持安全,而不会减慢您的交付周期。
Trivy是什么?
Trivy(由 Aqua Security 开发)是一款简单而强大的开源漏洞扫描器。
- 容器图像
- 文件系统和存储库
- 基础设施即代码(Terraform、Helm 等)
- 已知漏洞(CVE)
- 配置错误
- 秘密泄露
- 软件物料清单 (SBOM) Trivy 的轻量级设计和易于集成使其成为寻求快速安全洞察的 DevOps 团队的首选。
为什么漏洞扫描很重要
到 2025 年,超过 85% 的安全漏洞都与第三方组件中的漏洞有关。
由于持续部署的周期性,漏洞可能会在不知不觉中进入生产环境。
自动化扫描可确保:
- 及早发现问题
- 符合安全标准
- 降低生产环境漏洞利用的风险
- 更快的事件响应
Trivy 的主要特点
- 覆盖范围广——扫描操作系统软件包、库、IaC 和 Kubernetes 清单。
- 快速轻量级– 使用本地缓存来减少扫描时间。
- 全面安全防护——检测 CVE、密钥和配置缺陷。
- 支持 CI/CD – 可轻松与 GitHub Actions、Jenkins、GitLab CI 等集成。
- SBOM 支持– 生成多种格式(JSON、SPDX、CycloneDX)的软件物料清单。
安装和设置 Trivy
适用于 Linux/macOS:
- brew install aquasecurity/trivy/trivy
- sudo apt install trivy -y
对于基于 Docker 的系统:
- docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy image nginx:latest
验证安装情况:
- trivy --版本
如何运行手动扫描
扫描 Docker 镜像:
- 琐碎的图像 nginx:latest
扫描本地目录:
- trivy fs。
扫描 Git 仓库:
- trivy 仓库 https://{url}
您将获得一份详细的漏洞报告,其中包含以下严重级别:低、中、高和严重。
Trivy 将漏洞扫描从一项任务变成一种习惯,并将这种习惯变成一张安全网。
在 CI/CD 流水线中自动化漏洞扫描
示例:GitHub Actions
name: Trivy Scan
on:
push:
branches: [ main ]
jobs:
trivy-scan:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'your-docker-image:latest'
format: 'table'
exit-code: '1'
ignore-unfixed: true
如果检测到任何严重漏洞,管道将失败,从而阻止不安全代码的部署。
将 Trivy 与 Docker 和 Kubernetes 集成
推送 Docker 镜像前先扫描镜像:
- trivy 图片 myapp:最新
扫描 Kubernetes 中正在运行的 Pod:
- trivy k8s --report summary cluster
您甚至可以使用 Kubernetes 中的 CronJobs 来自动执行此操作,以执行每日扫描并将结果推送到 Slack 或电子邮件。
有趣的事实和统计数据
- 约 70% 的组织依赖于包含已知漏洞的开源组件,因此自动化扫描对于安全至关重要。来源:开源漏洞
- Trivy 支持超过 30 个漏洞数据库,包括 GitHub 安全公告和 NVD(国家漏洞数据库)等主要来源。来源:- GitHub 安全公告
- 典型的 Trivy 扫描效率极高,可在 60 秒内完成,因此即使对于快节奏的 CI/CD 环境也十分适用。来源:- Trivy 扫描效率极高
“没有进行漏洞扫描的容器就像一个上了锁却开着窗户的房间。”
常见问题详解
1. 漏洞扫描速度慢。
这通常是由于 Trivy 使用了过时的本地缓存造成的。刷新缓存可以解决此问题。
解决方法:运行 `trivy --refresh` 更新数据。
2. 扫描过程中出现误报
如果漏洞数据库陈旧或已过时,则会出现此问题。
解决方法:始终在运行扫描之前更新数据库,方法是执行 Trivy DB 更新命令。
3. Trivy 导致的 CI/CD 流水线故障:
如果流水线在扫描过程中持续失败,通常意味着严重性阈值设置过严格。
解决方案:调整退出代码配置或放宽严重性筛选条件,以匹配您的风险承受能力。
4. 缺失或未报告的 CVE
如果基础镜像使用的操作系统 Trivy 未完全支持,则可能会出现这种情况。
**解决方案:**检查容器镜像的基础操作系统兼容性,或使用 `--debug` 启用调试模式以识别问题。
有效扫描的最佳实践
- 在 CI/CD 过程中尽早使用自动化——在构建之前发现问题。
- 定期更新漏洞数据库(trivy --download-db-only)。
- 启用 SBOM 报告以增强供应链透明度。
- 与通知工具(Slack、Teams)集成,以便快速发出警报。
- 将 Trivy 与 OPA 或 Kyverno 等策略执行工具结合使用。
常见问题解答
Q1:Trivy 可以免费使用吗?
是的,Trivy 完全开源,采用 Apache 2.0 许可证。
Q2:我应该多久扫描一次镜像?
理想情况下,每次部署前都应该扫描——或者至少在生产环境中每天扫描一次。
Q3:Trivy 可以扫描密钥吗?
是的,它可以检测代码和配置中的密钥和敏感凭证。
Q4:Trivy 可以离线使用吗?
可以,在本地下载其漏洞数据库后即可使用。
Q5:如何导出 Trivy 报告?
使用 -f json -o report.json 标志导出 JSON 格式的报告,或使用 --format template 标志导出自定义格式的报告。
要点总结
- Trivy 是一款轻量级、功能强大且免费的漏洞扫描器。
- 它与 CI/CD 流水线和 Kubernetes 无缝集成。
- 自动扫描有助于在无需人工干预的情况下维持持续的安全保障。
- 定期扫描和数据库更新可最大限度地减少误报。
- 积极主动的漏洞管理策略可确保安全合规的版本发布。
结论
安全并非一劳永逸,而是一个持续的过程。借助 Trivy 实现漏洞扫描自动化,DevOps 团队可以将安全左移,在部署前识别并修复问题。Trivy 的速度、准确性和易集成性使其成为 2025 年及以后 DevSecOps 自动化领域的最佳工具之一。从小规模开始,频繁自动化,让您的流水线守护您的生产环境。
作者简介: Narendra 是AddWebSolution的 DevOps 工程师,专门从事基础设施自动化,以提高效率和可靠性。
文章来源:https://dev.to/addwebsolutionpvtltd/how-to-automate-vulnerability-scans-with-trivy-3b14