Introduction
Saat belajar GCP, jangan langsung pakai akun Google pribadi untuk provisioning resource. Pakai pola service account impersonation — akun kita cuma untuk auth, semua aksi Terraform/gcloud lewat service account yang lebih strict hak
aksesnya.
Ini setup yang saya pakai untuk belajar Terraform + GCP.
Prepare
Taruh ini di shell profile (~/.zshrc) atau export manual tiap sesi:
export PROJECT_ID="project-123456-7890-4555-333"
export GOOGLE_IMPERSONATE_SERVICE_ACCOUNT="learn-devops-engineer@${PROJECT_ID}.iam.gserviceaccount.com"
Step 1 — Buat Service Account (GCP Console)
- Buka https://console.cloud.google.com/ → pastikan project yang benar.
- IAM & Admin → Service Accounts → + Create Service Account.
- Isi:
- Service account name:
learn-devops-engineer - Service account ID: auto, samakan dengan email SA.
- Service account name:
- Grant this service account access to project → pilih Owner (untuk belajar; production pakai least-privilege).
- Klik Done.
Catat email SA — harusnya: learn-devops-engineer@project-project-123456-7890-4555-333.iam.gserviceaccount.com

Step 2 — Izinkan Akun Pribadi untuk Impersonate SA
Masih di IAM & Admin → IAM → + Grant Access:
- New principals: isi email Google pribadi kita (mis.
you@gmail.com). - Assign roles (centang 2):
Service Account User—roles/iam.serviceAccountUserService Account Token Creator—roles/iam.serviceAccountTokenCreator
- Klik Save.
⚠ Tanpa 2 role ini,
gcloud auth application-default login --impersonate-service-account=…akan returnPermission denied.
Step 3 — Aktifkan API Wajib
APIs & Services → Library, enable:
- IAM Service Account Credentials API
- Cloud Resource Manager API
- Compute Engine API (kalau nanti pakai VM/GKE)
- Kubernetes Engine API (kalau nanti GKE)

Step 4 — Login dari Laptop
# (1) Login akun pribadi — popup browser, sekali per mesin gcloud auth login # (2) Set project aktif gcloud config set project "$PROJECT_ID" # (3) ADC dengan impersonation — popup consent kedua gcloud auth application-default login \ --impersonate-service-account="$GOOGLE_IMPERSONATE_SERVICE_ACCOUNT"
Browser kedua akan terbuka dengan pesan: “Google Cloud Platform wants to access your Google Account via service account learn-develops-engineer@…” → klik Allow.
Step 5 — Verifikasi
# Project aktif gcloud config get-value project # → project-123456-7890-4555-333 # Akun login user-level gcloud auth list # → * you@gmail.com (active) # Token ADC via impersonation — INI yang paling penting gcloud auth application-default print-access-token | head -c 50 # → eyta... (kalau print panjang tanpa error = END-TO-END OK)
Cek “efektif identitas” yang dipakai Terraform/SDK:
gcloud projects get-iam-policy "$PROJECT_ID" \ --impersonate-service-account="$GOOGLE_IMPERSONATE_SERVICE_ACCOUNT" \ --format='value(bindings.role)' | sort -u | head # → Harusnya muncul role-role dari SA, bukan dari akun pribadi.
Step 6 — Sambungkan ke Terraform
Saat nanti bikin provider "google" di days-6-gcp-terragrunt/modules/* atau live/*, jangan pakai file JSON key. Cukup:
provider "google" {
project = var.project_id
impersonate_service_account = var.impersonate_sa
region = var.region
}
Terraform akan otomatis pakai ADC yang sudah kita set di Step 4. Tidak ada secret yang perlu di-commit ke Git. 🎉

Admin website igunawan.com, System Administrator, DevOps Engineer