概要
Terraformの実行方法で多くの場合サービスアカウントキーをダウンロードする手順となっているため、
GCP上のリソース作成をサービスアカウントキーを生成せずにTerraformで行う方法を記載する
手順
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
2. 操作ユーザにサービス アカウント トークン作成者 (roles/iam.serviceAccountTokenCreator) 権限を付与
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member user:${USER_EMAIL} \
--role roles/iam.serviceAccountTokenCreator
3. 実行するMakeFileを作成する
"sa"を「1.」で作成したサービスアカウント名に変更
SERVICE_ACCOUNT = "sa"
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
「make: Nothing to be done for `plan'.」が発生
コマンド行がTABで始まっていない場合発生する。
参考サイト (元ネタ)
Stop Downloading Google Cloud Service Account Keys! | by Ryan Canty | Medium