3. Trivy 核心能力:漏洞扫描、IaC 扫描、密钥扫描、SBOM 生成、镜像与文件系统扫描
Trivy 是一款由 Aqua Security 开源的综合性云原生安全扫描器,以其“开箱即用”、高精度和低误报率著称。在 Sigstore-Trivy 协同策略即代码回滚护栏 体系中,Trivy 承担了持续安全检测与策略评估的核心执行层角色。本章将深入解析 Trivy 的五大核心能力,并展示其在 CI/CD 流水线中的具体应用。
3.1 五大核心能力全景
Trivy 覆盖了从开发到部署的全链路安全检测需求。下表总结了其五大核心能力模块及其在运维剧本中的定位:
| 核心能力 | 检测对象 | 输出格式 | 在回滚护栏中的角色 |
|---|---|---|---|
| 漏洞扫描 | 操作系统包、语言依赖库 | JSON / SARIF / Table | 阻断已知高危 CVE 的部署 |
| IaC 扫描 | Terraform、CloudFormation、K8s Manifests | JSON / SARIF / Table | 检测基础设施配置漂移与错误 |
| 密钥扫描 | 硬编码密钥、、凭证 | JSON / SARIF / Table | 防止敏感信息泄露至制品仓库 |
| SBOM 生成 | 容器镜像、文件系统 | CycloneDX / SPDX | 为 Sigstore 签名提供物料清单 |
| 镜像与文件系统扫描 | 容器镜像层、本地目录 | JSON / SARIF / Table | 全文件级安全审计 |
--format json 参数以获取结构化结果。
3.2 漏洞扫描:精准阻断已知风险
Trivy 的漏洞扫描引擎内置了多个漏洞数据库(NVD、Red Hat、Debian、Alpine、GitHub Advisory 等),并支持离线模式。其核心优势在于 层缓存 和 多架构支持。
典型命令示例:
# 扫描容器镜像中的漏洞
trivy image --severity CRITICAL,HIGH --ignore-unfixed --format json nginx:1.25
# 扫描本地文件系统
trivy fs --severity CRITICAL --format sarif ./app
在回滚护栏中,漏洞扫描结果会触发策略引擎:若发现 CVSS 评分 ≥ 9.0 的未修复漏洞,则自动拒绝该镜像的部署签名请求。
3.3 IaC 扫描:基础设施即代码的合规守门员
Trivy 内置了数百条针对 Terraform、CloudFormation、Kubernetes YAML 和 Dockerfile 的检查规则。它不仅能检测安全配置错误(如容器以特权模式运行),还能发现合规性偏离(如未设置资源限制)。
IaC 扫描的典型输出片段:
# 扫描 Terraform 目录
trivy config --severity HIGH,CRITICAL --format table ./terraform/
# 结果示例
# AWS: 安全组规则过于宽松 (0.0.0.0/0 -> 22)
# K8s: 容器未设置 securityContext.runAsNonRoot
--ignore-policy 或使用 .trivyignore 文件过滤已知的误报规则,避免流水线被无效阻断。
3.4 密钥扫描:防止凭证泄露
Trivy 的密钥扫描器基于正则表达式和熵检测,能够识别超过 150 种类型的密钥(AWS Access Key、GitHub 、Slack 等)。它支持扫描文件系统、Git 历史记录和容器镜像层。
关键参数:
--scanners secret:启用密钥扫描器--secret-config:自定义密钥检测规则--severity:按严重级别过滤
在协同剧本中,密钥扫描通常作为 预提交钩子 或 CI 构建阶段 执行,一旦发现硬编码密钥,立即中断流水线并通知开发者。
3.5 SBOM 生成:为签名提供可信物料清单
软件物料清单(SBOM)是 Sigstore 签名的前置条件。Trivy 支持生成 CycloneDX 和 SPDX 两种标准格式的 SBOM,并能够从容器镜像、文件系统和已安装的包中提取依赖关系。
生成 SBOM 的命令:
# 从镜像生成 CycloneDX 格式 SBOM
trivy image --format cyclonedx --output sbom.cdx.json alpine:3.19
# 从文件系统生成 SPDX 格式 SBOM
trivy fs --format spdx-json --output sbom.spdx.json ./app
生成的 SBOM 文件随后会被传递给 cosign 进行签名,确保部署的制品与物料清单一一对应,防止依赖混淆攻击。
3.6 镜像与文件系统扫描:全文件级审计
Trivy 的镜像扫描器能够逐层分析容器镜像,检测已安装的包、库文件以及配置文件中的安全问题。文件系统扫描则适用于本地目录、Git 仓库和 CI 工作区。
两种扫描模式的对比如下:
| 特性 | 镜像扫描 (trivy image) |
文件系统扫描 (trivy fs) |
|---|---|---|
| 扫描对象 | 容器镜像层 | 本地目录 / Git 仓库 |
| 依赖分析 | 支持 OS 包 + 语言库 | 支持语言库 + 配置文件 |
| 缓存机制 | 层缓存(加速重复扫描) | 无层缓存 |
| 典型场景 | CI/CD 镜像构建后 | 代码提交前 / 本地开发 |
3.7 核心能力协同架构
下图展示了 Trivy 五大核心能力在 Sigstore-Trivy 协同剧本中的调用关系与数据流向:
3.8 在 CI/CD 流水线中的集成示例
以下是一个 GitLab CI 作业片段,展示了如何在一个阶段内串联 Trivy 的多个核心能力:
trivy-scan:
stage: security
script:
# 1. 生成 SBOM
- trivy image --format cyclonedx --output sbom.cdx.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
# 2. 漏洞扫描(仅严重和高危)
- trivy image --severity CRITICAL,HIGH --ignore-unfixed --format json --output vuln.json $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
# 3. IaC 扫描
- trivy config --severity HIGH,CRITICAL --format json --output iac.json ./deploy/
# 4. 密钥扫描
- trivy fs --scanners secret --format json --output secret.json ./app/
artifacts:
paths:
- sbom.cdx.json
- vuln.json
- iac.json
- secret.json
expire_in: 30 days
上述作业生成的四个 JSON 文件将作为后续策略评估(OPA)和签名(Cosign)的输入,构成完整的回滚护栏数据链路。