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。

页面选项