驗證 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 強化映象構建過程中自動生成和簽名的。