使用主流开发语言的项目如何一键生成SBOM文件?

1. 引言

在供应链中,物料清单 (BOM) 定义并描述了交付物制造和包装过程中所用材料的内容。在软件供应链中,BOM 指的是与软件捆绑在一起的所有组件的内容,包括作者、发布者、名称、版本、许可证和版权。Dependency Track 支持 CycloneDX 格式。特定于软件组件的物料清单通常称为 SBOM (Software Bill of Materials)。

SBOM,是一份包含软件组件、版本、依赖关系和许可证等信息的正式记录。它回答了三个关键问题:

  1. 这个软件由什么组成?
  2. 这些组件来自哪里?
  3. 它们是否存在已知的安全漏洞?

随着软件供应链攻击日益频繁,拥有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、安装插件

sh 复制代码
npm install --save-dev @cyclonedx/cyclonedx-npm

2、生成SBOM文件

sh 复制代码
npx @cyclonedx/cyclonedx-npm >bom.json

2.3. 脚本开发语言: 使用CycloneDX生成Python SBOM

找到名称为CycloneDX for Python的插件,进入插件官网可以看到使用说明,具体操作如下:

1、首先执行命令安装插件,安装命令从以下选择其一就行

sh 复制代码
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文件

sh 复制代码
python3 -m cyclonedx_py --help

usage: 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) environment
    requirements        Build an SBOM from Pip requirements
    pipenv              Build an SBOM from Pipenv manifest
    poetry              Build an SBOM from Poetry project

options:
  -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文件,推荐使用命令

sh 复制代码
# 1、安装所有依赖
pip3 install . 
# 2、生成SBOM,文件名为bom.json
python3 -m cyclonedx_py requirements >bom.json

推荐阅读


关注我,带你看懂技术本质!用最接地气的"人话"拆解硬核知识,让复杂概念变得简单易懂 🔥

每周更新

  • 💡 技术原理图解:一图胜千言,直观呈现技术架构
  • 🛠️ 实战案例解析:结合真实项目经验,分享避坑指南
  • 🤖 前沿技术追踪:第一时间解读AI、区块链等新兴领域

适合人群

  • ✅ 技术小白想系统入门
  • ✅ 开发者想提升技术深度
  • ✅ 产品经理需要技术洞察
  • ✅ 所有对科技充满好奇的人

在这里你能获得

  • ✨ 复杂技术简单化
  • ✨ 抽象概念具象化
  • ✨ 理论知识实用化
  • ✨ 学习路径清晰化

点击关注,开启你的技术认知升级之旅! 🚀