管理內容信任的金鑰

映像檔標籤的信任是透過使用密鑰來管理的。 Docker 的內容信任使用五種不同類型的密鑰

密鑰說明
根密鑰映像檔標籤的內容信任根目錄。啟用內容信任後,您只需建立一次根密鑰。 也稱為離線密鑰,因為它應該保持離線狀態。
目標此密鑰允許您簽署映像檔標籤,以管理委派,包括委派密鑰或允許的委派路徑。 也稱為儲存庫密鑰,因為此密鑰決定可以將哪些標籤簽署到映像檔儲存庫中。
快照此密鑰會簽署目前的映像檔標籤集合,以防止混合和匹配攻擊。
時間戳記此密鑰允許 Docker 映像檔儲存庫具有新鮮度安全保證,而無需在用戶端定期重新整理內容。
委派委派密鑰是選擇性的標記密鑰,允許您將簽署映像檔標籤委派給其他發佈者,而無需共用您的目標密鑰。

第一次啟用內容信任執行 docker push 時,會自動為映像檔儲存庫產生根密鑰、目標密鑰、快照密鑰和時間戳記密鑰

  • 根密鑰和目標密鑰會在用戶端本機產生並儲存。

  • 時間戳記和快照密鑰會在與 Docker Registry 一起部署的簽署伺服器中安全地產生和儲存。 這些密鑰是在未直接暴露於網際網路的後端服務中產生的,並且在靜止時會加密。 使用 Notary CLI 在本機管理您的快照密鑰

委派密鑰是選擇性的,並且不會在正常的 docker 工作流程中產生。它們需要手動產生並新增到儲存庫

選擇通行碼

您為根密鑰和儲存庫密鑰選擇的通行碼應該隨機產生,並儲存在密碼管理員中。 擁有儲存庫密鑰允許使用者在儲存庫上簽署映像檔標籤。 通行碼用於加密靜止狀態下的密鑰,並確保遺失的筆記型電腦或意外備份不會將私鑰素材置於風險之中。

備份您的密鑰

所有 Docker 信任密鑰都使用您在建立時提供的通行碼進行加密儲存。 即使如此,您仍然應該注意備份它們的位置。 良好做法是建立兩個加密的 USB 隨身碟。

警告

將您的金鑰備份到安全可靠的位置非常重要。儲存庫金鑰遺失可以復原,但根金鑰遺失則無法復原。

Docker 用戶端將金鑰儲存在 ~/.docker/trust/private 目錄中。在備份它們之前,您應該將它們使用 tar 封存起來。

$ umask 077; tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private; umask 022

硬體儲存和簽署

Docker Content Trust 可以使用 Yubikey 4 中的根金鑰進行儲存和簽章。Yubikey 的優先順序高於儲存在檔案系統中的金鑰。當您使用內容信任初始化新的儲存庫時,Docker Engine 會在本地尋找根金鑰。如果找不到金鑰且存在 Yubikey 4,Docker Engine 會在 Yubikey 4 中建立根金鑰。有關更多詳細資訊,請參閱 Notary 文件

在 Docker Engine 1.11 之前,此功能僅在實驗分支中。

金鑰遺失

警告

如果發佈者遺失金鑰,則表示將失去為相關儲存庫簽署映像的能力。如果您遺失了金鑰,請發送電子郵件至 Docker Hub 支援。提醒您,根金鑰遺失是無法復原的。

這種遺失還需要每個在遺失之前使用過此儲存庫簽章標籤的使用者手動介入。
映像使用者會針對先前從受影響的儲存庫下載的內容收到以下錯誤:

Warning: potential malicious behavior - trust data has insufficient signatures for remote repository docker.io/my/image: valid signatures did not meet threshold

要修正此問題,他們需要下載使用新金鑰簽署的新映像標籤。