Docker 又出了個新玩意兒
正文
大家好,我是Python人工智能技術
在上個月公布的 Docker Desktop v4.7.0 中,介紹了一個新的 CLI 插件-docker/sbom-cli-plugin,其為 Docker CLI 減少了一個子命令 – sbom,用于查看 Docker 容器鏡像的軟件物料清單(SBOM)。
什么是 SBOM?
首先介紹下什么是 SBOM(Software Bill of Materials),咱們稱之為軟件物料清單,是軟件供應鏈中的術語。軟件供應鏈是用于構(gòu)建軟件應用程序(軟件產(chǎn)品)的組件、庫和工具的列表,而物料清單則聲明這些組件、庫的清單,相似于食品的配料清單。軟件物料清單能夠幫忙組織或者集體防止應用有安全漏洞的軟件。
DOCKER SBOM 命令
留神: 從 Docker Desktop 4.7.0 版本開始到當初,docker sbom 命令還是實驗性的,該性能興許會在當前版本中刪除和更改,以后 Linux 的 Docker CLI 還未蘊含該子命令。
docker sbom 命令用于生產(chǎn)一個容器鏡像的軟件物料清單(SBOM)
?? >$ 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:
?? >$ 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 信息。另外,搜索公眾號Linux就該這樣學后臺回復“git書籍”,獲取一份驚喜禮包。
咱們再嘗試輸入一個鏡像的 SPDX 格局的 SBOM 文件:
?? >$ docker sbom --form spdx-json --output hugo-sbom.json mengzyou/hugo:latest
Syft v0.43.0
? Loaded image
? Parsed image
? Cataloged packages
?? >$ cat hugo-sbom.json
{
"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 信息的凋謝規(guī)范,其中將蘊含軟件組件、許可版權信息以及相干的平安參考。SPDX 通過為公司和社區(qū)提供共享重要數(shù)據(jù)的通用格局來縮小冗余的工作,從而簡化和提供合規(guī)性。
總結(jié)
這里簡略的介紹了 SBOM,以及 Docker CLI 的試驗性子命令 – sbom,能夠通過該命令生成 r 容器鏡像多種格局的 SBOM 信息,讓開發(fā)人員和須要應用容器鏡像來部署服務的運維人員能夠容易的獲取到鏡像的 SBOM 信息,從而理解到鏡像的平安信息,以滿足應用的合規(guī)性。同時,也能夠思考將該工具退出到公司交付利用的 CI/CD 流水中,作為鏡像制品的安全檢查工作。