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。