設定 Artifact Registry 的 Docker 驗證後,您就能從本機工作站或外部環境推送及提取容器映像檔。
您不需要為 Cloud Build 或 Google Kubernetes Engine 和 Cloud Run 等執行階段環境設定驗證,但請確認您具備必要的 Google Cloud 權限。事前準備
-
安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:
gcloud init如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- (選用) 設定 gcloud CLI 指令的預設值。
- 確認您用於驗證的帳戶具備存取 Artifact Registry 的「權限」。建議您使用服務帳戶,而非使用者帳戶。
- 安裝 Docker (如果尚未安裝)。Cloud Shell 內含 Docker。
- Docker 需要具備特殊權限,才能與登錄檔互動。
在 Linux 或 Windows 上,將用於執行 Docker 指令的使用者新增至 Docker 安全性群組。macOS 不需要這個步驟,因為 Docker Desktop 會以超級使用者身分在虛擬機器上執行。
Linux
Docker 安全性群組稱為
docker。 如要新增使用者名稱,請執行下列指令:sudo usermod -a -G docker ${USER}Windows
Docker 安全性群組稱為
docker-users。 如要從系統管理員命令提示字元新增使用者,請執行下列指令:net localgroup docker-users DOMAIN\USERNAME /add其中:
- DOMAIN 是 Windows 網域。
- USERNAME 是您的使用者名稱。
登出並重新登入,群組成員資格變更才會生效。 如果使用虛擬機器,可能需要重新啟動虛擬機器,會員資格變更才會生效。
選擇驗證方式
可用的驗證方法如下:
- gcloud CLI 憑證輔助程式
- 直接在 gcloud CLI 中設定 Artifact Registry 憑證,供 Docker 使用。這是最簡單的驗證方法,但速度可能比獨立的憑證輔助程式慢。
- 獨立的 Docker 憑證輔助函式
- 如果沒有 Google Cloud CLI,這個選項主要用於設定憑證,以便搭配 Docker 使用。這項工具比 gcloud CLI 憑證輔助程式快上許多,而且會使用應用程式預設憑證 (ADC),自動尋找環境中的憑證。
- 存取權杖
- 您可以為服務帳戶產生短期存取權杖,然後使用該權杖進行密碼驗證。由於權杖的有效期限只有 60 分鐘,因此比服務帳戶金鑰更安全。
- 服務帳戶金鑰
- 使用者管理的金鑰組,可做為服務帳戶的憑證。由於憑證的效期很長,因此在所有可用的驗證方法中,這是最不安全的選項。
請盡可能使用存取權杖或憑證輔助程式,降低容器映像檔遭未授權存取的風險。如果一定要使用服務帳戶金鑰,請務必遵循管理憑證的最佳做法。
Docker 設定檔中的驗證設定
Docker 會將驗證設定儲存在設定檔 config.json 中。
- Linux:
~/.docker/config.json - Windows:
%USERPROFILE%\.docker\config.json
檔案中會根據不同的驗證方式,分別列出對應的區段:
credHelpers- 如果您使用 Docker 憑證輔助函式進行驗證,Artifact Registry 會將憑證輔助函式設定儲存在檔案的
credHelpers區段中。 auths- 如果您使用 Docker 登入,並以權杖或服務帳戶金鑰做為密碼,Docker 會將憑證的 base64 編碼版本儲存在檔案的
auths區段中。 credStore- 如果您已設定憑證儲存庫來管理憑證,憑證儲存庫的設定會位於檔案的
credStore區段。
Docker 連線至登錄檔時,會先檢查與主機相關聯的憑證輔助程式。因此,如果 config.json 同時在 credHelpers 和 auths 區段中包含 Artifact Registry 設定,系統會忽略 auths 區段中的設定。
gcloud CLI 憑證輔助程式
gcloud CLI 憑證輔助程式可提供專案資源的安全短期存取權。這項工具會設定 Docker,在安裝 Google Cloud CLI 的任何環境中,向 Artifact Registry 主機進行驗證。Cloud Shell 內含 Google Cloud CLI 和最新版 Docker。gcloud CLI 憑證輔助程式是設定最簡單的驗證方法。這項指令會使用 gcloud CLI 工作階段中有效使用者或服務帳戶的憑證,設定 Docker。由於這個憑證輔助程式依附於 gcloud CLI,因此速度可能比獨立憑證輔助程式慢上許多。如要使用第三方工具或 Docker 用戶端自動建構,且已設定大量登錄主機,請改用獨立憑證輔助函式。
如要向 Artifact Registry 進行驗證,請按照下列步驟操作:
以執行 Docker 指令的使用者身分登入 gcloud CLI。
如要使用使用者憑證設定驗證,請執行下列指令:
gcloud auth login如要使用服務帳戶憑證設定驗證,請執行下列指令:
gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE更改下列內容:
- ACCOUNT:要搭配 Artifact Registry 使用的服務帳戶,格式為
USERNAME@PROJECT-ID.iam.gserviceaccount.com。如要使用現有帳戶,請前往 Google Cloud 控制台的「服務帳戶」頁面,或使用gcloud iam service-accounts list指令,查看服務帳戶清單。 - KEY-FILE:服務帳戶金鑰檔案。如要瞭解如何建立金鑰,請參閱「身分與存取權管理 (IAM) 說明文件」。
- ACCOUNT:要搭配 Artifact Registry 使用的服務帳戶,格式為
執行下列指令:
gcloud auth configure-docker HOSTNAME-LIST其中 HOSTNAME-LIST 是以半形逗號分隔的存放區主機名稱清單,可新增至認證輔助程式設定。
舉例來說,如要新增
us-west1和asia-northeast1區域,請執行下列指令:gcloud auth configure-docker us-west1-docker.pkg.dev,asia-northeast1-docker.pkg.dev系統會將指定的主機名稱新增至認證輔助程式設定。 之後可以再次執行指令,將其他主機名稱新增至設定。
如要查看支援的存放區位置清單,請執行下列指令:
gcloud artifacts locations list這個指令會顯示目前 Docker 設定的
credHelpers區段,以及新增指定主機名稱後的更新設定。如要接受設定變更,請輸入
y。您的憑證會儲存在使用者主目錄中。
- Linux:
$HOME/.docker/config.json - Windows:
%USERPROFILE%/.docker/config.json
- Linux:
Docker 規定憑證輔助函式必須位於系統
PATH。確認系統PATH中有gcloud指令。
獨立憑證輔助程式
獨立的 Docker 憑證輔助程式會設定 Docker,在無法使用 gcloud CLI 的系統上向 Artifact Registry 進行驗證。這個獨立輔助程式可能比 gcloud CLI 憑證輔助程式更快,而且會使用應用程式預設憑證 (ADC),自動尋找環境中的憑證。如果使用第三方工具或 Docker 用戶端自動建構,且設定的登錄主機數量眾多,建議採用這種驗證方法。
獨立的 Docker 憑證輔助函式會擷取 Artifact Registry 憑證,並將憑證寫入 Docker 設定檔。這樣一來,您就能使用 Docker 指令列工具 docker,直接與 Artifact Registry 互動。
如要使用 Docker 憑證輔助程式:
以將執行 Docker 指令的使用者身分登入電腦。
從 GitHub 下載獨立的 Docker 憑證輔助程式。
您也可以視需要使用
curl指令列公用程式。例如:VERSION=2.1.29 OS=linux # or "darwin" for OSX, "windows" for Windows. ARCH=amd64 # or "386" for 32-bit OSs curl -fsSL "https://github.com/GoogleCloudPlatform/docker-credential-gcr/releases/download/v${VERSION}/docker-credential-gcr_${OS}_${ARCH}-${VERSION}.tar.gz" \ | tar xz docker-credential-gcr \ && chmod +x docker-credential-gcr && sudo mv docker-credential-gcr /usr/bin/設定 Docker,在與 Artifact Registry 互動時使用 Artifact Registry 憑證 (您只需要執行一次這項操作):
docker-credential-gcr configure-docker --registries=HOSTNAME-LIST其中 HOSTNAME-LIST 是以半形逗號分隔的存放區主機名稱清單,可新增至認證輔助程式設定。
舉例來說,如要新增
us-west1和asia-northeast1區域,請執行下列指令:docker-credential-gcr configure-docker --registries=us-west1-docker.pkg.dev,asia-northeast1-docker.pkg.dev系統會將指定的主機名稱新增至認證輔助程式設定。 之後可以再次執行指令,將其他主機名稱新增至設定。
如要查看支援的存放區位置清單,請執行下列指令:
gcloud artifacts locations list詳情請參閱 GitHub 上的獨立 Docker 憑證輔助程式說明文件。
您的憑證會儲存在使用者主目錄中。
- Linux:
$HOME/.docker/config.json - Windows:
%USERPROFILE%/.docker/config.json
- Linux:
Docker 規定憑證輔助函式必須位於系統
PATH。確認系統PATH中有docker-credential-gcr指令。如要確認憑證輔助程式是否能順利擷取憑證,請執行下列指令:
echo "https://HOSTNAME" | docker-credential-gcr get將 HOSTNAME 替換為您新增至設定的主機名稱。例如:
echo "https://us-west1-docker.pkg.dev" | docker-credential-gcr get如果指令成功執行,傳回的 JSON 輸出內容會包含
Secret欄位中的權杖。例如:{"ServerURL":"https://us-west1-docker.pkg.dev","Username":"_dcgcr_2_0_0_token","Secret":"ya29..."}
Docker 現在已設定為向 Artifact Registry 進行驗證。如要推送及提取圖片,請確認權限設定正確無誤。
存取權杖
您可以產生短期有效的 OAuth 存取權杖,向 Artifact Registry 進行驗證。由於權杖的有效期限為 60 分鐘,因此請在用來連線至 Artifact Registry 前不到一小時內要求權杖。
如要搭配服務帳戶憑證使用存取權杖,請按照下列步驟操作:
建立服務帳戶來代表應用程式執行作業,或選擇用於自動化的現有服務帳戶。
授予服務帳戶特定的 Artifact Registry 角色,提供存放區存取權。
為服務帳戶產生存取權杖並進行驗證:
您必須具備服務帳戶權杖建立者角色 (
roles/iam.serviceAccountTokenCreator) 的權限,才能模擬服務帳戶、取得該帳戶的權杖,然後以服務帳戶身分進行驗證。執行下列指令,將 ACCOUNT 替換為服務帳戶電子郵件地址,並將 LOCATION 替換為存放區的區域或多區域位置。
Linux
gcloud auth print-access-token \ --impersonate-service-account ACCOUNT | docker login \ -u oauth2accesstoken \ --password-stdin https://LOCATION-docker.pkg.devWindows
gcloud auth print-access-token --impersonate-service-account ACCOUNT | docker login -u oauth2accesstoken --password-stdin https://LOCATION-docker.pkg.dev
Docker 現在已通過 Artifact Registry 驗證。
服務帳戶金鑰
任何人只要有權存取服務帳戶的有效私密金鑰,就可以透過該服務帳戶存取資源。請注意,金鑰存取服務帳戶 (以及服務帳戶可存取的資料) 的生命週期,與下載金鑰的使用者生命週期無關。
請遵守下列規範,限制存放區的存取權:
- 建立專屬服務帳戶,僅用於與存放區互動。
- 授予服務帳戶所需的特定 Artifact Registry 角色。舉例來說,如果服務帳戶只會下載構件,則只需要 Artifact Registry Reader 角色。
- 在每個存放區上設定專屬服務帳戶的權限,而不是在專案層級設定。然後根據存放區情境指定存取權。舉例來說,開發建構作業的服務帳戶可能具備生產環境存放區的 Artifact Registry Reader 角色,以及暫存存放區的 Artifact Registry Writer 角色。
- 遵循管理憑證的最佳做法。
如要建立新的服務帳戶和服務帳戶金鑰,僅供 Artifact Registry 存放區使用,請按照下列步驟操作:
建立服務帳戶來代表應用程式執行動作,或選擇用於自動化的現有服務帳戶。
您需要服務帳戶金鑰檔案的位置,才能設定 Artifact Registry 的驗證。如果是現有帳戶,您可以在「服務帳戶」頁面中查看金鑰及建立新金鑰。
您可以選擇將金鑰檔案的所有內容採用 Base64 編碼。
Linux
base64 FILE-NAME > NEW-FILE-NAMEmacOS
base64 -i FILE-NAME -o NEW-FILE-NAMEWindows
Base64.exe -e FILE-NAME > NEW-FILE-NAME其中 FILE-NAME 是原始金鑰檔案名稱,NEW-FILE-NAME 則是採用 Base64 編碼的金鑰檔案。
確認服務帳戶的權限設定正確。如果您使用 Compute Engine 服務帳戶,請務必正確設定權限和存取範圍。
使用服務帳戶金鑰設定與 Docker 的整合:
執行下列指令:
Linux / macOS
cat KEY-FILE | docker login -u KEY-TYPE --password-stdin \ https://LOCATION-docker.pkg.devWindows
Get-Content KEY-FILE | docker login -u KEY-TYPE --password-stdin https://LOCATION-docker.pkg.dev更改下列內容:
- KEY-TYPE:下列其中一項:
_json_key如果您使用 JSON 格式的服務帳戶金鑰,也就是建立檔案時提供的格式。_json_key_base64如果您已將檔案的所有內容進行 Base64 編碼。
- KEY-FILE:JSON 格式的服務帳戶金鑰檔案名稱。
- LOCATION:儲存映像檔的存放區區域或多區域位置。
- KEY-TYPE:下列其中一項:
Docker 現在已通過 Artifact Registry 驗證。