Docker 又出了個新玩意兒

在公佈的 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 流水中,作爲鏡像製品的安全檢查工作。

相關鏈接:

轉自:

https://www.cnblogs.com/pengpengboshi/p/16251545.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/yjArd0nePjM6ZG1pclfUIg