🔐
サービスアカウントキーなしでTerraformを実行
概要
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