程式碼簽章

什麼是程式碼簽署?

程式碼簽署是將加密簽章應用於軟體成品(例如 Docker 映像檔)的過程,目的是驗證其完整性與真實性。透過簽署映像檔,您可以確保映像檔自簽署以來未被更改,並確認其源自受信任的來源。

在 Docker 強固映像檔 (DHI) 的環境中,程式碼簽署是使用 Cosign 來實現的,這是由 Sigstore 專案開發的工具。Cosign 可實現容器映像檔的安全與可驗證簽署,從而增強軟體供應鏈的信任與安全性。

為什麼程式碼簽署很重要?

程式碼簽署在現代軟體開發與網路安全中扮演關鍵角色

  • 真實性:驗證映像檔是由受信任的來源所建立。
  • 完整性:確保映像檔自簽署後未被篡改。
  • 合規性:協助滿足法規與組織的安全要求。

Docker 強固映像檔的程式碼簽署

每個 DHI 都使用 Cosign 進行加密簽署,確保映像檔未被篡改,且源自受信任的來源。

為什麼要簽署您自己的映像檔?

Docker 強固映像檔由 Docker 進行簽署以證明其來源與完整性;但如果您正在建立擴充 DHI 或以 DHI 作為基礎的應用程式映像檔,您也應該簽署自己的映像檔。

透過簽署您自己的映像檔,您可以:

  • 證明該映像檔是由您的團隊或管線 (pipeline) 所建立
  • 確保您的組建 (build) 在推送到儲存庫後未被篡改
  • 支援 SLSA 等軟體供應鏈框架
  • 在部署工作流程中啟用映像檔驗證

這在 CI/CD 環境中尤為重要,因為您會頻繁地建立與推送映像檔,或者在任何需要可審核映像檔來源的場景中都非常重要。

如何查看並使用程式碼簽章

查看簽章

您可以使用 Docker Scout 或 Cosign 來驗證 Docker 強固映像檔是否已簽署且值得信任。

若要列出附加於映像檔的所有認證 (attestations),包含簽章中繼資料,請使用以下指令:

$ docker scout attest list <image-name>:<tag> --platform <platform>

若要驗證特定的已簽署認證(例如 SBOM、VEX、來源證明):

$ docker scout attest get \
  --predicate-type <predicate-uri> \
  --verify \
  <image-name>:<tag> --platform <platform>

例如

$ docker scout attest get \
  --predicate-type https://openvex.dev/ns/v0.2.0 \
  --verify \
  docs/dhi-python:3.13 --platform linux/amd64

如果驗證有效,Docker Scout 將會確認簽章並顯示簽章酬載 (payload),以及用於驗證映像檔的對應 Cosign 指令。

簽署映像檔

若要簽署 Docker 映像檔,請使用 Cosign。將 <image-name>:<tag> 替換為您的映像檔名稱與標籤。

$ cosign sign <image-name>:<tag>

此指令將提示您透過 OIDC 提供者(如 GitHub、Google 或 Microsoft)進行驗證。驗證成功後,Cosign 將會產生一個短期憑證並簽署該映像檔。簽章將會儲存於透明度日誌 (transparency log) 中,並與登錄庫 (registry) 中的映像檔進行關聯。

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