Trivy 作为一款由 Go 语言开发的开源统一安全扫描器,能够高效检测容器镜像、Kubernetes 集群、代码仓库、云基础设施中的漏洞(CVE)、误配置(IaC)、敏感信息泄露(secrets)以及软件物料清单(SBOM),其核心优势在于零配置部署、极速扫描和无缝集成 DevSecOps 流程,避免了传统工具的复杂依赖和慢速问题。
Trivy 的扫描目标包括容器镜像(image)、文件系统(fs)、远程 Git 仓库(repo)、虚拟机镜像(vm)和 Kubernetes 资源(k8s),扫描类型覆盖漏洞、误配置、秘密、许可证和 SBOM 生成。“Trivy has scanners that look for security issues, and targets where it can find those issues.” 通过单一命令如 trivy image nginx:latest 或 trivy fs --scanners vuln,secret,misconfig ./project,即可同时触发多维度检查,支持大多数 OS(如 Alpine、Debian、RHEL)和语言生态(Java、Go、Python 等)。
在统一 pipeline 中的落地,需要关注关键参数配置以平衡准确性和性能。核心选项包括 --scanners vuln,misconfig,secret,sbom 指定扫描类型,--severity HIGH,CRITICAL 过滤低危项,--exit-code 1 --fail-on high 设置 CI 失败阈值,--format json --output scan-results.json 输出结构化报告,--cache-dir /tmp/trivy-cache 启用持久化缓存加速复用扫描(后续扫描可提速 90%)。对于 SBOM,trivy image --format cyclonedx --output bom.xml nginx:latest 生成 CycloneDX 格式,便于供应链合规验证。对于 secrets 扫描,内置 200+ 规则匹配 AWS 密钥、API Token 等,默认熄灭但可通过 --scanners secret 激活。
构建 GitHub Actions 示例 pipeline,实现多目标统一扫描:
name: Security Scan
on: [push, pull_request]
jobs:
trivy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Scan FS & Repo
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
scanners: 'vuln,secret,misconfig'
severity: 'CRITICAL,HIGH'
format: 'sarif'
output: 'trivy-results.sarif'
- name: Scan Image (if Dockerfile present)
if: hashFiles('Dockerfile') != ''
run: docker build -t myapp:${{ github.sha }} . && trivy image --exit-code 1 --no-progress --severity HIGH,CRITICAL myapp:${{ github.sha }}
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: 'trivy-results.sarif'
此 pipeline 在 PR 时自动扫描代码(fs/repo)和构建镜像(image),SARIF 格式集成 GitHub Code Scanning,实现可视化告警和阻塞部署。对于 Kubernetes,推荐部署 Trivy Operator(Helm chart: helm install trivy-operator aquasecurity/trivy-operator),它监听 Deployment/StatefulSet 等资源变更,自动注入 VulnerabilityReport CRD,扫描 Pod 镜像并报告到集群 dashboard。参数如 trivy-operator.scanJob.podSecurityStandard: privileged 调整 Pod 权限,trivy-operator.vulnerabilityReportScanInterval: 24h 设置扫描频率。
针对云端 IaC(如 Terraform for AWS S3/EC2、Helm for GCP),使用 trivy config --format json main.tf 扫描误配置,支持内置 1000+ Rego 策略(NSA、CIS 等),自定义规则通过 --policy /path/to/custom.rego 扩展企业策略。示例清单:
- 阈值监控:HIGH > 5 或 CRITICAL > 0 时 Slack 告警,回滚镜像至上个 green 版本。
- 性能优化:
--concurrency 4并行扫描,--list-all-pkgs仅列包不深检,air-gapped 环境预下载 DB(trivy image --download-db-only)。 - Secrets 治理:集成 GitGuardian,扫描后自动掩码 commit。
- SBOM 管道:生成后用
trivy sbom bom.spdx.json二次验证依赖漏洞。 - 回滚策略:CI 中
--ignore-unfixed暂过未修补项,但记录 JIRA ticket。
风险控制包括假阳性治理(.trivyignore 忽略特定 CVE 如 ghsa-xxx),性能瓶颈(大镜像 >1GB 设 --skip-files-by-name "*.pyc"),以及离线模式(自建 DB server: trivy server)。在生产中,结合 Prometheus 监控扫描时长 / 发现数,阈值告警确保 pipeline 稳定。
通过以上配置,Trivy 实现从代码到云的全链路统一扫描,显著降低供应链风险,支持 SLSA 3+ 合规。
资料来源: