interlynk-io/sbomasm
GitHub: interlynk-io/sbomasm
一款功能完备的 SBOM 管理工具包,支持多源合并、元数据编辑、敏感信息脱敏、许可证增强以及签名验证,帮助团队高效满足供应链安全合规要求。
Stars: 109 | Forks: 12
# `sbomasm`: 完整的 SBOM 管理工具包
[](https://pkg.go.dev/github.com/interlynk-io/sbomasm)
[](https://goreportcard.com/report/github.com/interlynk-io/sbomasm)
[](https://securityscorecards.dev/viewer/?uri=github.com/interlynk-io/sbomasm)

`sbomasm` 是一个全面的工具包,用于在整个生命周期中管理软件物料清单。从将多个 SBOM 组装成统一文档,到为合规性编辑元数据、移除敏感信息、通过额外上下文进行增强,以及对 SBOM 进行加密签名和验证——sbomasm 全方位搞定。
## 快速开始
```
# Install sbomasm
go install github.com/interlynk-io/sbomasm@latest
# Assemble multiple SBOMs into one
sbomasm assemble -n "my-app" -v "1.0.0" -o final.json service1.json service2.json service3.json
# Augment existing SBOM with additional data
sbomasm assemble --augmentMerge --primary base.json scan-results.json -o enhanced.json
# Edit SBOM metadata for compliance
sbomasm edit --subject document --supplier "ACME Corp (acme.com)" --timestamp sbom.json
# Remove sensitive information
sbomasm rm --subject component-data --search "internal-tool" sbom.json
# Enrich SBOM with missing license information
sbomasm enrich --fields license -o enriched.json sbom.json
# View SBOM in human-readable format
sbomasm view sbom.cdx.json
# Generate assembly configuration
sbomasm generate > config.yml
# Sign an SBOM using ShiftLeftCyber's SecureSBOM API (using a sample key)
sbomasm sign --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --output sbom-signed.json sbom.json
```
## 目录
## 为什么选择 sbomasm?
现代软件开发涉及复杂的供应链,包含多个组件,每个组件可能都有自己的 SBOM。组织面临多项挑战:
- **多来源**:微服务、容器和第三方组件各自生成独立的 SBOM
- **合规要求**:FDA 医疗设备要求、Auto-ISAC 标准和 CISA 指南等法规要求完整且准确的 SBOM
- **元数据缺失**:生成的 SBOM 通常缺少关键元数据,如供应商信息、许可证或适当的版本控制
- **敏感数据**:SBOM 可能包含不应共享的内部组件名称或专有信息
- **格式碎片化**:不同工具生成不同的 SBOM 格式(SPDX 与 CycloneDX)
`sbomasm` 通过一个跨格式和用例的统一工具包来解决这些挑战。
## 核心功能
- 🔀 **组装 (Assemble)**:将多个 SBOM 合并为详尽的文档
- ✏️ **编辑 (Edit)**:为合规性和完整性添加或修改元数据
- 🗑️ **移除 (Remove)**:剔除敏感组件或字段
- 🚀 **增强 (Enrich)**:利用 ClearlyDefined 的缺失许可证信息补充 SBOM
- 👁️ **查看 (View)**:以人类可读的层级格式可视化 SBOM
- 🔐 **签名 (Sign)**:对 SBOM 进行加密签名和验证(使用 ShiftLeftCyber 的第三方服务)
- 📋 **格式无关**:同时支持 SPDX 和 CycloneDX
- ⚡ **极速**:针对大规模操作进行了优化
- 🔧 **灵活**:支持 CLI、配置文件和 API 集成选项
## sbomasm 博客
- [精简、整洁且合规:sbomasm 的新移除功能](https://www.linkedin.com/pulse/lean-clean-compliance-ready-sbomasms-new-removal-vivek-kumar-sahu-a2fqe/)
- [sbomasm 使用 ClearlyDefined 数据集丰富许可证信息](https://www.linkedin.com/pulse/sbomasm-enriches-licenses-using-clearlydefined-datasets-sahu-dogec/)
## 基本用法
### 组装 SBOM
最常见的用例是将来自不同来源的多个 SBOM 组合成一个单一的详尽文档。
#### 简单组装
将微服务 SBOM 合并为应用程序 SBOM:
```
# Basic assembly with automatic format detection
sbomasm assemble \
-n "e-commerce-platform" \
-v "2.1.0" \
-t "application" \
-o platform.cdx.json \
auth-service.json cart-service.json payment-service.json
```
#### 容器和应用程序组装
将容器基础镜像 SBOM 与应用程序依赖项合并:
```
# Combine base image SBOM with application SBOM
sbomasm assemble \
-n "containerized-app" \
-v "1.0.0" \
--type "container" \
-o final-container.spdx.json \
alpine-base.spdx.json app-deps.spdx.json
```
#### 增强合并(丰富现有 SBOM)
使用来自辅助 SBOM 的额外组件信息增强现有的主 SBOM,而无需创建新的根组件:
```
# Enrich base SBOM with additional scan results
sbomasm assemble --augmentMerge \
--primary base-sbom.json \
vulnerability-scan.json license-scan.json \
-o enriched-sbom.json
# Overwrite existing component data with vendor-provided information
sbomasm assemble --augmentMerge \
--primary internal-sbom.json \
--merge-mode overwrite \
vendor-sbom.json \
-o updated-sbom.json
```
### 编辑 SBOM
修复缺失的元数据或更新信息以符合合规性:
#### 添加缺失的供应商信息
```
# Add supplier info required by procurement
sbomasm edit \
--missing \
--subject document \
--supplier "Interlynk (hello@interlynk.io)" \
--output compliant.json \
original.json
```
#### 更新组件许可证
```
# Fix missing license information
sbomasm edit \
--subject component-name-version \
--search "log4j (2.17.1)" \
--license "Apache-2.0 (https://www.apache.org/licenses/LICENSE-2.0)" \
input.json
```
### 移除组件
在共享之前移除内部或敏感组件:
```
# Remove internal components before sharing with customer
sbomasm rm \
--subject component-name \
--search "internal-telemetry" \
--output public.json \
internal.json
```
### 丰富 SBOM
使用 ClearlyDefined 数据增强 SBOM 中缺失的许可证信息:
#### 基本许可证丰富
```
# Enrich SBOM with missing license information
sbomasm enrich \
--fields license \
--output enriched.json \
original.json
```
#### 高级丰富选项
```
# Force update existing licenses with more complete data
sbomasm enrich \
--fields license \
--force \
--license-exp-join "AND" \
--max-retries 3 \
--max-wait 10 \
--output complete.json \
incomplete.json
```
此命令特别适用于:
- 填补缺乏许可证信息的自动生成 SBOM 中的空白
- 确保符合采购和法律要求
- 标准化各组件间的许可证表达式
- 满足要求完整许可证文档的监管要求
### 查看 SBOM
以人类可读的层级格式可视化 CycloneDX SBOM,并显示全面的组件信息:
#### 基本 SBOM 可视化
```
# View SBOM with default settings
sbomasm view sbom.cdx.json
# Detailed view with all information
sbomasm view sbom.cdx.json --verbose
# Save output to file
sbomasm view sbom.cdx.json -o sbom-report.txt
# License-only view (minimal component details)
sbomasm view sbom.cdx.json --only-licenses
# View containers and operating systems
sbomasm view sbom.cdx.json --filter-type "container,operating-system"
# Focus on high-severity vulnerabilities
sbomasm view sbom.cdx.json --min-severity high --only-unresolved
# Limit tree depth for large SBOMs
sbomasm view sbom.cdx.json --max-depth 3
# Flat list format
sbomasm view sbom.cdx.json --format flat
# JSON export for processing
sbomasm view sbom.cdx.json --format json -o analysis.json
```
view 命令特别适用于:
- **安全审计**:按严重程度识别和筛选漏洞
- **依赖分析**:理解组件关系和依赖项
- **许可证合规**:提取许可证信息以供合规审查
- **SBOM 验证**:验证 SBOM 的完整性和结构
- **文档编制**:为利益相关者生成人类可读的报告
### 签名和验证
SBOM 旨在用于共享。未签名的 SBOM 就像未密封的信封。任何人都可以打开它并更改其中的内容。对 SBOM 进行加密签名允许 SBOM 生产者**证明真实性并建立信任**,并让 SBOM 消费者确信 SBOM 未被篡改且来自经过验证的来源。
使用 sbomasm 对 SBOM 进行签名和验证使用的是 ShiftLeftCyber 的 SecureSBOM API。此服务需要 API Key。要获取 API Key,请使用以下链接:[联系我们](https://shiftleftcyber.io/contactus/)
**先决条件**
1. **API Key:** 从 ShiftLeftCyber 获取 API Key
2. **密钥管理:** 通过 SecureSBOM 服务生成或使用现有的签名密钥
3. **环境设置:** 为了方便,将您的 API key 设置为环境变量
```
export SECURE_SBOM_API_KEY="your-api-key-here"
```
```
# Generate a Signing Key for signing and online verification
sbomasm securesbomkey generate
# Use the generated key to Sign a CycloneDX SBOM according to CycloneDX 1.6 Specification
# The below examples uses a fake/sample key for educational purposes only
sbomasm sign --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --output sbom.cdx.signed.json sbom.json
# Verify the Signed SBOM using the API
sbomasm verify --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e sbom.cdx.signed.json
# Sign and Verify SPDX SBOMs with SecureSBOM
sbomasm sign --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --output sbom.spdx.signed.json sbom.spdx.json
sbomasm verify --key-id a7b3c9e1-2f4d-4a8b-9c6e-1d5f7a9b2c4e --signature "SIGNATURE_HASH" sbom.spdx.signed.json
```
## 行业用例
### 微服务与 Kubernetes
现代云原生应用程序由数十个微服务组成,每个微服务都有自己的依赖项。使用 Kubernetes 的组织需要跨以下方面跟踪组件:
- 应用程序代码依赖项
- 容器基础镜像
- Kubernetes operator 和 controller
- 服务网格组件
**示例**:一家在 Kubernetes 上运行 50 多个微服务的金融科技公司:
```
# Step 1: Collect SBOMs from CI/CD pipeline
# Each build generates an SBOM for the service
# Step 2: Assemble daily platform SBOM
sbomasm assemble \
-n "trading-platform" \
-v "$(date +%Y.%m.%d)" \
-t "application" \
--flat-merge \
-o daily-platform-sbom.json \
services/*.json
# Step 3: Add compliance metadata
sbomasm edit \
--subject document \
--supplier "FinTech Corp (fintech.com)" \
--tool "sbomasm (v0.1.0)" \
--timestamp \
daily-platform-sbom.json
# Step 4: Remove internal debugging tools
sbomasm rm \
--subject component-name \
--search "debug-console" \
daily-platform-sbom.json
```
### 汽车行业
汽车制造商必须遵守 Auto-ISAC 指南,并跟踪涉及数百家供应商的复杂供应链中的软件。
**示例**:一家跟踪信息娱乐系统组件的电动汽车制造商:
```
# Assemble SBOMs from tier-1 suppliers
sbomasm assemble \
-n "infotainment-system" \
-v "model-y-2025" \
-t "firmware" \
-o infotainment-complete.spdx.json \
navigation-vendor.spdx audio-vendor.spdx connectivity-vendor.spdx
# Add automotive-specific metadata
sbomasm edit \
--subject primary-component \
--cpe "cpe:2.3:a:automaker:infotainment:2025.1:*:*:*:*:*:*:*" \
--lifecycle "manufacture" \
--output auto-compliant.spdx.json \
infotainment-complete.spdx.json
```
### 医疗保健与医疗设备
FDA 法规要求医疗设备制造商提供全面的 SBOM。这些必须包括所有软件组件及其安全状态。
**示例**:医疗成像设备 SBOM 准备:
```
# Create configuration for FDA submission
cat > fda-config.yml << EOF
app:
name: 'MRI-Scanner-Software'
version: 'v3.2.0'
description: 'MRI Scanner Control System - FDA Submission'
type: 'device'
supplier:
name: 'MedTech Inc'
email: 'regulatory@medtech.com'
author:
- name: 'MedTech Regulatory Team'
email: 'regulatory@medtech.com'
output:
spec: spdx
file_format: json
assemble:
hierarchical_merge: true
include_components: true
include_dependency_graph: true
EOF
# Assemble with configuration
sbomasm assemble -c fda-config.yml -o fda-submission.json \
imaging-software.json hardware-drivers.json third-party-libs.json
```
### 金融服务
金融机构需要 SBOM 进行风险评估和监管合规(PCI-DSS 4.0)。
**示例**:银行应用程序季度合规报告:
```
# Assemble quarterly SBOM from all banking services
sbomasm assemble \
-n "digital-banking-platform" \
-v "2024-Q4" \
-o quarterly-sbom.cdx.json \
core-banking/*.json mobile-app/*.json web-portal/*.json
# Enrich with security metadata
sbomasm edit \
--subject document \
--tool "dependency-track (4.11.0)" \
--author "Security Team (security@bank.com)" \
--lifecycle "operations" \
quarterly-sbom.cdx.json
# Generate security audit report
sbomasm view quarterly-sbom.cdx.json \
--min-severity high \
--only-unresolved \
--vulnerabilities \
-o quarterly-security-report.txt
```
## 高级功能
### 配置驱动组装
对于复杂的组装操作,请使用配置文件:
```
# assembly-config.yml
app:
name: 'enterprise-platform'
version: 'v2.0.0'
type: 'application'
supplier:
name: 'Enterprise Corp'
email: 'sbom@enterprise.com'
licenses:
- id: 'Apache-2.0'
output:
spec: cyclonedx
file_format: json
file: 'enterprise-platform.cdx.json'
assemble:
flat_merge: true
include_components: true
include_dependency_graph: false
```
```
sbomasm assemble -c assembly-config.yml services/*.json
```
### Dependency Track 集成
与 Dependency Track 集成以进行持续的 SBOM 监控:
```
# Pull SBOMs from Dependency Track, assemble, and push back
sbomasm assemble dt \
-u "https://dtrack.company.com" \
-k "$DT_API_KEY" \
-n "aggregated-view" \
-v "latest" \
--flat-merge \
-o "project-uuid" \
project-uuid-1 project-uuid-2 project-uuid-3
```
### 批量操作
使用 shell 脚本处理多个 SBOM:
```
#!/bin/bash
# batch-process.sh - Add supplier info to all SBOMs
for sbom in sboms/*.json; do
echo "Processing $sbom..."
sbomasm edit \
--missing \
--subject document \
--supplier "ACME Corp (acme.com)" \
--timestamp \
--output "processed/$(basename $sbom)" \
"$sbom"
done
```
## 命令参考
每个命令的详细文档:
- [assemble](docs/assemble.md) - 合并多个 SBOM
- [edit](docs/edit.md) - 修改 SBOM 元数据
- [rm](docs/remove.md) - 移除组件或字段
- [enrich](docs/enrich.md) - 利用缺失的许可证信息丰富 SBOM
- [view](docs/view.md) - 以人类可读格式可视化 SBOM
- [generate](docs/generate.md) - 创建配置模板
- [sign/verify](docs/securesbom.md) - 对 SBOM 进行加密签名和验证
## 安装
### 使用 Go install(推荐)
```
go install github.com/interlynk-io/sbomasm@latest
```
### 使用 Homebrew
```
brew tap interlynk-io/interlynk
brew install sbomasm
```
### 使用 Docker
```
docker run -v $(pwd):/app ghcr.io/interlynk-io/sbomasm:latest assemble \
-n "my-app" -v "1.0.0" -o /app/output.json /app/input1.json /app/input2.json
```
### 使用预构建二进制文件
从 [发布页面](https://github.com/interlynk-io/sbomasm/releases) 下载
### 从源码构建
```
git clone https://github.com/interlynk-io/sbomasm.git
cd sbomasm
# Show all available make targets
make help
# Build for current platform
make build
# Run tests
make test
# Build for all platforms
make build-all
# Verify the build
./build/sbomasm version
```
该项目包含一个全面的 Makefile,其中包含用于开发、测试、构建和发布的目标。运行 `make help` 查看所有可用命令,包括:
- **开发**:`make fmt`, `make vet`, `make lint`
- **测试**:`make test`, `make test-coverage`, `make test-short`
- **构建**:`make build`, `make build-all`, `make install`
- **发布**:`make snapshot`, `make release`
- **CI/CD**:`make ci`, `make pre-commit`
## 贡献
我们期待您的贡献!请遵循以下准则:
1. Fork 本仓库
2. 创建您的功能/修复分支 (`git checkout -b feature/amazing-feature`)
3. 提交您的更改 (`git commit -sam "Add amazing feature"`) - 提交必须经过签名
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建 Pull Request
有关详细的准则,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。
## 其他 SBOM 开源工具
- [SBOM Seamless Transfer](https://github.com/interlynk-io/sbommv) - 在不同系统之间传输 SBOM 的主要工具
- [SBOM Quality Score](https://github.com/interlynk-io/sbomqs) - 用于评估 SBOM 质量和合规性的工具
- [SBOM Search Tool](https://github.com/interlynk-io/sbomgr) - 用于在 SBOM 仓库中进行上下文感知搜索的工具
- [SBOM Explorer](https://github.com/interlynk-io/sbomex) - 用于从公共仓库发现和下载 SBOM 的工具
- [SBOM Benchmark](https://www.sbombenchmark.dev) - 包含流行容器和仓库的 SBOM 及其质量分数的仓库
## 联系方式
我们感谢所有反馈。联系我们最好的方式:
- ❓& 🅰️ [Slack](https://join.slack.com/t/sbomqa/shared_invite/zt-2jzq1ttgy-4IGzOYBEtHwJdMyYj~BACA)
- 📞 [在线聊天](https://www.interlynk.io/#hs-chat-open)
- 📫 [发送邮件](mailto:hello@interlynk.io)
- 🐛 [报告 Bug 或建议](https://github.com/interlynk-io/sbomasm/issues)
- 🐦 [在 X 上关注我们](https://twitter.com/InterlynkIo)
## Stargazers
如果您喜欢这个项目,请通过加星标来支持我们。
[](https://starchart.cc/interlynk-io/sbomasm)
标签:CycloneDX, DevSecOps, DNS 解析, EVTX分析, Golang, SBOM可视化, SBOM富化, SBOM格式转换, SBOM签名, SBOM管理, SBOM组装, SBOM编辑, SPDX, 上游代理, 供应链风险管理, 元数据管理, 安全编程, 开发安全, 敏感信息清理, 文档安全, 日志审计, 许可证合规, 请求拦截, 跌倒检测, 软件物料清单, 软件透明度