C++ Docker 映象的供應鏈安全
先決條件
- 您有一個 Git 客戶端。本節中的示例使用基於命令列的 Git 客戶端,但您可以使用任何客戶端。
- 您已安裝 Docker Desktop,並已啟用 containerd 來拉取和儲存映象(在 Settings > General 中勾選)。否則,如果您使用 Docker Engine
您已安裝 Docker SBOM CLI 外掛。要在 Docker Engine 上安裝它,請使用以下命令
$ curl -sSfL https://raw.githubusercontent.com/docker/sbom-cli-plugin/main/install.sh | sh -s --
您已安裝 Docker Scout CLI 外掛。要在 Docker Engine 上安裝它,請使用以下命令
$ curl -sSfL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh -s --
您已為 Docker Engine 啟用 containerd。
概述
本節將引導您使用 Docker SBOM CLI 外掛從 C++ Docker 映象中提取軟體物料清單 (SBOM)。SBOM 提供了軟體程式包中所有元件的詳細列表,包括其版本和許可證。您可以使用 SBOM 來跟蹤軟體的來源並確保其符合您組織的安全和許可策略。
生成 SBOM
在這裡,我們將使用我們在為 C++ 應用程式建立多階段構建指南中構建的 Docker 映象。如果您尚未構建該映象,請按照該指南中的步驟構建該映象。該映象名為 `hello`。要為 `hello` 映象生成 SBOM,請執行以下命令
$ docker sbom hello
該命令將顯示“未發現任何軟體包”。這是因為最終映象是一個 scratch 映象,不包含任何軟體包。讓我們再次嘗試使用 Docker Scout
$ docker scout sbom --format=list hello
此命令會告訴您同樣的事情。
生成 SBOM 證明
SBOM 可以在構建過程中生成並“附加”到映象。這稱為 SBOM 證明。要為 `hello` 映象生成 SBOM 證明,我們首先修改 Dockerfile
ARG BUILDKIT_SBOM_SCAN_STAGE=true
FROM ubuntu:latest AS build
RUN apt-get update && apt-get install -y build-essential
WORKDIR /app
COPY hello.cpp .
RUN g++ -o hello hello.cpp -static
# --------------------
FROM scratch
COPY --from=build /app/hello /hello
CMD ["/hello"]
第一行 `ARG BUILDKIT_SBOM_SCAN_STAGE=true` 在構建階段啟用 SBOM 掃描。現在,使用以下命令構建映象
$ docker buildx build --sbom=true -t hello:sbom .
此命令將構建映象並生成 SBOM 證明。您可以透過執行以下命令來驗證 SBOM 是否已附加到映象
$ docker scout sbom --format=list hello:sbom
請注意,普通的 `docker sbom` 命令不會載入 SBOM 證明。
摘要
在本節中,您學習瞭如何在構建過程中為 C++ Docker 映象生成 SBOM 證明。普通的映象掃描器無法從 scratch 映象生成 SBOM。