使用主流开发语言的项目如何一键生成SBOM文件?
1. 引言
在供应链中,物料清单 (BOM) 定义并描述了交付物制造和包装过程中所用材料的内容。在软件供应链中,BOM 指的是与软件捆绑在一起的所有组件的内容,包括作者、发布者、名称、版本、许可证和版权。Dependency Track 支持 CycloneDX 格式。特定于软件组件的物料清单通常称为 SBOM (Software Bill of Materials)。
SBOM,是一份包含软件组件、版本、依赖关系和许可证等信息的正式记录。它回答了三个关键问题:
- 这个软件由什么组成?
- 这些组件来自哪里?
- 它们是否存在已知的安全漏洞?
随着软件供应链攻击日益频繁,拥有SBOM已经从“锦上添花”变成了“必不可少”。幸运的是,CycloneDX 和 Dependency Track 的组合将完美解决以上三个关键问题。
注:CycloneDX 和 Dependency Track 都是支持软件、硬件和服务的全栈解决方案。
若你希望了解关于CycloneDX的更详细介绍,可以参阅往期博文CycloneDX:全栈软件供应链安全标准解读及优势分析。
2. 各语言开发的项目如何自动生成SBOM?
常见的开发语言,包括Java、JavaScript、Python、Go、Rust、PHP等都支持生成CycloneDX格式的SBOM文件。
CycloneDX官方提供了多种语言生成SBOM的插件,获取地址:https://cyclonedx.org/tool-center/
。
拉下来我们挑选几个代表性的语言项目来详细介绍整个生成过程。
开发语言 | 项目名称 | 代码仓库地址 | 包管理器 |
---|---|---|---|
Java | hutool | https://github.com/chinabugotech/hutool.git | Maven |
JavaScript | Semantic-UI | https://github.com/Semantic-Org/Semantic-UI.git | npm |
Python | transformers | https://github.com/huggingface/transformers.git | pip |
2.1. 后端开发语言: 使用CycloneDX生成Java SBOM
在CycloneDX工具箱中找到CycloneDX for Maven
插件,点击进入到插件的官网地址。
在插件的官网上可以看到用法说明,CycloneDX Maven 插件可生成 CycloneDX 软件物料清单 (SBOM),其中包含项目所有直接和传递依赖项的集合。
CycloneDX Maven 插件包含以下三个目标:
- makeBom :为每个 Maven 模块及其依赖项创建一个 BOM,
- makeAggregateBom :在构建根目录创建一个聚合 BOM(包含来自整个多模块构建的依赖项),并最终为每个模块创建一个 BOM。
- makePackageBom :为每个带有 war 或 ear 包装的 Maven 模块创建一个 BOM。
根据指导,将插件配置复制到Java项目的POM文件中,目标选择 makeAggregateBom,按照下图中的步骤便可自动生成两种格式(xml和json)的SBOM文件。
或者直接在终端上执行命令,可同样生成SBOM文件。
mvn org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom
后续涉及到POM文件变更,只需重复以上步骤或命令即可。
2.2. 前端开发语言: 使用CycloneDX生成JavaScript SBOM
在CycloneDX工具箱中找到CycloneDX for NPM
插件,点击进入到插件的官网地址,可以看到插件使用说明。
具体生成步骤如下:
1、安装插件
npm install --save-dev @cyclonedx/cyclonedx-npm
2、生成SBOM文件
npx @cyclonedx/cyclonedx-npm >bom.json
2.3. 脚本开发语言: 使用CycloneDX生成Python SBOM
找到名称为CycloneDX for Python
的插件,进入插件官网可以看到使用说明,具体操作如下:
1、首先执行命令安装插件,安装命令从以下选择其一就行
python -m pip install cyclonedx-bom # install via pip
pipx install cyclonedx-bom # install via pipx
poetry add cyclonedx-bom # install via poetry
uv tool install cyclonedx-bom # install via uv
2、执行如下命令生成SBOM文件
python3 -m cyclonedx_py --helpusage: cyclonedx-py [-h] [--version] <command> ...Creates CycloneDX Software Bill of Materials (SBOM) from Python projects and environments.positional arguments:<command>environment (env, venv)Build an SBOM from Python (virtual) environmentrequirements Build an SBOM from Pip requirementspipenv Build an SBOM from Pipenv manifestpoetry Build an SBOM from Poetry projectoptions:-h, --help show this help message and exit--version show program's version number and exit
如果项目根目录下存在requirements.txt文件,推荐使用命令python3 -m cyclonedx_py requirements >bom.json
,生成的bom.json文件位于项目根目录下。
如果项目根目录下不存在requirements.txt文件,推荐使用命令
# 1、安装所有依赖
pip3 install .
# 2、生成SBOM,文件名为bom.json
python3 -m cyclonedx_py requirements >bom.json
推荐阅读:
- 软件物料清单SBOM详解
- 软件物料清单SBOM都没有,何谈软件供应链安全?
- CycloneDX:全栈软件供应链安全国际标准解读及优势分析
- SBOM主流格式SPDX介绍
关注我,带你看懂技术本质!用最接地气的"人话"拆解硬核知识,让复杂概念变得简单易懂 🔥
每周更新:
- 💡 技术原理图解:一图胜千言,直观呈现技术架构
- 🛠️ 实战案例解析:结合真实项目经验,分享避坑指南
- 🤖 前沿技术追踪:第一时间解读AI、区块链等新兴领域
适合人群:
- ✅ 技术小白想系统入门
- ✅ 开发者想提升技术深度
- ✅ 产品经理需要技术洞察
- ✅ 所有对科技充满好奇的人
在这里你能获得:
- ✨ 复杂技术简单化
- ✨ 抽象概念具象化
- ✨ 理论知识实用化
- ✨ 学习路径清晰化