cra-compliance-lab/cra-sbom-cli
GitHub: cra-compliance-lab/cra-sbom-cli
一款离线 CLI 工具,针对 CycloneDX 和 SPDX 格式的 SBOM 执行欧盟网络韧性法案(CRA)对齐的内容合规检查,并输出终端摘要和详细 PDF 报告。
Stars: 0 | Forks: 0
# cra-sbom-cli
`cra-sbom-cli` 从磁盘读取 CycloneDX 或 SPDX SBOM,运行与 [CRA SBOM Platform](#provenance) 在服务端运行的相同内容检查,并输出两项结果:
- **带颜色的终端摘要** —— 结论、计数、主要失败项、主要警告、规范依据、PDF 位置。
- **详细的 PDF** —— 每项要求的检查、手动证据目录、生成诊断,以及明确的评估范围免责声明。
它可离线工作。唯一硬性依赖是 Python 3.10+ 和 `reportlab` 包;其他均为可选依赖,缺失时会自动优雅降级。
## 快速开始
```
git clone https://github.com/cra-compliance-lab/cra-sbom-cli
cd cra-sbom-cli
./install.sh
cra-sbom-report path/to/sbom.json
```
示例输出(TTY,已简写):
```
╭────────────────────────────────────────────────────────────╮
│ CRA-Aligned SBOM Assessment │
│ Source: cosign-source-cyclonedx.json │
╰────────────────────────────────────────────────────────────╯
Verdict: ✓ PASS
Format: cyclonedx
Components: 247
Mode: standard
Counts:
Passed 14 Failed 0 Warnings 2 Manual 6
Enrichment
grype: 14 matches
sbomqs: see PDF for full output
Warnings (top 5)
⚠ PRE-7-RQ-05 Per-build / per-release regeneration Cannot be proven from SBOM content alone…
⚠ 5.3.8.5 Asset-to-SBOM completeness Full completeness cannot be proven from…
Normative basis
- EU CRA Regulation (EU) 2024/2847
- prEN 40000-1-3:2025
- BSI TR-03183-2 v2.1.0
Detailed PDF: ./cra-sbom-report-2026-05-01-225318-45840000.pdf
```
详细的 PDF 包含按组件划分的调查结果、带有规范引用的手动证据目录项,以及结构化的评估范围面板。
## 安装
### 支持的平台
| 操作系统 | 已测试 | 包管理器 |
|---|---|---|
| macOS (Apple Silicon, Intel) | 是 | Homebrew |
| Ubuntu / Debian | 是 | apt-get |
| Fedora / RHEL / CentOS | 是 | dnf / yum |
| Arch / Manjaro | 是 | pacman |
| openSUSE | 是 | zypper |
| Windows 原生 | **否** — 请使用 **WSL2** 并结合上述 Linux 发行版之一 |
### 一键安装
```
git clone https://github.com/cra-compliance-lab/cra-sbom-cli
cd cra-sbom-cli
./install.sh
```
安装程序会:
1. 检测您的操作系统和包管理器。
2. 验证 Python 3.10+。
3. 为当前用户安装 `reportlab`(无需 sudo)。
4. **在安装前询问**是否安装 `grype`、`sbomqs`、`jq` —— 绝不静默安装。
5. 将 `bin/cra-sbom-report` 软链接到 `~/.local/bin/cra-sbom-report`。
6. 使用 `cra-sbom-report --help` 进行验证。
### 安装变体
```
./install.sh --system # symlink to /usr/local/bin (uses sudo)
./install.sh --no-symlink # install deps only; invoke ./bin/cra-sbom-report directly
./install.sh --yes # answer yes to every prompt (CI)
```
### 手动安装
如果您更愿意自行安装所有内容,请参阅 [docs/INSTALLATION.md](docs/INSTALLATION.md)。
### `pip install`
该包也支持 pip 安装(适用于 venv):
```
pip install .
cra-sbom-report --help
```
## 使用方法
```
cra-sbom-report [options]
Arguments
CycloneDX (JSON/XML) or SPDX (JSON/tag-value)
Options
--enhanced Run enhanced-mode checks (hash algorithm/strength)
--no-enrich Skip grype + sbomqs (offline / fast mode)
--output PDF output path. Default: ./cra-sbom-report--.pdf
--json Also write the raw report JSON to this path
-h, --help Show this help and exit
```
### 示例
```
# 标准运行;PDF 生成在 cwd 中,带有时间戳名称
cra-sbom-report sbom.cyclonedx.json
# Enhanced 模式,自定义输出路径
cra-sbom-report sbom.json \
--enhanced \
--output reports/sbom-cra.pdf \
--json reports/sbom-cra.json
# Offline / 快速 — 适用于 CI 环境,可避免 grype 的 vuln DB 拉取缓慢
cra-sbom-report sbom.spdx.json --no-enrich
```
有关完整的演练指南,请参阅 [docs/USAGE.md](docs/USAGE.md)。
## 实际检查内容
合规性引擎运行手工编写的检查,这些检查源自三个已发布的规范来源:
- **EU CRA 法规 (EU) 2024/2847**
- **prEN 40000-1-3:2025**
- **BSI TR-03183-2 v2.1.0**
这里有两个层级:
- **自动检查**(每次扫描约 15 项)—— 格式、版本、元数据、各组件的名称/版本/供应商/标识符、依赖图完整性、哈希算法及强度(在 `--enhanced` 模式下)。
- **手动证据目录** —— SBOM 无法自行证明的项目(每次构建重新生成、漏洞处理程序、事件报告、CSAF/VEX 等)。这些项目会显示在 PDF 中,供审计师附加证据。
真正的 CRA 合规性声明需要**同时包含**这两个层级。仅凭 PASS 结论按设计是不够的 —— 每份报告都包含该免责声明。
完整详情:[docs/COMPLIANCE.md](docs/COMPLIANCE.md)。
## 输出
| 输出 | 位置 |
|---|---|
| 终端摘要 | stdout(TTY 模式下为 ANSI,管道模式下为纯文本) |
| 详细 PDF | `--output `(默认:`./cra-sbom-report--.pdf`) |
| 原始报告 JSON | `--json `(可选;适用于 CI 门禁) |
### CI 集成
退出代码 `0` 表示“工具运行成功”——结论(PASS/FAIL)记录在 JSON 中。要在 CI 中根据结论设置门禁:
```
cra-sbom-report sbom.json --json result.json
verdict=$(jq -r '.verdict' result.json)
[[ "$verdict" == "PASS" ]] || exit 1
```
## 限制
- **PASS ≠ CRA 合规。** 自动检查仅涵盖 SBOM 的*内容*;完整的合规性还需要报告中编目的手动证据。
- **无证据快照。** 平台基于数据库的证据附件在离线状态下不存在。PDF 会显示目录,但没有附件状态叠加层。
- **SPDX 3.0** 会被检测到并以硬失败消息拒绝——请重新导出为 SPDX 2.3 或 CycloneDX 1.5+。
- **无 SBOM 签名或 webhook 扇出。** 离线优先设计。
## 来源
此 CLI 的合规性逻辑是从 [CRA SBOM Platform](#) 后端(`backend/app/services/`)打包而来的。更新平台的检查**不会**自动更新此 CLI;请将两者视为需要保持同步的独立代码路径。
打包的模块:
| 文件 | 来源 |
|---|---|
| `cra_sbom_cli/compliance_engine.py` | `backend/app/services/compliance_engine.py` |
| `cra_sbom_cli/evidence_catalogue.py` | `backend/app/services/evidence_catalogue.py` |
| `cra_sbom_cli/enrichment.py` | `backend/app/services/enrichment.py` |
| `cra_sbom_cli/report_export.py` | `backend/app/services/report_export.py` |
| `cra_sbom_cli/sbom_parser.py` | `backend/app/services/sbom_parser.py` |
| `cra_sbom_cli/command_runner.py` | `backend/app/services/command_runner.py` |
交叉导入已重写为相对路径;无其他更改。
## 贡献
欢迎提交 Issue 和 PR。对于涉及合规性逻辑或 PDF 布局的更改,请与上游平台保持一致——两者之间的偏差会给用户带来困扰。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:CRA, CycloneDX, GPT, IT风险控制, PDF报告生成, Python, SBOM, SPDX, 开源合规, 无后门, 欧盟网络弹性法案, 漏洞管理, 硬件无关, 离线工具, 组件安全分析, 网络安全合规, 跌倒检测, 软件物料清单