Sebelum memulai
Instal Google Cloud CLI
Untuk menggunakan gcloud beta terraform vet
, Anda harus menginstal Google Cloud CLI terlebih dahulu:
Instal Google Cloud CLI, tetapi lewati perintah
gcloud init
.Jalankan perintah berikut untuk menginstal komponen terraform-tools:
gcloud components update gcloud components install terraform-tools
Pastikan gcloud CLI sudah terinstal dengan menjalankan perintah berikut:
gcloud beta terraform vet --help
Mendapatkan izin yang diperlukan
Akun Google Cloud yang Anda gunakan untuk validasi harus memiliki izin berikut:
getIamPolicy
:gcloud beta terraform vet
perlu mendapatkan kebijakan Identity and Access Management (IAM) lengkap dan menggabungkannya dengan anggota dan binding guna mendapatkan status akhir yang akurat untuk memvalidasi.resourcemanager.projects.get
:gcloud beta terraform vet
perlu mendapatkan ancestry project dari API agar dapat membuat Nama Aset CAI lengkap secara akurat untuk project apa pun yang terkait dengan resource yang divalidasi.resourcemanager.folders.get
:gcloud beta terraform vet
perlu mendapatkan ancestry folder dari API agar dapat membuat Nama Aset CAI lengkap secara akurat jika resource yang divalidasi berisi resource terkait folder.
Menyiapkan library kebijakan
Anda harus membuat library kebijakan untuk menggunakan alat ini.
Memvalidasi kebijakan
1. Membuat rencana Terraform
gcloud beta terraform vet
kompatibel dengan Terraform 0.12+. gcloud beta terraform vet
menggunakan JSON terraform plan
sebagai inputnya. Anda dapat membuat file JSON dengan menjalankan perintah berikut di direktori Terraform:
terraform plan -out=tfplan.tfplan terraform show -json ./tfplan.tfplan > ./tfplan.json
2. Jalankan gcloud beta terraform vet
gcloud beta terraform vet
memungkinkan Anda memvalidasi JSON terraform plan
terhadap POLICY_LIBRARY_REPO organisasi Anda. Contoh:
git clone POLICY_LIBRARY_REPO POLICY_LIBRARY_DIR gcloud beta terraform vet tfplan.json --policy-library=POLICY_LIBRARY_DIR
Saat Anda menjalankan perintah ini, gcloud beta terraform vet
akan mengambil data project dengan menggunakan Google Cloud API yang diperlukan untuk validasi rencana Anda secara akurat.
Flag
--policy-library=POLICY_LIBRARY_DIR
- Direktori yang berisi library kebijakan.--project=PROJECT_ID
-gcloud beta terraform vet
menerima flag--project
opsional. Flag ini menentukan project default saat membangun ancestry (dari hierarki resource Google Cloud) untuk resource apa pun yang tidak memiliki kumpulan project eksplisit.--format=FORMAT
- Defaultnya adalah yaml. Format yang didukung adalah:default
,json
,none
,text
,yaml
. Untuk mengetahui detail selengkapnya, jalankan $ format topik gcloud.
Kode exit dan output
- Jika semua batasan telah divalidasi, perintah akan menampilkan kode exit 0 dan tidak menampilkan pelanggaran.
- Jika pelanggaran ditemukan,
gcloud beta terraform vet
akan menampilkan kode exit 2, dan menampilkan daftar pelanggaran. Misalnya, output JSON mungkin terlihat seperti ini:
[ { "constraint": "GCPIAMAllowedPolicyMemberDomainsConstraintV2.service_accounts_only", "constraint_config": { "api_version": "constraints.gatekeeper.sh/v1alpha1", "kind": "GCPIAMAllowedPolicyMemberDomainsConstraintV2", "metadata": { "annotations": { "description": "Checks that members that have been granted IAM roles belong to allowlisted domains.", "validation.gcp.forsetisecurity.org/originalName": "service_accounts_only", "validation.gcp.forsetisecurity.org/yamlpath": "policies/constraints/iam_service_accounts_only.yaml" }, "name": "service-accounts-only" }, "spec": { "match": { "target": [ "organizations/**" ] }, "parameters": { "domains": [ "gserviceaccount.com" ] }, "severity": "high" } }, "message": "IAM policy for //cloudresourcemanager.googleapis.com/projects/PROJECT_ID contains member from unexpected domain: user:me@example.com", "metadata": { "ancestry_path": "organizations/ORG_ID/projects/PROJECT_ID", "constraint": { "annotations": { "description": "Checks that members that have been granted IAM roles belong to allowlisted domains.", "validation.gcp.forsetisecurity.org/originalName": "service_accounts_only", "validation.gcp.forsetisecurity.org/yamlpath": "policies/constraints/iam_service_accounts_only.yaml" }, "labels": {}, "parameters": { "domains": [ "gserviceaccount.com" ] } }, "details": { "member": "user:me@example.com", "resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID" } }, "resource": "//cloudresourcemanager.googleapis.com/projects/PROJECT_ID", "severity": "high" } ]
Contoh CI/CD
Skrip bash untuk menggunakan gcloud beta terraform vet
di pipeline CI/CD bisa terlihat seperti ini:
terraform plan -out=tfplan.tfplan terraform show -json ./tfplan.tfplan > ./tfplan.json git clone POLICY_LIBRARY_REPO POLICY_LIBRARY_DIR VIOLATIONS=$(gcloud beta terraform vet tfplan.json --policy-library=POLICY_LIBRARY_DIR --format=json) retVal=$? if [ $retVal -eq 2 ]; then # Optional: parse the VIOLATIONS variable as json and check the severity level echo "$VIOLATIONS" echo "Violations found; not proceeding with terraform apply" exit 1 fi if [ $retVal -ne 0]; then echo "Error during gcloud beta terraform vet; not proceeding with terraform apply" exit 1 fi echo "No policy violations detected; proceeding with terraform apply" terraform apply
Developer juga dapat menggunakan gcloud beta terraform vet
secara lokal untuk menguji perubahan Terraform sebelum menjalankan pipeline CI/CD Anda.