🔐

サービスアカウントキーなしでTerraformを実行

2025/02/04に公開

概要

Terraformの実行方法で多くの場合サービスアカウントキーをダウンロードする手順となっているため、
Google Cloud Platform (GCP)上のリソース作成をサービスアカウントキーを生成せずにTerraformで行う方法を記載する。

前提条件

  • GCPプロジェクトの作成済み
  • gcloudコマンドラインツールのインストール済み
  • Terraformのインストール済み
  • 必要な環境変数の設定
    export PROJECT_ID="your-project-id"
    export USER_EMAIL="your-email@example.com"
    

手順

1. Terraform用のサービスアカウント作成

gcloud iam service-accounts create terraform --display-name "Account for Terraform"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member serviceAccount:terraform@${PROJECT_ID}.iam.gserviceaccount.com \
  --role roles/editor

Note: 本番環境ではroles/editorではなく、必要最小限の権限を付与することを推奨します。

2. 操作ユーザにサービス アカウント トークン作成者 (roles/iam.serviceAccountTokenCreator) 権限を付与

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member user:${USER_EMAIL} \
  --role roles/iam.serviceAccountTokenCreator

3. 実行するMakeFileを作成する

SERVICE_ACCOUNT = "terraform@${PROJECT_ID}.iam.gserviceaccount.com"

SHELL := /usr/bin/env zsh

init:
	@GOOGLE_OAUTH_ACCESS_TOKEN="$(shell gcloud --impersonate-service-account=${SERVICE_ACCOUNT} auth print-access-token)" terraform init

plan:
	@GOOGLE_OAUTH_ACCESS_TOKEN="$(shell gcloud --impersonate-service-account=${SERVICE_ACCOUNT} auth print-access-token)" terraform plan

apply:
	@GOOGLE_OAUTH_ACCESS_TOKEN="$(shell gcloud --impersonate-service-account=${SERVICE_ACCOUNT} auth print-access-token)" terraform apply

destroy:
	@GOOGLE_OAUTH_ACCESS_TOKEN="$(shell gcloud --impersonate-service-account=${SERVICE_ACCOUNT} auth print-access-token)" terraform destroy

.PHONY: init plan apply destroy

4. TerraformをMakeFile経由で実行

make plan

参考サイト (元ネタ)

Stop Downloading Google Cloud Service Account Keys! | by Ryan Canty | Medium

Discussion