3. SBOM 生成工具链:Syft、Trivy、Dependency-Track 的安装与基础配置

在云原生安全运行基线核验中,SBOM 的生成与管理依赖一套高效、可集成的工具链。本章聚焦于三款主流工具:Syft(轻量级 SBOM 生成器)、Trivy(全能扫描器,内置 SBOM 生成能力)以及 Dependency-Track(SBOM 分析与持续监控平台)。以下分别介绍其安装方式与基础配置要点。

3.1 工具选型对比

工具 核心定位 输出格式 部署方式 适用场景
Syft 专用 SBOM 生成器 CycloneDX, SPDX, Syft JSON CLI / Docker / Go Library CI/CD 流水线中快速生成 SBOM
Trivy 综合安全扫描器 CycloneDX, SPDX, SARIF CLI / Docker / Helm Chart 漏洞扫描 + SBOM 生成一体化
Dependency-Track SBOM 分析与持续监控平台 CycloneDX (导入/导出) Docker / Kubernetes / WAR 企业级 SBOM 仓库与策略引擎

3.2 Syft:轻量级 SBOM 生成器

3.2.1 安装方式

方式一:一键脚本安装(Linux / macOS)

curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

方式二:Docker 运行

docker pull anchore/syft:latest
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock anchore/syft:latest <image_name>

方式三:Homebrew(macOS)

brew install syft

3.2.2 基础配置与使用

Syft 无需额外配置文件即可运行,核心参数通过 CLI 传递:

# 生成容器镜像的 SBOM(默认 CycloneDX JSON)
syft alpine:latest -o cyclonedx-json

# 指定输出格式为 SPDX 2.3
syft nginx:1.25 -o spdx-json

# 扫描本地文件系统目录
syft dir:./my-project -o table

常用配置项:

  • -o / --output:输出格式(cyclonedx-json, cyclonedx-xml, spdx-json, table 等)
  • --scope:扫描范围(squashed 合并层,all-layers 逐层)
  • --exclude:排除路径模式
  • --config:指定 YAML 配置文件路径
最佳实践:在 CI/CD 中建议使用 syft <image> -o cyclonedx-json > sbom.cdx.json 将 SBOM 导出为文件,供后续工具(如 Dependency-Track)导入分析。

3.3 Trivy:全能扫描器中的 SBOM 能力

3.3.1 安装方式

方式一:官方脚本安装

curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.50.0

方式二:Docker 运行

docker pull aquasec/trivy:latest
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest image <image_name>

方式三:Helm Chart(Kubernetes 集群扫描)

helm repo add aquasecurity https://aquasecurity.github.io/helm-charts
helm install trivy-operator aquasecurity/trivy-operator

3.3.2 基础配置与使用

Trivy 的 SBOM 生成功能集成在 image、filesystem、repository 子命令中:

# 生成容器镜像的 SBOM(CycloneDX 格式)
trivy image --format cyclonedx --output sbom.cdx.json alpine:latest

# 生成文件系统的 SBOM
trivy filesystem --format spdx-json --output fs-sbom.spdx.json ./app

# 仅生成 SBOM,不执行漏洞扫描
trivy image --format cyclonedx --scanners none --output sbom-only.json alpine:latest

关键配置参数:

  • --format:指定 SBOM 格式(cyclonedx, spdx-json, spdx)
  • --scanners:控制扫描器类型(vuln, secret, misconfig, none)
  • --severity:过滤漏洞严重级别
  • --ignore-unfixed:仅显示已修复的漏洞
注意:Trivy 默认会同时执行漏洞扫描。若只需生成 SBOM,务必添加 --scanners none 以提升性能并避免不必要的网络请求。

3.4 Dependency-Track:SBOM 分析与持续监控平台

3.4.1 安装方式(Docker Compose)

Dependency-Track 推荐使用 Docker Compose 部署,包含 API 服务器和前端界面:

# docker-compose.yml
version: '3.8'
services:
  dtrack-apiserver:
    image: dependencytrack/apiserver:latest
    ports:
      - "8081:8080"
    environment:
      - ALPINE_DATABASE_MODE=external
      - ALPINE_DATABASE_URL=jdbc:postgresql://postgres:5432/dtrack
      - ALPINE_DATABASE_DRIVER=org.postgresql.Driver
      - ALPINE_DATABASE_USERNAME=dtrack
      - ALPINE_DATABASE_PASSWORD=dtrack
    volumes:
      - dtrack-data:/data

  dtrack-frontend:
    image: dependencytrack/frontend:latest
    ports:
      - "8080:8080"
    environment:
      - API_BASE_URL=http://localhost:8081

  postgres:
    image: postgres:16
    environment:
      - POSTGRES_DB=dtrack
      - POSTGRES_USER=dtrack
      - POSTGRES_PASSWORD=dtrack
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  dtrack-data:
  postgres-data:

启动服务:

docker-compose up -d

访问 http://localhost:8080,使用默认管理员账号 admin / admin 登录(首次登录强制修改密码)。

3.4.2 基础配置要点

  1. 创建项目(Project):每个待监控的应用对应一个项目,用于关联 SBOM 和策略。
  2. 上传 SBOM:支持 CycloneDX JSON/XML 格式,可通过 UI 手动上传或通过 REST API 自动推送。
  3. 配置策略(Policy):定义合规规则,例如“禁止使用 GPL 许可证组件”或“禁止存在 Critical 级别漏洞”。
  4. 集成通知(Alerting):配置 Webhook、Slack、邮件等渠道,当策略违规或新漏洞出现时自动告警。
API 上传 SBOM 示例:
curl -X "PUT" "http://localhost:8081/api/v1/bom" \
  -H "X-: <your_>" \
  -H "Content-Type: multipart/form-data" \
  -F "project=<project_uuid>" \
  -F "bom=@sbom.cdx.json"

3.5 工具链集成架构

下图展示了 Syft、Trivy 与 Dependency-Track 在云原生环境中的典型协作流程:

SBOM 工具链集成架构 容器镜像 Docker / OCI 源代码仓库 Git / Filesystem Syft SBOM 生成器 Trivy 扫描 + SBOM Dependency -Track CI/CD 流水线(Jenkins / GitLab CI / GitHub Actions) 自动触发扫描与 SBOM 上传 策略引擎 合规检查 说明:Syft 负责快速生成 SBOM,Trivy 在扫描漏洞的同时输出 SBOM,最终统一导入 Dependency-Track 进行持续监控与策略评估。

3.6 基础配置检查清单

工具 检查项 验证命令 / 方法
Syft 版本确认 syft version
SBOM 生成测试 syft alpine:latest -o cyclonedx-json
Trivy 版本确认 trivy --version
SBOM 生成测试 trivy image --format cyclonedx --scanners none alpine:latest
漏洞扫描测试 trivy image alpine:latest
Dependency-Track 服务状态 访问 http://localhost:8080 确认前端加载
API 可用性 curl http://localhost:8081/api/v1/version
SBOM 上传测试 通过 UI 或 API 上传一个 CycloneDX 文件
排障提示:若 Trivy 生成 SBOM 时提示“数据库未初始化”,请先执行 trivy image --download-db-only 下载漏洞数据库。Syft 无需数据库,开箱即用。