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, 开源合规, 无后门, 欧盟网络弹性法案, 漏洞管理, 硬件无关, 离线工具, 组件安全分析, 网络安全合规, 跌倒检测, 软件物料清单