Hotdry.

Article

Trivy CI/CD 容器安全扫描实践:统一漏洞检测与 SBOM 生成

基于 Trivy 的容器安全扫描 CI/CD 集成方案,涵盖漏洞检测、配置审查、密钥扫描与 SBOM 生成的工程化配置与阈值策略。

2026-06-04security

容器化部署已成为现代应用交付的标准范式,但镜像层中潜藏的漏洞、配置偏差和敏感信息泄露风险也随之增加。传统安全扫描工具往往局限于单一维度,开发团队需要在多个工具间切换以覆盖漏洞检测、基础设施即代码审查和合规报告生成等不同场景。Trivy 作为 Aqua Security 开源的统一安全扫描器,通过单一工具覆盖容器镜像、文件系统、Git 仓库、Kubernetes 集群和虚拟机镜像的多维度安全检测,并原生支持 SBOM 生成与 CI/CD 流水线集成。

Trivy 的核心能力矩阵

Trivy 的设计哲学是 "一个工具覆盖全栈安全扫描"。其扫描能力可归纳为五个维度:OS 包与软件依赖的漏洞检测(支持 Alpine、Debian、Red Hat 等主流发行版及语言级包管理器)、已知 CVE 的匹配与评级、IaC 配置错误识别(支持 Terraform、CloudFormation、Kubernetes YAML 等)、敏感信息与密钥泄露检测,以及软件许可证合规审查。这种多维扫描能力使开发团队无需维护多个专用工具,降低了安全工具链的复杂度。

在扫描目标方面,Trivy 支持容器镜像(本地或远程仓库)、文件系统目录、远程 Git 仓库、Kubernetes 集群和虚拟机镜像。这种灵活性允许团队在开发早期(IDE 阶段)、构建中期(CI 流水线)和部署后期(运行时监控)实施分层安全检测策略。

CI/CD 集成实践

GitHub Actions 是 Trivy 最常见的 CI/CD 集成场景。以下配置展示了如何在镜像构建流程中嵌入安全扫描:

name: Container Security Scan
on: [push, pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Build image
        run: docker build -t myapp:${{ github.sha }} .
      
      - name: Run Trivy vulnerability scanner
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'myapp:${{ github.sha }}'
          format: 'sarif'
          output: 'trivy-results.sarif'
          severity: 'CRITICAL,HIGH'
          exit-code: '1'
          ignore-unfixed: true

关键参数说明:severity 用于指定阻断构建的漏洞等级阈值,exit-code: 1 确保发现指定级别漏洞时流水线失败,ignore-unfixed 排除暂无修复方案的漏洞以减少误报干扰。SARIF 格式输出可与 GitHub Advanced Security 的 Code Scanning 功能集成,在 PR 页面直接展示漏洞详情。

对于需要生成 SBOM 的合规场景,可追加以下步骤:

      - name: Generate SBOM
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: 'myapp:${{ github.sha }}'
          format: 'cyclonedx'
          output: 'sbom.cdx.json'

CycloneDX 格式的 SBOM 可上传至 artifact 仓库或依赖管理平台,满足供应链安全审计要求。

扫描策略与阈值配置

生产环境的扫描策略需要根据业务风险容忍度进行分级配置。建议采用三级阈值策略:

阻断级(Blocking):CRITICAL 级别漏洞必须修复,流水线立即失败。适用于生产环境部署关卡。

警告级(Warning):HIGH 级别漏洞允许临时通过,但需在指定时间窗口(如 7 天)内修复,并自动创建 Jira/GitHub Issue 跟踪。

监控级(Monitoring):MEDIUM 及以下级别漏洞仅记录日志,供安全团队定期审查。

Trivy 支持通过 .trivyignore 文件维护例外清单,对于经评估可接受的风险或等待上游修复的漏洞,可按 CVE ID 精确排除:

# .trivyignore
CVE-2024-XXXX # 等待官方修复,预计 v2.1.0 解决
CVE-2023-YYYY # 业务不相关组件,评估接受

性能优化与缓存策略

大型镜像的完整扫描可能耗时数分钟,影响 CI 流水线效率。Trivy 提供多层缓存机制加速重复扫描:

  1. 漏洞数据库缓存:Trivy 每日从 NVD、GitHub Security Advisory 等源同步漏洞数据,通过 --cache-dir 指定持久化目录避免重复下载。

  2. 镜像层缓存:对于未变更的镜像层,Trivy 可复用历史扫描结果。在 CI 环境中建议挂载缓存卷:

      - name: Cache Trivy DB
        uses: actions/cache@v4
        with:
          path: ~/.cache/trivy
          key: trivy-db-${{ runner.os }}-${{ github.run_id }}
          restore-keys: |
            trivy-db-${{ runner.os }}-
  1. 增量扫描:针对文件系统扫描场景,结合 Git 变更检测仅扫描新增或修改的文件,可将扫描时间从分钟级降至秒级。

结果处理与合规报告

Trivy 支持多种输出格式适配不同消费场景:JSON 格式便于程序化解析和 SIEM 系统集成,SARIF 格式兼容 GitHub/GitLab 代码扫描平台,HTML 格式适合生成人工审阅报告,CycloneDX/SPDX 格式满足 SBOM 合规要求。

对于多团队协作场景,建议建立统一的漏洞分级标准与 SLA 修复时限,并通过 Trivy 的 trivy-server 模式部署集中式扫描服务,实现扫描策略的统一管理与审计日志集中收集。

总结

Trivy 通过统一工具链简化了容器安全扫描的复杂度,其多目标、多扫描器的设计使开发团队能够在 CI/CD 全流程中嵌入安全检测。关键落地要点包括:根据风险等级配置分级阈值策略、利用缓存机制优化扫描性能、选择合适的输出格式对接下游系统。作为 Aqua Security 开源生态的核心组件,Trivy 持续集成最新的漏洞数据源与扫描规则,是构建 DevSecOps 流水线的可靠基础设施。

资料来源

security

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com