◀返回
在原生可执行文件中嵌入 SBOM 以识别其依赖项
Native Image 可以嵌入软件物料清单 (SBOM)。SBOM 是构成应用程序的所有组件、库和模块的清单。它提供应用程序使用的所有开源和专有库及其版本的详细信息。使用 --enable-sbom
选项将 SBOM 合并到原生可执行文件中。它默认支持 CycloneDX 格式。(在 GraalVM 社区版中不可用。)
先决条件
在构建时生成 SBOM
对于演示应用程序,您将使用 jwebserver
工具,并将其打包为带有嵌入式 SBOM 的原生可执行文件。
jwebserver
是 JDK 中包含的用于从单个目录层次结构提供静态文件的最小 HTTP 服务器。它于 Java 18 中添加。
- 将以下代码保存到名为 index.html 的文件中,以便 Web 服务器有内容可提供
<!DOCTYPE html> <html> <head> <title>jwebserver</title> </head> <body> <h2>Hello, GraalVM user!<p> </body> </html>
- 从您保存 index.html 的目录中,运行以下命令以创建原生可执行文件并嵌入 SBOM
native-image --enable-sbom=cyclonedx -m jdk.httpserver -o jwebserver
Native Image 通过传递
-m
选项,从 JDK 提供的jdk.httpserver
模块编译jwebserver
。它生成一个包含 GZIP 格式压缩 SBOM 的原生可执行文件。 - (可选)运行已编译的
jwebserver
可执行文件并在浏览器中访问 localhost:8000./jwebserver
提取嵌入式 SBOM
有两种可能的方法可以将压缩的 SBOM 内容提取为可读格式
Syft
Syft,即 syft
,是由 Anchore 维护的开源工具。Syft 可以提取嵌入式 SBOM,并以原生 Syft 格式或 CycloneDX 格式呈现。得益于 GraalVM 团队的贡献,syft
现在可以提取针对 Linux、macOS 或 Windows 构建的原生可执行文件中的 SBOM。
对原生可执行文件运行 syft
以读取其 SBOM 内容
syft jwebserver
它列出了其中包含的所有 Java 库。
Native Image 检查工具
GraalVM Native Image 提供 Inspect Tool 以检索嵌入在原生可执行文件中的 SBOM。如果您不想安装 syft
,Inspect Tool 是一个可行的替代方案。
运行以下命令,使用 Inspect Tool 读取 SBOM 内容
native-image-inspect --sbom jwebserver
更进一步,您可以将 SBOM 提交给任何可用的漏洞扫描器,并检查记录的库是否存在已知的安全漏洞。漏洞扫描器会将 SBOM 中列出的组件与漏洞数据库中的 CVE 进行交叉引用。
本指南演示了如何获取应用程序供应链的洞察,以帮助评估与第三方依赖项相关的风险。Native Image 可以在构建时将 SBOM 嵌入到原生可执行文件或共享库中。