Tutorial ini menjelaskan cara memverifikasi bahwa infrastruktur sebagai kode (IaC) Anda tidak melanggar kebijakan organisasi atau detektor Security Health Analytics.
Tujuan
- Buatlah postur keamanan.
- Deploy postur pada project.
- Periksa apakah ada pelanggaran pada file Terraform contoh.
- Perbaiki pelanggaran di file Terraform, dan periksa kembali file tersebut untuk memverifikasi perbaikannya.
Sebelum memulai
Siapkan izin
-
Make sure that you have the following role or roles on the organization: Project Creator and Security Posture Admin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the organization.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role colunn to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Buka IAM - Pilih organisasi.
- Klik Berikan akses.
-
Di kolom New principals, masukkan ID pengguna Anda. Ini biasanya adalah alamat email untuk Akun Google.
- Di daftar Pilih peran, pilih peran.
- Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
- Klik Simpan.
Menyiapkan Cloud Shell
-
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
- Menemukan ID organisasi Anda:
gcloud organizations list
Menyiapkan lingkungan
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Security posture service and Security Command Center management:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com -
Menyiapkan autentikasi:
-
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti
SERVICE_ACCOUNT_NAME
dengan nama untuk akun layanan. -
Berikan peran IAM
roles/securityposture.reportCreator
ke akun layanan:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/securityposture.reportCreator
Ganti kode berikut:
SERVICE_ACCOUNT_NAME
: nama dari akun layanan.PROJECT_ID
: project ID dimana Anda membuat akun layanan
-
Membuat file kunci:
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ganti kode berikut:
FILE_NAME
: nama untuk file kunciSERVICE_ACCOUNT_NAME
: nama dari akun layanan.PROJECT_ID
: project ID dimana Anda membuat akun layanan
-
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Buat atau pilih project Google Cloud.
-
Membuat project Google Cloud:
gcloud projects create PROJECT_ID
Ganti
PROJECT_ID
dengan nama untuk project Google Cloud yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_ID
dengan nama project Google Cloud Anda.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Security posture service and Security Command Center management:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com -
Menyiapkan autentikasi:
-
Buat akun layanan:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
Ganti
SERVICE_ACCOUNT_NAME
dengan nama untuk akun layanan. -
Berikan peran IAM
roles/securityposture.reportCreator
ke akun layanan:gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/securityposture.reportCreator
Ganti kode berikut:
SERVICE_ACCOUNT_NAME
: nama dari akun layanan.PROJECT_ID
: project ID dimana Anda membuat akun layanan
-
Membuat file kunci:
gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Ganti kode berikut:
FILE_NAME
: nama untuk file kunciSERVICE_ACCOUNT_NAME
: nama dari akun layanan.PROJECT_ID
: project ID dimana Anda membuat akun layanan
-
- Salin project ID:
gcloud projects describe PROJECT_ID
- Lakukan inisialisasi Terraform:
terraform init
Membuat dan men-deploy postur
Di Cloud Shell, luncurkan Cloud Shell Editor. Untuk meluncurkan editor, klik Open Editor di toolbar jendela Cloud Shell.
Buat file YAML bernama
example-standard.yaml
.Tempelkan kode berikut ke dalam file Anda:
name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard state: ACTIVE policySets: - policies: - constraint: orgPolicyConstraintCustom: customConstraint: actionType: ALLOW condition: "resource.initialNodeCount == 3" description: Set initial node count to be exactly 3. displayName: fixedNodeCount methodTypes: - CREATE name: organizations/ORGANIZATION_ID/customConstraints/custom.fixedNodeCount resourceTypes: - container.googleapis.com/NodePool policyRules: - enforce: true policyId: fixedNodeCount - constraint: securityHealthAnalyticsCustomModule: config: customOutput: {} description: Set MTU for a network to be exactly 1000. predicate: expression: "!(resource.mtu == 1000)" recommendation: Only create networks whose MTU is 1000. resourceSelector: resourceTypes: - compute.googleapis.com/Network severity: HIGH displayName: fixedMTU moduleEnablementState: ENABLED policyId: fixedMTU - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_POLICY_ONLY_DISABLED policyId: bucket_policy_only_disabled - constraint: securityHealthAnalyticsModule: moduleEnablementState: ENABLED moduleName: BUCKET_LOGGING_DISABLED policyId: bucket_logging_disabled policySetId: policySet1
Ganti
ORGANIZATION_ID
dengan ID organisasi Anda.Di Cloud Shell, buat postur:
gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
Salin ID revisi postur yang dibuat perintah.
Deploy postur ke project Anda:
gcloud scc posture-deployments create organizations/ORGANIZATION_ID/locations/global/postureDeployments/example-standard \ --posture-name=organizations/ORGANIZATION_ID/locations/global/postures/example-standard \ --posture-revision-id="POSTURE_REVISION_ID" \ --target-resource=projects/PROJECT_ID
Ganti kode berikut:
ORGANIZATION_ID
: ID organisasi Anda.POSTURE REVISION_ID
: ID revisi postur yang Anda salin.PROJECT_ID
: project ID Anda.
Membuat file Terraform dan melakukan validasi
Di Cloud Shell, luncurkan Cloud Shell Editor.
Buat file Terraform bernama
main.tf
.Tempelkan kode berikut ke dalam file Anda:
terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 100 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 2 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = false }
Ganti
PROJECT_ID
dengan project ID dari project yang Anda buat.Di Cloud Shell, buat file paket Terraform dan konversikan ke format JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Buat laporan validasi IaC untuk
mainplan.json
:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Perintah ini menampilkan laporan validasi IaC yang menjelaskan pelanggaran berikut:
mtu
untukexample_network
bukan 1.000.initial_node_count
untukexample_node_pool
bukan 3.example_bucket
tidak mengaktifkan akses level bucket seragam.example_bucket
tidak mengaktifkan logging.
Selesaikan pelanggaran
Di Cloud Shell, luncurkan Cloud Shell Editor.
Perbarui file
main.tf
dengan perubahan berikut:terraform { required_providers { google = { source = "hashicorp/google" } } } provider "google" { region = "us-central1" zone = "us-central1-c" } resource "google_compute_network" "example_network"{ name = "example-network-1" delete_default_routes_on_create = false auto_create_subnetworks = false routing_mode = "REGIONAL" mtu = 1000 project = "PROJECT_ID" } resource "google_container_node_pool" "example_node_pool" { name = "example-node-pool-1" cluster = "example-cluster-1" project = "PROJECT_ID" initial_node_count = 3 node_config { preemptible = true machine_type = "e2-medium" } } resource "google_storage_bucket" "example_bucket" { name = "example-bucket-1" location = "EU" force_destroy = true project = "PROJECT_ID" uniform_bucket_level_access = true logging { log_bucket = "my-unique-logging-bucket" // Create a separate bucket for logs log_object_prefix = "tf-logs/" // Optional prefix for better structure } }
Ganti
PROJECT_ID
dengan project ID untuk project yang Anda buat.Di Cloud Shell, buat file paket Terraform dan konversikan ke format JSON:
terraform plan -out main.plan terraform show -json main.plan > mainplan.json
Buat ulang laporan validasi IaC untuk
mainplan.json
:gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
Menghapus project Google Cloud:
gcloud projects delete PROJECT_ID
Langkah selanjutnya
- Tinjau Memvalidasi IaC berdasarkan kebijakan organisasi.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.