設定 Helm 的驗證機制

本頁說明如何設定 Helm,以便向 Artifact Registry 存放區進行驗證。

事前準備

  1. 如果沒有圖表的存放區,請建立新的存放區。選擇 Docker 做為存放區格式。
  2. 安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:

    gcloud init

    如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  3. (選用) 設定 Google Cloud CLI 指令的預設值
  4. 安裝 Helm 3.8.0 以上版本。 在舊版 Helm 中,OCI 格式的圖表支援是實驗功能。

    執行 helm version 來驗證版本。

選擇驗證方式

在大多數情況下,建議您使用服務帳戶向 Artifact Registry 進行驗證。

可用的驗證方法如下:

使用為 Docker 設定的 Artifact Registry 憑證
根據預設,Helm 可以使用與 Docker 相同的憑證進行驗證。
存取權杖
應用程式預設憑證提供短期存取權杖,服務帳戶可使用這些權杖存取 Google Cloud 資源。
JSON 金鑰檔案

使用者管理的金鑰組,可用於服務帳戶的憑證。由於憑證的效期很長,因此在所有可用的驗證方法中,這是安全性最低的選項。

請盡可能使用存取權杖,降低未經授權存取構件的風險。

使用 Docker 設定

根據預設,Helm 支援 Docker 設定檔 config.json 中的登錄設定。Helm 會在預設位置或 DOCKER_CONFIG 環境變數指定的位置尋找登錄設定。

如果您設定 Docker 時使用憑證輔助程式向 Artifact Registry 進行驗證,Helm 會沿用您現有的 Artifact Registry Docker 存放區設定。

使用存取憑證

存取權杖是短期權杖,可提供Google Cloud 資源的存取權。由於權杖的效期很短,因此您應在用來連線至 Artifact Registry 存放區前不到一小時,才要求權杖。

Google Cloud 使用應用程式預設憑證取得存取權杖。

如何使用存取權杖:

  1. 建立服務帳戶來代表應用程式執行動作,或選擇用於自動化的現有服務帳戶。

    您需要服務帳戶金鑰檔案的位置,才能設定 Artifact Registry 的驗證方式。如果是現有帳戶,您可以在「服務帳戶」頁面查看金鑰及建立新金鑰。

    前往「Service Accounts」(服務帳戶) 頁面

  2. 授予服務帳戶適當的 Artifact Registry 角色,提供存放區存取權。

  3. 將服務帳戶金鑰檔案位置指派給 GOOGLE_APPLICATION_CREDENTIALS 變數,這樣一來,Artifact Registry 憑證輔助程式就能在連線至存放區時取得金鑰。

    export GOOGLE_APPLICATION_CREDENTIALS=KEY-FILE
    

    其中 KEY-FILE 是服務帳戶金鑰檔案的路徑。

  4. 使用 Docker 向 Artifact Registry 驗證時,請取得存取權杖做為憑證。

    Linux / macOS

    執行下列指令:

    gcloud auth application-default print-access-token | helm registry login -u oauth2accesstoken \
    --password-stdin https://LOCATION-docker.pkg.dev
    

    Windows

    執行下列指令:

    gcloud auth application-default print-access-token
    ya29.8QEQIfY_...
    
    helm registry login -u oauth2accesstoken -p "ya29.8QEQIfY_..." \
    https://LOCATION-docker.pkg.dev
    

    地點

    • oauth2accesstoken 是透過存取權杖進行驗證時使用的使用者名稱。
    • gcloud auth application-default print-access-token 是 Google Cloud CLI 指令,用於取得服務帳戶的存取權杖。存取權杖是驗證密碼。
    • LOCATION 是存放區的區域或多區域位置

Helm 現在已通過 Artifact Registry 驗證。

使用 JSON 金鑰檔

任何人只要有權存取服務帳戶的有效私密金鑰,就可以透過該服務帳戶存取資源。請注意,金鑰的服務帳戶存取權 (以及服務帳戶有權存取的資料) 生命週期與下載金鑰之使用者的生命週期無關。

請按照下列規範限制存放區的存取權:

  • 建立專屬服務帳戶,僅用於與存放區互動。
  • 授予服務帳戶所需的特定 Artifact Registry 角色。舉例來說,如果服務帳戶只會下載構件,則只需要 Artifact Registry 讀者角色。
  • 在每個存放區設定專屬服務帳戶的權限,而非在專案層級設定。接著,您可以根據存放區環境指定存取權。舉例來說,開發建構作業的服務帳戶可能具有生產存放區的 Artifact Registry 讀取者角色,以及暫存存放區的 Artifact Registry 寫入者角色。
  • 請遵循管理服務帳戶金鑰的最佳做法

如要建立新的服務帳戶和服務帳戶金鑰,僅供 Artifact Registry 存放區使用,請按照下列步驟操作:

  1. 建立服務帳戶來代表應用程式執行動作,或選擇用於自動化的現有服務帳戶。

    您需要服務帳戶金鑰檔案的位置,才能設定 Artifact Registry 的驗證方式。如果是現有帳戶,您可以在「服務帳戶」頁面查看金鑰及建立新金鑰。

    前往「Service Accounts」(服務帳戶) 頁面

  2. 您可以選擇將金鑰檔案的所有內容進行 Base64 編碼。

    Linux

    base64 FILE-NAME > NEW-FILE-NAME
    

    macOS

    base64 -i FILE-NAME -o NEW-FILE-NAME
    

    Windows

    Base64.exe -e FILE-NAME > NEW-FILE-NAME
    

    其中 FILE-NAME 是原始金鑰檔案名稱,NEW-FILE-NAME 則是經過 Base64 編碼的金鑰檔案。

  3. 授予服務帳戶適當的 Artifact Registry 角色,提供存放區存取權。

  4. 使用服務帳戶金鑰進行驗證:

    Linux / macOS

    執行下列指令:

    cat KEY-FILE | helm registry login -u KEY-TYPE --password-stdin \
    https://LOCATION-docker.pkg.dev
    

    Windows

    執行下列指令:

    helm registry login -u KEY-TYPE --password-stdin https://LOCATION-docker.pkg.dev < KEY-FILE
    

    地點

    • KEY-TYPE 是下列其中一項:
      • _json_key:如果您使用 JSON 格式的服務帳戶金鑰,請按照建立檔案時的格式提供。
      • _json_key_base64 (如果您已將檔案的所有內容進行 Base64 編碼)。
    • KEY-FILE 是 JSON 格式的服務帳戶金鑰檔案名稱。
    • LOCATION 是存放區的區域或多區域位置

Helm 現在已通過 Artifact Registry 驗證。

後續步驟