HCP TerraformとGoogle CloudのDynamic Credentials用のリソース作成とHCP Terraform Project適用までをTerraformでやってみた

HCP TerraformとGoogle CloudのDynamic Credentials用のリソース作成とHCP Terraform Project適用までをTerraformでやってみた

2025.11.12

HCP TerraformからGoogle Cloudを操作する際に、HCP TerraformのDynamic Credentials機能を利用できます。

今回は、以下をTerraformでやってみました。

  • [Google Cloud]Dynamic Credentials用のリソースをデプロイ
  • [HCP Terraform]Google Cloud操作用のProjectを作成
  • [HCP Terraform]Dynamic Credentials用のVariables SetsをProjectにセット

以下をベースにして作成しました。大枠は同じですが、複数Projectで利用できるようにVariablesを使っている部分をVariables Setsに置き換えました。

https://github.com/hashicorp/terraform-dynamic-credentials-setup-examples

前提条件

  • 以下のツールがインストール済みであること
    • gcloud CLI
    • terraform CLI
  • Terraform実行環境から、HCP Terraform・Google Cloudにアクセスできること

Google Cloudプロジェクトへのログイン

Dynamic Credentials設定先のGoogle Cloud Project IDをセットします。

export PROJECT_ID=your-project-id
gcloud config set project ${PROJECT_ID}

Google Cloudへの認証を行います。

gcloud auth login
gcloud auth application-default login

https://docs.cloud.google.com/docs/terraform/authentication?hl=ja

必要なGoogle Cloud APIを有効化します。

gcloud services enable iam.googleapis.com \
    cloudresourcemanager.googleapis.com \
    sts.googleapis.com \
    iamcredentials.googleapis.com \
    --project=${PROJECT_ID}

HCP Terraform Organizationへのログイン

HCP Terraformにログインします。

以下のコマンドを実行して、画面の指示に従って操作を行うとトークンがローカルに保存されます。

terraform login

https://developer.hashicorp.com/terraform/cli/commands/login

Terraformを実行

コードは以下のリポジトリに格納しました。

https://github.com/msato0731/terraform-sample/tree/main/hcp-tf-dynamic-credentials-google

terraform.tfvarsを作成します。

cp terraform.tfvars.example terraform.tfvars

terraform.tfvarsを環境に合わせて修正します。

terraform.tfvars
hcp_tf_organization_name  = "<HCP Terraform Organization名>"
google_project_id         = "<Google Cloud Project ID>"
hcp_tf_project_name       = "hoge-google-cloud"
hcp_tf_variables_set_name = "hoge-google-cloud-auth"

準備ができたら、Terraformを適用します。

terraform init
terraform plan
terraform apply

https://developer.hashicorp.com/terraform/cloud-docs/dynamic-provider-credentials/gcp-configuration

コードを実行することで、Dynamic Credentialに必要な一連のリソースが作成されます。

  • Google Cloud リソース
    • HCP Terraform用のWorkload Identity Pool
      • OIDC プロバイダー (HCP Terraform用)
      • HCP Terraformが使用するサービスアカウント
        • Workload Identity Poolからサービスアカウントへのアクセス許可
        • サービスアカウントにプロジェクトのEditor権限を付与
  • HCP Terraform リソース (tfe.tf)
    • HCP Terraformプロジェクト
    • Google Cloud認証用のVariable Set
      • Variable SetをProjectに関連付け
      • Dynamic Credentials用のVariables(環境変数)

動作確認

作成されたProjectを確認します。

Variables Setがアタッチされており、Variablesも設定されています。

Variable_sets___classmethod-sandbox___HCP_Terraform.png

sato-masaki-google-cloud-auth___classmethod-sandbox___HCP_Terraform.png

Project内にWorkspaceを作成しました。

Google Compute Engineインスタンスを作成するTerraformコードが含まれているVCSリポジトリと連携しました。

Runを確認すると、Applyが成功していることを確認できました。

run-tSawRfVcENqgR661___Runs___classmethod-sandbox___HCP_Terraform.png

Tips: 「Error creating WorkloadIdentityPool」の対応方法

Terraform DestroyとApplyを繰り返すと、Destroy後のApply時に以下のエラーが出ることがあります。

│ Error: Error creating WorkloadIdentityPool: googleapi: Error 409: Requested entity already exists
│
│   with google_iam_workload_identity_pool.hcp_tf_pool,
│   on google-cloud.tf line 17, in resource "google_iam_workload_identity_pool" "hcp_tf_pool":17: resource "google_iam_workload_identity_pool" "hcp_tf_pool" {

│ Error: Error creating WorkloadIdentityPoolProvider: googleapi: Error 409: Requested entity already exists
│
│   with google_iam_workload_identity_pool_provider.hcp_tf_provider,
│   on google-cloud.tf line 34, in resource "google_iam_workload_identity_pool_provider" "hcp_tf_provider":34: resource "google_iam_workload_identity_pool_provider" "hcp_tf_provider" {
│
│

エラーの原因は、削除されたWorkload Identity Poolの復旧期間が設定されているためです。

Google Cloudでは、WorkloadIdentity Poolを削除後、30日間の復旧期間があります。この期間中は、コンソールやgcloud iam workload-identity-pools listでは表示されません。また、同じIDでの新規作成もできません。

解消方法は、「別名で作成する」または「復旧してTerraformにインポートする」のどちらかになります。

ここでは、復旧してTerraformにインポートする手順を紹介します。

以下のコマンドで復旧します。プール名やプールプロバイダー名をサンプルコードから変更している場合は、適宜読み替えてください。

# Workload Identity Poolの復旧
gcloud iam workload-identity-pools undelete hcp-tf-pool --location=global
# Workload Identity Pool Providerの復旧
gcloud iam workload-identity-pools providers undelete hcp-tf-provider-id --workload-identity-pool=hcp-tf-pool --location=global
# Workload Identity Poolの復旧確認
gcloud iam workload-identity-pools list --location=global
# Workload Identity Pool Providerの復旧確認
gcloud iam workload-identity-pools providers list --workload-identity-pool=hcp-tf-pool --location=global

その後、tfファイルの任意の箇所に以下を記載します。

import {
  to = google_iam_workload_identity_pool.hcp_tf_pool
  id = "projects/<Project ID>/locations/global/workloadIdentityPools/hcp-tf-pool"
}

# Import existing workload identity pool provider
import {
  to = google_iam_workload_identity_pool_provider.hcp_tf_provider
  id = "projects/<Project ID>/locations/global/workloadIdentityPools/hcp-tf-pool/providers/hcp-tf-provider"
}

Applyして、Importを実行します。

terraform plan
terraform apply

この記事をシェアする

FacebookHatena blogX

関連記事