🔐
TerraformでGoogle Cloudのサービスアカウントを作成し、必要なIAMロールを一括で付与する方法
こんにちは、今回は Terraform を使って Google Cloud のサービスアカウントを作成し、複数の IAM ロールを一括で付与する方法 を紹介します。
クラウドリソースの自動化を進める中で、Terraform のサービスアカウントに必要な権限を付与する構成は定番の一つ。この記事では、GCPでのサービスアカウント作成から、複数のロール付与までをシンプルなコードで解説します。
🧱 前提条件
- GCP プロジェクトが作成済み
- Terraform がローカルにインストール済み
-
gcloud auth application-default login
などで認証済み - Terraform に適切な初期設定(
provider
)がされている
📁 ディレクトリ構成例
.
├── main.tf
├── variables.tf
├── terraform.tfvars
✍️ main.tf(サービスアカウント作成+ロール付与)
provider "google" {
project = var.project
region = "asia-northeast1"
}
resource "google_service_account" "terraform" {
account_id = "terraform"
display_name = "Terraform用サービスアカウント"
}
# 必要なロール一覧(複数指定)
locals {
roles = [
"roles/artifactregistry.admin",
"roles/cloudbuild.builds.editor",
"roles/run.admin",
"roles/storage.admin",
"roles/iam.serviceAccountUser",
"roles/iam.serviceAccountCreator",
"roles/pubsub.admin",
"roles/secretmanager.secretAccessor",
"roles/serviceusage.serviceUsageAdmin",
"roles/workflows.admin",
]
}
resource "google_project_iam_member" "terraform_roles" {
for_each = toset(local.roles)
project = var.project
role = each.value
member = "serviceAccount:${google_service_account.terraform.email}"
}
📄 variables.tf
variable "project" {
type = string
description = "GCPのプロジェクトID"
}
🧩 terraform.tfvars
project = "your-project-id"
※ your-project-id
の部分は自身のプロジェクトIDに置き換えてください。
🚀 デプロイ手順
terraform init
terraform plan
terraform apply
apply
の途中で Do you want to perform these actions?
と表示されるので、yes
を入力して実行します。
✅ 補足ポイント
-
google_project_iam_member
リソースでfor_each
を使うことで、複数ロールの一括付与を簡潔に記述できます。 -
roles/cloudbuild.viewer
のような一部のロールは、プロジェクトレベルでは使えないためエラーになります(→公式ドキュメントで確認)。 - サービスアカウントは GCP コンソールから手動作成せず、Terraform で管理するのがおすすめです。
📚 参考
Terraform でのインフラ管理は柔軟で強力です。サービスアカウントやロール管理も IaC(Infrastructure as Code)で統一しておくことで、チーム開発や再現性の高い構成が実現できます!
ぜひ自分のプロジェクトでも試してみてください🔧
Discussion