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 基础配置要点
- 创建项目(Project):每个待监控的应用对应一个项目,用于关联 SBOM 和策略。
- 上传 SBOM:支持 CycloneDX JSON/XML 格式,可通过 UI 手动上传或通过 REST API 自动推送。
- 配置策略(Policy):定义合规规则,例如“禁止使用 GPL 许可证组件”或“禁止存在 Critical 级别漏洞”。
- 集成通知(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 在云原生环境中的典型协作流程:
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 无需数据库,开箱即用。