為 npm 設定 Artifact Registry 驗證機制

使用第三方應用程式連線至存放區時,必須向 Artifact Registry 進行驗證。

您不需要為 Cloud Build 或 Google CloudGoogle Kubernetes Engine 和 Cloud Run 等執行階段環境設定驗證,但應確認已設定必要的權限

Node.js 支援兩種方法,可驗證對 Artifact Registry 存放區的要求:

  • 存取權杖: 如果應用程式中的驗證作業是由真人使用者管理,請使用存取權杖。
  • 密碼驗證: 如果應用程式不支援應用程式預設憑證,但支援使用使用者名稱和密碼進行驗證,請使用這個選項。

事前準備

  1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

    gcloud init

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

  2. (選用) 設定 gcloud CLI 指令的預設值
  3. 如要從 Windows 連線至存放區,請安裝 PowerShell
  4. 建立服務帳戶,代表應用程式執行作業。
  5. 如果您是 npm 新手,請參閱總覽,瞭解範圍套件和驗證設定的設定檔。

產生驗證權杖

如要在 Artifact Registry 中驗證套件,請先產生驗證權杖。之後,您從套件向 Artifact Registry 發出要求時,即可使用這個權杖。

您可以使用 oauth2 產生存取權杖,或在 oauth2l 外部產生權杖。 Google Cloud Google Cloud

存取權杖的效期為 60 分鐘。請在執行與存放區互動的指令前不久,產生存取權杖。如果存取權杖已過期,您必須產生新的存取權杖。

使用 gcloud 產生權杖

如要使用 Google Cloud產生 oauth2 存取權杖,請執行下列指令:

export ACCESS_TOKEN="oauth2accesstoken:$(gcloud auth print-access-token)"

現在,從 Node.js 套件向 Artifact Registry 發出要求時,可以參照 ACCESS_TOKEN

產生權杖 (不使用 gcloud)

如要只使用 oauth2l CLI 產生存取權杖,請按照下列步驟操作:

  1. 執行下列指令,安裝最新版 oauth2l

    go install github.com/google/oauth2l@latest
    
  2. 執行下列指令:

    export ACCESS_TOKEN="oauth2l fetch --scope cloud-platform"
    

    Google Cloud 會產生 SHA256 雜湊權杖,並儲存在 ACCESS_TOKEN 變數中。現在從 Node.js 套件向 Artifact Registry 發出要求時,可以參照 ACCESS_TOKEN

使用服務帳戶金鑰設定密碼驗證

如果 Node.js 應用程式需要使用指定的使用者名稱和密碼進行驗證,請採用這種做法。

服務帳戶金鑰是長效型憑證,請按照下列規範限制存放區的存取權:

  • 建議使用專用服務帳戶與存放區互動。
  • 授予服務帳戶所需的最低 Artifact Registry 角色。舉例來說,如果服務帳戶只會下載構件,請指派 Artifact Registry 讀者角色。
  • 如果貴機構中的群組需要不同層級的特定存放區存取權,請在存放區層級而非專案層級授予存取權。
  • 遵循管理憑證的最佳做法

如要建立服務帳戶並設定驗證:

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

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

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

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

  3. 如要在目前的 gcloud CLI 工作階段中啟用服務帳戶,請執行下列指令:

    gcloud auth activate-service-account ACCOUNT --key-file=KEY-FILE
    

    地點

    • ACCOUNT 是使用者或服務帳戶。
    • KEY-FILE 是服務帳戶 JSON 金鑰檔案的路徑。
  4. 執行下列指令,列出存放區設定:

    gcloud artifacts print-settings npm [--project=PROJECT] \
    [--repository=REPOSITORY] [--location=LOCATION] --scope=@SCOPE-NAME --json-key=KEY-FILE
    

    地點

    • PROJECT 是專案 ID。如果省略這個旗標,系統會使用目前或預設的專案。
    • REPOSITORY 是存放區的 ID。如果您已設定 預設 Artifact Registry 存放區,則在指令中省略這個旗標時,系統會使用該存放區。
    • LOCATION 是存放區的區域或多區域位置
    • SCOPE-NAME 是要與存放區建立關聯的 npm 範圍

      使用範圍可確保您一律從正確的存放區發布及安裝套件。

      未設範圍的套件會與預設的 npm 登錄檔 (通常是 npm 公開登錄檔) 建立關聯。如未指定範圍,傳回的設定會將 Artifact Registry 存放區設為預設登錄檔。如果 Node.js 專案需要從公開 npm 登錄檔和 Artifact Registry 存放區安裝套件,這可能會導致問題。

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

  5. 將傳回的設定新增至 Node.js 專案的 .npmrc 設定檔。這個檔案通常與 package.json 位於同一目錄。請務必在 Node.js 專案中加入這些設定,以供您發布的套件,以及將從 npm 存放區安裝依附元件的專案使用。

  6. 如要連結其他 Node.js 存放區,請重複上述步驟取得設定,然後將設定新增至 .npmrc 檔案。

後續步驟