?
This document uses PHP Chinese website manual Release
Docker引擎支持將targets/releases
委派用作可信圖像標記的標準來源。
使用此委托可讓您與其他發(fā)布者協(xié)作,而不共享您的存儲庫密鑰,這是您的目標和快照密鑰的組合。有關更多信息,請參閱管理內(nèi)容信任的密鑰)。合作者可以保留自己的授權(quán)密鑰。
該targets/releases
委托當前是一項可選功能 - 為了設置委派,您必須使用公證CLI:
下載客戶端并確保它在您的路徑上可用
~/.notary/config.json
使用以下內(nèi)容創(chuàng)建配置文件:
{ "trust_dir" : "~/.docker/trust", "remote_server": { "url": "https://notary.docker.io" } }
這告訴公證Docker內(nèi)容信任數(shù)據(jù)的存儲位置,以及在Docker Hub中使用用于圖像的公證服務器。
有關如何在默認Docker Content Trust用例外使用公證的更多詳細信息,請參閱公證CLI文檔。
請注意,使用公證客戶端發(fā)布和列出委托更改時,您的Docker Hub憑據(jù)是必需的。
您的協(xié)作者需要生成私鑰(RSA或ECDSA)并為您提供公鑰,以便將其添加到targets/releases
委派中。
他們生成這些密鑰的最簡單方法是使用OpenSSL。以下是如何生成2048位RSA部分密鑰的示例(所有RSA密鑰必須至少為2048位):
$ openssl genrsa -out delegation.key 2048Generating RSA private key, 2048 bit long modulus....................................................+++............+++e is 65537 (0x10001)
他們應該保持delegation.key
私密 - 這是他們將用于簽署標簽的內(nèi)容。
然后他們需要生成一個包含公鑰的x509證書,這是他們會給你的。這是生成CSR(證書簽名請求)的命令:
$ openssl req -new -sha256 -key delegation.key -out delegation.csr
然后他們可以將它發(fā)送給您信任的任何CA來簽署證書,或者他們可以自行簽署證書(在本示例中,創(chuàng)建有效期為1年的證書):
$ openssl x509 -req -sha256 -days 365 -in delegation.csr -signkey delegation.key -out delegation.crt
然后他們需要給你delegation.crt
,無論是自簽名還是由CA簽署。
如果您的存儲庫是使用1.11之前的Docker Engine版本創(chuàng)建的,那么在添加任何代理之前,應該將快照密鑰輪換到服務器,以便協(xié)作者不需要您的快照密鑰來簽署和發(fā)布代碼:
$ notary key rotate docker.io/<username>/<imagename> snapshot -r
這會告訴公證員為您的特定圖像存儲庫輪換一個密鑰 - 請注意,您必須包含docker.io/
前綴。snapshot -r
指定要特別旋轉(zhuǎn)快照鍵,并且希望服務器對其進行管理(-r
代表“遠程”)。
在添加委派時,您必須使用您希望委派給協(xié)作者的公鑰來獲取PEM編碼的x509證書。
假設您有證書delegation.crt
,您可以為該用戶添加一個委派,然后發(fā)布委派更改:
$ notary delegation add docker.io/<username>/<imagename> targets/releases delegation.crt --all-paths $ notary publish docker.io/<username>/<imagename>
前面的示例說明了將委派添加targets/releases
到圖像存儲庫的請求(如果它不存在)。請務必使用targets/releases
- 公證員支持多個委派角色,因此如果您錯誤地輸入委派名稱,公證人CLI將不會出錯。但是,Docker引擎僅支持從中讀取targets/releases
。
它還將協(xié)作者的公鑰添加到委托中,targets/releases
只要他們擁有與此公鑰對應的私鑰,就可以對委派進行簽名。該--all-paths
標志告訴公證員不要限制可以登錄的標簽名稱targets/releases
,這是我們強烈建議的targets/releases
。
發(fā)布更改會告訴服務器關于targets/releases
委派的更改。
發(fā)布后,查看委派信息以確保您正確地將密鑰添加到targets/releases
:
$ notary delegation list docker.io/<username>/<imagename> ROLE PATHS KEY IDS THRESHOLD --------------------------------------------------------------------------------------------------------------- targets/releases "" <all paths> 729c7094a8210fd1e780e7b17b7bb55c9a28a48b871b07f65d97baf93898523a 1
你可以看到targets/releases
它的路徑和剛剛添加的密鑰ID。
公證人目前不會將協(xié)作者名稱映射到密鑰,因此我們建議您一次添加并列出一個委托密鑰,并在需要刪除協(xié)作者時自己將密鑰ID映射到協(xié)作者。
要撤消協(xié)作者為圖片存儲庫簽署標簽的功能,您需要從targets/releases
代表團中刪除其密鑰。要做到這一點,你需要他們的鑰匙的ID。
$ notary delegation remove docker.io/<username>/<imagename> targets/releases 729c7094a8210fd1e780e7b17b7bb55c9a28a48b871b07f65d97baf93898523a Removal of delegation role targets/releases with keys [729c7094a8210fd1e780e7b17b7bb55c9a28a48b871b07f65d97baf93898523a], to repository "docker.io/<username>/<imagename>" staged for next publish.
撤銷將在您發(fā)布后立即生效:
$ notary publish docker.io/<username>/<imagename>
請注意,通過刪除targets/releases
委派中的所有關鍵字,委派(以及任何登錄到它的標記)都將被刪除。這意味著這些標簽將全部被刪除,并且您最終可能會使用由目標鍵直接簽名的較舊的舊版標簽。
targets/releases
如果您確定代表團不適合您,您可以targets/releases
完全刪除代表團。targets/releases
但是,這也會刪除當前所有的標簽,并且最終可能會使用由目標鍵直接簽名的較舊的舊標簽。
要刪除targets/releases
委派:
$ notary delegation remove docker.io/<username>/<imagename> targets/releases Are you sure you want to remove all data for this delegation? (yes/no)yes Forced removal (including all keys and paths) of delegation role targets/releases to repository "docker.io/<username>/<imagename>" staged for next publish.$ notary publish docker.io/<username>/<imagename>
作為已添加到存儲庫targets/releases
委派中的私鑰的協(xié)作者,您需要將您生成的私鑰導入到Content Trust中。
為此,您可以運行:
$ notary key import delegation.key --role user
delegation.key
包含您的PEM編碼私鑰的文件在哪里?
完成之后docker push
,在targets/releases
代理中運行的包含密鑰的任何存儲庫都將使用此導入的密鑰自動對標簽進行簽名。
docker push
行為當docker push
使用Docker Content Trust 運行時,如果Docker Engine存在,它將嘗試簽署并推送該代碼targets/releases
。如果沒有,則如果密鑰可用,則使用目標密鑰來簽署標簽。
docker pull
和docker build
行為在運行Docker Content Trust docker pull
或docker build
Docker Content Trust時,Docker Engine將只提取由targets/releases
代理角色簽名的標簽或直接用targets
密鑰簽名的舊版代碼。
Docker中的內(nèi)容信任
管理內(nèi)容信任的密鑰
內(nèi)容信任的自動化
在內(nèi)容信任沙箱中播放