13 个不稳定版本
0.9.1 | 2024年7月9日 |
---|---|
0.8.4 | 2023年7月13日 |
0.7.2 | 2023年7月10日 |
0.6.0 | 2023年7月10日 |
0.3.1 | 2023年7月4日 |
#58 in 命令行工具
1,251 每月下载量
150KB
895 行
cargo-sbom
此包提供了一个命令行工具,用于为 Cargo / Rust 工作空间创建软件物料清单(SBOM)。它支持 SPDX 和 CycloneDX 输出。
最新文档可在此处找到。
SBOM 或软件物料清单是一个行业标准术语,用于追踪和维护软件的供应链安全。
安装
cargo-sbom
可以通过 cargo
安装
cargo install cargo-sbom
cargo binstall cargo-sbom
或直接从 Github Releases 下载
# make sure to adjust the target and version (you may also want to pin to a specific version)
curl -sSL https://github.com/psastras/sbom-rs/releases/download/cargo-sbom-latest/cargo-sbom-x86_64-unknown-linux-gnu -o cargo-sbom
使用方法
对于大多数情况,只需在 cargo 工作空间中运行 cd
并运行 cargo sbom
。
--帮助
Create software bill of materials (SBOM) for Rust
Usage: cargo sbom [OPTIONS]
Options:
--cargo-package <CARGO_PACKAGE>
The specific package (in a Cargo workspace) to generate an SBOM for. If not specified this is all packages in the workspace.
--output-format <OUTPUT_FORMAT>
The SBOM output format. [default: spdx_json_2_3] [possible values: spdx_json_2_3, cyclone_dx_json_1_4]
--project-directory <PROJECT_DIRECTORY>
The directory to the Cargo project. [default: .]
-h, --help
Print help
-V, --version
Print version
示例
为 Cargo 项目创建 SPDX SBOM
在 shell 中
$ cargo sbom
{
"SPDXID": "SPDXRef-DOCUMENT",
"creationInfo": {
"created": "2023-07-04T12:38:15.211Z",
"creators": [
"Tool: cargo-sbom-v0.9.1"
]
},
"dataLicense": "CC0-1.0",
"documentNamespace": "https://docs.rs/cargo_sbom/spdxdocs/cargo-sbom-0.9.1-9cae390a-4b46-457c-95b9-e59a5e62b57d",
"files": [
{
<rest of output omitted>
在 Github Actions 中创建 CycloneDx SBOM
在 Github Actions 工作流中
jobs:
sbom:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: psastras/sbom-rs/actions/install-cargo-sbom@cargo-sbom-latest
- name: Run cargo-sbom
run: cargo-sbom --output-format=cyclone_dx_json_1_4
检查依赖项与开源漏洞数据库 (OSV) 的兼容性
假设已安装 osv-scanner
(见 https://osv.dev/)
$ cargo-sbom > sbom.spdx.json
$ osv-scanner --sbom=sbom.spdx.json
Scanned sbom.json as SPDX SBOM and found 91 packages
╭─────────────────────────────────────┬──────┬───────────┬─────────┬─────────┬───────────╮
│ OSV URL │ CVSS │ ECOSYSTEM │ PACKAGE │ VERSION │ SOURCE │
├─────────────────────────────────────┼──────┼───────────┼─────────┼─────────┼───────────┤
│ https://osv.dev/GHSA-wcg3-cvx6-7396 │ 6.2, │ crates.io │ time │ 0.1.45 │ sbom.json │
│ https://osv.dev/RUSTSEC-2020-0071 │ 6.2 │ │ │ │ │
╰─────────────────────────────────────┴──────┴───────────┴─────────┴─────────┴───────────╯
更多示例可以通过浏览 示例部分 获得。
支持的 SBOM 功能
SPDX
SPDX 字段 | 源 |
---|---|
SPDXID | 设置为 "SPDXRef-Document" |
creationInfo.created | 设置为当前时间 |
creationInfo.creators | 设置为 "Tool: cargo-sbom-v(工具版本)" |
dataLicense | 设置为 "CC0-1.0" |
documentNamespace | 设置为 "https://spdx.org/spdxdocs/(crate-name)-(uuidv4)" |
files | 从 Cargo.toml 的目标名称解析 |
name | 设置为项目文件夹名称 |
packages | 设置为从 cargo-metadata 解析的依赖项 |
packages.SPDXID | 写作 "SPDXRef-Package-(crate 名称)-(crate 版本)" |
packages.description | 从 Cargo.toml 的 "description" 字段读取 |
packages.downloadLocation | 从 cargo metadata 读取(通常为 "registry+https://github.com/rust-lang/crates.io-index") |
packages.externalRefs | 如果 packages.downloadLocation 是 crates.io,则写入为格式化的包 URL 字符串 |
packages.homepage | 从 Cargo.toml 的 "homepage" 字段读取 |
packages.licenseConcluded | 从 Cargo.toml 的 "license" 字段解析为符合 SPDX 标准的许可证标识符 |
packages.licenseDeclared | 从 Cargo.toml 的 "license" 字段读取 |
packages.name | 从 Cargo.toml 的 "name" 字段读取 |
relationships | 设置为从 cargo-metadata 解析的依赖关系 |
relationships.relationshipType | 设置为从 cargo-metadata 解析的依赖关系 |
relationships.spdxElementId | 设置为从 cargo-metadata 解析的依赖关系源 |
relationships.relatedSpdxElement | 设置为从 cargo-metadata 解析的依赖关系目标 |
CycloneDx
CycloneDx 字段 | 源 |
---|---|
bomFormat | 设置为 "CycloneDX" |
serialNumber | 设置为 "urn:uuid:(uuidv4)" |
specVersion | 设置为 1.4 |
version | 设置为 1 |
metadata | |
metadata.component | 从根工作空间解析 |
metadata.component.name | 设置为根工作空间文件夹名称 |
metadata.component.type | 设置为 "application" |
metadata.component.components | 设置为 cargo 工作空间包组件的每个组件 |
components | 设置为从 cargo-metadata 解析的组件 |
components.author | 从 Cargo.toml 的 "authors" 字段读取 |
components.bom-ref | 设置为 "CycloneDxRef-Component-(crate-name)-(crate-version)" |
components.description | 从 Cargo.toml 的 "description" 字段读取 |
components.licenses | 从 Cargo.toml 的 "license" 字段解析为符合 SPDX 标准的许可证标识符 |
components.name | 从 Cargo.toml 的 "name" 字段读取 |
components.purl | 如果下载位置是 crates.io,则写入为格式化的包 URL 字符串 |
components.type | 从 cargo-metadata 集装箱类型读取 |
components.version | 从 Cargo.toml 的 "version" 字段读取 |
dependencies | 设置为从 cargo-metadata 解析的依赖关系 |
dependencies.ref | 设置为源依赖引用 id 字符串 |
dependencies.dependsOnn | 设置为目标依赖引用 id 字符串 |
许可证:MIT
依赖项
~8.5MB
~133K SLoC