Terraform 的驗證

本文說明如何在使用 Terraform 時向 Google Cloud 進行驗證。

使用 Terraform 時,建議使用應用程式預設憑證 (ADC) 向Google Cloud 進行驗證。驗證程式庫會使用 ADC 策略,根據應用程式環境自動尋找憑證。使用 ADC 時,Terraform 可以在開發或正式環境中執行,不必變更向Google Cloud 服務和 API 進行驗證的方式。如要瞭解 ADC 尋找憑證的位置和順序,請參閱「應用程式預設憑證的運作方式」一文。

在本機開發環境中使用 Terraform 時進行驗證

如果您在本機開發環境 (例如開發工作站) 中使用 Terraform,可以透過與使用者帳戶服務帳戶相關聯的憑證進行驗證。

使用使用者帳戶進行驗證

如要使用使用者帳戶設定 ADC,請使用 Google Cloud CLI:

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

    gcloud init

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

  2. 如果您使用本機殼層,請為使用者帳戶建立本機驗證憑證:

    gcloud auth application-default login

    如果您使用 Cloud Shell,則不需要執行這項操作。

    如果系統傳回驗證錯誤,且您使用外部識別資訊提供者 (IdP),請確認您已 使用聯合身分登入 gcloud CLI

    登入畫面會隨即顯示。登入後,您的憑證會儲存在 ADC 使用的本機憑證檔案中。

使用服務帳戶模擬功能進行驗證

您可以使用服務帳戶模擬功能設定本機 ADC 檔案。Terraform 會自動使用這些憑證。

  1. 請務必確認您在模擬的服務帳戶中,擁有服務帳戶權杖建立者 (roles/iam.serviceAccountTokenCreator) IAM 角色。詳情請參閱「必要的角色」。

  2. 執行下列指令,使用服務帳戶模擬功能建立本機 ADC 檔案:

    gcloud auth application-default login --impersonate-service-account SERVICE_ACCT_EMAIL
    

如要允許使用者使用共用的主要驗證來源,以及每個環境的變數服務帳戶,請在 Terraform 設定檔中設定 impersonate_service_account 欄位:

provider "google" {
  impersonate_service_account = "SERVICE_ACCT_EMAIL"
}

在 Google Cloud上執行 Terraform 時進行驗證

在 Cloud Shell 等 Google Cloud 雲端式開發環境中執行 Terraform 時,該工具會使用您登入時提供的憑證進行驗證。

搭配使用 Terraform 與 Compute Engine、App Engine 和 Cloud Run functions 等 Google Cloud 服務時,您可以將使用者管理的服務帳戶附加至資源。一般來說,如果服務的資源可以執行或包含應用程式碼,系統就會支援附加服務帳戶。將服務帳戶附加至資源後,在該資源上執行的程式碼就能使用該服務帳戶做為身分。

對於在 Google Cloud上執行的正式版程式碼,建議您附加使用者代管服務帳戶,向 ADC 提供憑證。

如需協助判斷要提供給服務帳戶的角色,請參閱「選擇預先定義的角色」。

如要瞭解可附加服務帳戶的資源,以及如何將服務帳戶附加至資源,請參閱這篇 IAM 說明文件

設定驗證方法:

  1. 確認您具備「建立服務帳戶」身分與存取權管理角色 (roles/iam.serviceAccountCreator) 和「專案 IAM 管理員」角色 (roles/resourcemanager.projectIamAdmin)。瞭解如何授予角色
  2. 建立服務帳戶:

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    SERVICE_ACCOUNT_NAME 換成服務帳戶的名稱。

  3. 如要授予服務帳戶專案和資源的存取權,請將角色授予該帳戶:

    gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE

    請替換下列項目:

    • SERVICE_ACCOUNT_NAME:服務帳戶名稱
    • PROJECT_ID:您建立服務帳戶的專案 ID
    • ROLE:要授予的角色
  4. 如要將其他角色授予服務帳戶,請執行上一個步驟中的指令。
  5. 將必要角色指派給要將服務帳戶附加至其他資源的主體。

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser

    更改下列內容:

    • SERVICE_ACCOUNT_NAME:服務帳戶名稱
    • PROJECT_ID:您建立服務帳戶的專案 ID
    • USER_EMAIL:Google 帳戶的電子郵件地址

在地端部署或其他雲端服務供應商執行 Terraform 時進行驗證

如果您在 Google Cloud以外的位置執行應用程式,則必須提供 Google Cloud 可辨識的憑證,才能使用Google Cloud 服務。

使用 Workload Identity 聯盟驗證

如要使用外部 IdP 的憑證向 Google Cloud 進行驗證,建議使用 Workload Identity Federation。您可以建立憑證設定檔,並設定 GOOGLE_APPLICATION_CREDENTIALS 環境變數來指向該檔案。相較於建立服務帳戶金鑰,這種做法更安全。如需設定 ADC 適用的 Workload Identity Federation 的操作說明,請參閱「Workload Identity Federation with other clouds」。

使用服務帳戶金鑰驗證

在本地開發環境、地端部署或不同雲端服務供應商中執行 Terraform 時,您可以建立服務帳戶、授予應用程式所需的 IAM 角色,並為服務帳戶建立金鑰。

如要建立服務帳戶金鑰並提供給 ADC 使用,請按照下列步驟操作:

  1. 按照「建立服務帳戶金鑰」一節中的指示,建立具有應用程式所需角色的服務帳戶,以及該服務帳戶的金鑰。

向 Cloud Storage 後端進行驗證

Terraform 可讓您將 Cloud Storage 設定為後端,用來儲存 Terraform 狀態檔案。如要向 Cloud Storage 後端進行驗證,請使用本頁面所述的任一方法。如要瞭解與 Cloud Storage 後端驗證相關的設定變數,請參閱 Cloud Storage 的 Terraform 後端頁面

後續步驟