在上个月公布的 Docker Desktop v4.7.0 中,减少了一个新的 CLI 插件 -docker/sbom-cli-plugin,其为 Docker CLI 减少了一个子命令 – sbom
,用于查看 Docker 容器镜像的软件物料清单(SBOM)。
什么是 SBOM?
首先介绍下什么是 SBOM(Software Bill of Materials),咱们称之为软件物料清单,是软件供应链中的术语。软件供应链是用于构建软件应用程序(软件产品)的组件、库和工具的列表,而物料清单则声明这些组件、库的清单,相似于食品的配料清单。软件物料清单能够帮忙组织或者集体防止应用有安全漏洞的软件。
DOCKER SBOM 命令
留神: 从 Docker Desktop 4.7.0 版本开始到当初,docker sbom
命令还是实验性的,该性能兴许会在当前版本中删除和更改,以后 Linux 的 Docker CLI 还未蕴含该子命令。
docker sbom
命令用于生产一个容器镜像的软件物料清单(SBOM)
WSL - mengz docker sbom --help
Usage: docker sbom [OPTIONS] COMMAND
View the packaged-based Software Bill Of Materials (SBOM) for an image.
EXPERIMENTAL: The flags and outputs of this command may change. Leave feedback on https://github.com/docker/sbom-cli-plugin.
Examples:
docker sbom alpine:latest a summary of discovered packages
docker sbom alpine:latest --format syft-json show all possible cataloging details
docker sbom alpine:latest --output sbom.txt write report output to a file
docker sbom alpine:latest --exclude /lib --exclude '**/*.db' ignore one or more paths/globs in the image
Options:
-D, --debug show debug logging
--exclude stringArray exclude paths from being scanned using a glob expression
--format string report output format, options=[syft-json cyclonedx-xml cyclonedx-json github-0-json spdx-tag-value spdx-json table text] (default "table")
--layers string [experimental] selection of layers to catalog, options=[squashed all] (default "squashed")
-o, --output string file to write the default report output to (default is STDOUT)
--platform string an optional platform specifier for container image sources (e.g. 'linux/arm64', 'linux/arm64/v8', 'arm64', 'linux')
--quiet suppress all non-report output
-v, --version version for sbom
Commands:
version Show Docker sbom version information
Run 'docker sbom COMMAND --help' for more information on a command.
从命令的帮忙信息中能够看到,除了间接生成表格模式的 SBOM 输入外,还反对应用 --format
指定多种类型的输入格局。
咱们尝试对镜像 neo4j:4.4.5
生成 SBOM:
WSL - mengz docker sbom neo4jh:4.4.5
Syft v0.43.0
✔ Loaded image
✔ Parsed image
✔ Cataloged packages [385 packages]
NAME VERSION TYPE
CodePointIM 11.0.15 java-archive
FastInfoset 1.2.16 java-archive
FileChooserDemo 11.0.15 java-archive
Font2DTest 11.0.15 java-archive
HdrHistogram 2.1.9 java-archive
J2Ddemo 11.0.15 java-archive
Metalworks 11.0.15 java-archive
...
libuuid1 2.36.1-8+deb11u1 deb
libxxhash0 0.8.0-2 deb
libzstd1 1.4.8+dfsg-2.1 deb
listenablefuture 9999.0-empty-to-avoid-conflict-with-guava java-archive
log4j-api 2.17.1 java-archive
log4j-core 2.17.1 java-archive
login 1:4.8.1-1 deb
...
下面的输入表格之截取了局部,咱们能够看到在清单列表中,除了零碎包(deb 类型)之外,还有 java 的软件包,其中就蕴含了 log4j 的包及其版本信息,从这些信息中就能够理解到容器镜像是否蕴含了存在安全漏洞的依赖和软件包,加强了应用软件镜像来部署利用的安全性。
下面的信息中还看到了 Syft v0.43.0
,这是因为以后的 SBOM CLI 插件是应用 Anchore 的 Syft 我的项目来进行镜像层的扫描,当前的版本兴许会通过其余办法读取 SBOM 信息。
咱们再尝试输入一个镜像的 SPDX 格局的 SBOM 文件:
WSL - mengz docker sbom --form spdx-json --output hugo-sbom.json mengzyou/hugo:latest
Syft v0.43.0
✔ Loaded image
✔ Parsed image
✔ Cataloged packages
WSL - mengz cat hugo-sbom.jso
{
"SPDXID": "SPDXRef-DOCUMENT",
"name": "mengzyou/hugo-latest",
"spdxVersion": "SPDX-2.2",
"creationInfo": {
"created": "2022-05-09T10:55:06.6343529Z",
"creators": [
"Organization: Anchore, Inc",
"Tool: syft-[not provided]"
],
"licenseListVersion": "3.16"
},
"dataLicense": "CC0-1.0",
"documentNamespace": "https://anchore.com/syft/image/mengzyou/hugo-latest-162a6a05-379c-49f0-a7f2-b4b738a63d1b",
"packages": [
{
"SPDXID": "SPDXRef-ed18f2a986e77aab",
"name": "alpine-baselayout",
"licenseConcluded": "GPL-2.0-only",
"description": "Alpine base dir structure and init scripts",
"downloadLocation": "https://git.alpinelinux.org/cgit/aports/tree/main/alpine-baselayout",
...
}
}
因为生成的文件较长,下面只输入了一小部分。
补充 – SPDX (Software Package Data Exchage) 是一个形容 SBOM 信息的凋谢规范,其中将蕴含软件组件、许可版权信息以及相干的平安参考。SPDX 通过为公司和社区提供共享重要数据的通用格局来缩小冗余的工作,从而简化和提供合规性。
总结
这里简略的介绍了 SBOM,以及 Docker CLI 的试验性子命令 – sbom,能够通过该命令生成 r 容器镜像多种格局的 SBOM 信息,让开发人员和须要应用容器镜像来部署服务的运维人员能够容易的获取到镜像的 SBOM 信息,从而理解到镜像的平安信息,以满足应用的合规性。
同时,也能够思考将该工具退出到公司交付利用的 CI/CD 流水中,作为镜像制品的安全检查工作。
同时公布在【Mengz’s Blog】