验证 Docker 强化镜像

订阅: Docker 强化镜像

Docker 强化镜像 (DHI) 包含经过签名的证明,用于验证镜像的构建过程、内容和安全态势。这些证明适用于每个镜像变体,可以使用 cosign 或 Docker Scout CLI 进行验证。

Docker 用于 DHI 镜像的公钥发布在

使用 Docker Scout 验证证明

您可以使用 Docker Scout CLI 列出和检索 Docker 强化镜像的证明,包括镜像已镜像到您的组织命名空间中的镜像。

注意

在运行 docker scout attest 命令之前,请确保您在本地拉取的任何镜像都与远程镜像保持最新。您可以通过运行 docker pull 来完成此操作。如果您不这样做,可能会看到 No attestation found

为什么使用 Docker Scout 而不是直接使用 cosign?

虽然您可以使用 cosign 手动验证证明,但在使用 Docker 强化镜像时,Docker Scout CLI 具有以下几个关键优势:

  • 专为目的设计:Docker Scout 理解 DHI 证明的结构和镜像命名约定,因此您无需手动构建完整的镜像摘要或 URI。

  • 自动平台解析:使用 Scout,您可以指定平台(例如,--platform linux/amd64),它会自动验证正确的镜像变体。Cosign 要求您自己查找摘要。

  • 人类可读的摘要:Scout 返回证明内容的摘要(例如,包计数、溯源步骤),而 cosign 只返回原始签名验证输出。

  • 一步验证:docker scout attest get 中的 --verify 标志会验证证明并显示等效的 cosign 命令,从而更容易理解幕后发生的事情。

  • 与 Docker Hub 和 DHI 信任模型集成:Docker Scout 与 Docker 的证明基础设施和公共密钥环紧密集成,确保兼容性并简化 Docker 生态系统内用户的验证。

简而言之,Docker Scout 简化了验证过程,减少了人为错误的可能性,同时仍然为您提供了全面的可见性以及在需要时回退到 cosign 的选项。

列出可用的证明

列出镜像 DHI 的证明

$ docker scout attest list <your-org-namespace>/dhi-<image>:<tag> --platform <platform>

此命令显示所有可用的证明,包括 SBOM、溯源、漏洞报告等。

检索特定证明

要检索特定证明,请使用带有完整谓词类型 URI 的 --predicate-type 标志

$ docker scout attest get \
  --predicate-type https://cyclonedx.org/bom/v1.5 \
  <your-org-namespace>/dhi-<image>:<tag> --platform <platform>

例如:

$ docker scout attest get \
  --predicate-type https://cyclonedx.org/bom/v1.5 \
  docs/dhi-python:3.13 --platform linux/amd64

仅检索谓词正文

$ docker scout attest get \
  --predicate-type https://cyclonedx.org/bom/v1.5 \
  --predicate \
  <your-org-namespace>/dhi-<image>:<tag> --platform <platform>

例如:

$ docker scout attest get \
  --predicate-type https://cyclonedx.org/bom/v1.5 \
  --predicate \
  docs/dhi-python:3.13 --platform linux/amd64

使用 Docker Scout 验证证明

要使用 Docker Scout 验证证明,您可以使用 --verify 标志

$ docker scout attest get <image-name>:<tag> \
   --predicate-type https://scout.docker.com/sbom/v0.1 --verify

例如,要验证 dhi/node:20.19-debian12-fips-20250701182639 镜像的 SBOM 证明

$ docker scout attest get docs/dhi-node:20.19-debian12-fips-20250701182639 \
   --predicate-type https://scout.docker.com/sbom/v0.1 --verify

处理缺失的透明度日志条目

使用 --verify 时,您有时可能会看到类似这样的错误

ERROR no matching signatures: signature not found in transparency log

发生这种情况是因为 Docker 强化镜像并不总是将证明记录在公共 Rekor 透明度日志中。在证明可能包含私人用户信息(例如,镜像引用中您的组织命名空间)的情况下,将其写入 Rekor 会公开该信息。

即使 Rekor 条目缺失,证明仍然使用 Docker 的公钥签名,并且可以通过跳过 Rekor 透明度日志检查来离线验证。

要跳过透明度日志检查并针对 Docker 的密钥进行验证,请使用 --skip-tlog 标志

$ docker scout attest get \
  --predicate-type https://cyclonedx.org/bom/v1.6 \
  <your-org-namespace>/dhi-<image>:<tag> --platform <platform> \
  --verify --skip-tlog
注意

--skip-tlog 标志仅在 Docker Scout CLI 1.18.2 及更高版本中可用。

这等效于使用 cosign 带有 --insecure-ignore-tlog=true 标志,它会针对 Docker 已发布的公钥验证签名,但会忽略透明度日志检查。

显示等效的 cosign 命令

使用 --verify 标志时,它还会打印相应的 cosign 命令来验证镜像签名

$ docker scout attest get \
  --predicate-type https://cyclonedx.org/bom/v1.5 \
  --verify \
  <your-org-namespace>/dhi-<image>:<tag> --platform <platform>

例如:

$ docker scout attest get \
  --predicate-type https://cyclonedx.org/bom/v1.5 \
  --verify \
  docs/dhi-python:3.13 --platform linux/amd64

如果验证成功,Docker Scout 会打印完整的 cosign verify 命令。

示例输出

    v SBOM obtained from attestation, 101 packages found
    v Provenance obtained from attestation
    v cosign verify registry.scout.docker.com/docker/dhi-python@sha256:b5418da893ada6272add2268573a3d5f595b5c486fb7ec58370a93217a9785ae \
        --key https://registry.scout.docker.com/keyring/dhi/latest.pub --experimental-oci11
    ...
重要

使用 cosign 时,您必须首先对 Docker Hub 注册表和 Docker Scout 注册表进行身份验证。

例如:

$ docker login
$ docker login registry.scout.docker.com
$ cosign verify \
    registry.scout.docker.com/docker/dhi-python@sha256:b5418da893ada6272add2268573a3d5f595b5c486fb7ec58370a93217a9785ae \
    --key https://registry.scout.docker.com/keyring/dhi/latest.pub --experimental-oci11

可用的 DHI 证明

有关每个 DHI 可用证明的列表,请参阅 可用证明

在 Docker Hub 上探索证明

您还可以探索镜像变体时以可视化方式浏览证明。**证明**部分列出了每个可用证明及其:

  • 类型(例如 SBOM、VEX)
  • 谓词类型 URI
  • 用于 cosign 的摘要引用

这些证明是在 Docker 强化镜像构建过程中自动生成和签名的。

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.