驗證 Docker 強化映象
Docker 強化映象 (DHI) 包含經過簽名的證明,用於驗證映象的構建過程、內容和安全態勢。這些證明適用於每個映象變體,可以使用 cosign 或 Docker Scout CLI 進行驗證。
Docker 用於 DHI 映象的公鑰釋出在
- https://registry.scout.docker.com/keyring/dhi/latest.pub
- https://github.com/docker-hardened-images/keyring
使用 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 強化映象構建過程中自動生成和簽名的。