程式碼簽章
什麼是程式碼簽署?
程式碼簽署是將加密簽章應用於軟體成品(例如 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) 中的映像檔進行關聯。