內容信任委派
Docker 內容信任 (DCT) 中的委派允許您控制誰可以和誰不能簽署映像檔標籤。委派將擁有一對私有和公開委派金鑰。一個委派可以包含多對金鑰和貢獻者,以便 a) 允許多個使用者成為委派的一部分,以及 b) 支援金鑰輪替。
Docker 內容信任中最重要的是 `targets/releases` 委派。這被視為信任映像檔標籤的規範來源,如果貢獻者的金鑰不在此委派下,他們將無法簽署標籤。
幸運的是,當使用 `$ docker trust` 命令時,我們將自動初始化儲存庫,管理儲存庫金鑰,並透過 `docker trust signer add` 將協作者的金鑰新增至 `targets/releases` 委派。
設定 Docker 用戶端
根據預設,`$ docker trust` 命令期望 notary 伺服器 URL 與映像檔標籤中指定的 registry URL 相同(遵循與 `$ docker push` 類似的邏輯)。使用 Docker Hub 或 DTR 時,notary 伺服器 URL 與 registry URL 相同。但是,對於自行託管的環境或第三方 registry,您需要為 notary 伺服器指定替代 URL。這是透過以下方式完成的
$ export DOCKER_CONTENT_TRUST_SERVER=https://<URL>:<PORT>
如果您未在自行託管的環境中匯出此變數,您可能會看到如下錯誤
$ docker trust signer add --key cert.pem jeff registry.example.com/admin/demo
Adding signer "jeff" to registry.example.com/admin/demo...
<...>
Error: trust data missing for remote repository registry.example.com/admin/demo or remote repository not found: timestamp key trust data unavailable. Has a notary repository been initialized?
$ docker trust inspect registry.example.com/admin/demo --pretty
WARN[0000] Error while downloading remote metadata, using cached timestamp - this might not be the latest version available remotely
<...>
如果您已為 notary 伺服器啟用驗證,或者正在使用 DTR,則需要登入才能將資料推送至 notary 伺服器。
$ docker login registry.example.com/user/repo
Username: admin
Password:
Login Succeeded
$ docker trust signer add --key cert.pem jeff registry.example.com/user/repo
Adding signer "jeff" to registry.example.com/user/repo...
Initializing signed repository for registry.example.com/user/repo...
Successfully initialized "registry.example.com/user/repo"
Successfully added signer: jeff to registry.example.com/user/repo
如果您未登入,您將看到
$ docker trust signer add --key cert.pem jeff registry.example.com/user/repo
Adding signer "jeff" to registry.example.com/user/repo...
Initializing signed repository for registry.example.com/user/repo...
you are not authorized to perform this operation: server returned 401.
Failed to add signer to: registry.example.com/user/repo
設定 Notary 用戶端
DCT 的一些更進階功能需要 Notary CLI。要安裝和設定 Notary CLI
下載 用戶端