Tutorial ini menjelaskan cara memverifikasi bahwa infrastruktur sebagai kode (IaC) Anda tidak melanggar kebijakan organisasi atau detektor Analisis Kondisi Keamanan.
Tujuan
- Buat postur keamanan.
- Deploy postur di project.
- Periksa apakah ada pelanggaran dalam contoh file Terraform.
- Perbaiki pelanggaran dalam file Terraform, lalu periksa kembali file untuk memverifikasi perbaikan.
Sebelum memulai
Menyiapkan izin
-
Di konsol Google Cloud , buka halaman IAM.
Buka IAM - Pilih organisasi.
-
Di kolom Akun utama, temukan semua baris yang mengidentifikasi Anda atau grup yang Anda ikuti. Untuk mengetahui grup mana saja yang Anda ikuti, hubungi administrator Anda.
- Untuk semua baris yang menentukan atau menyertakan Anda, periksa kolom Peran untuk melihat apakah daftar peran menyertakan peran yang diperlukan.
-
Di konsol Google Cloud , buka halaman IAM.
Buka IAM - Pilih organisasi.
- Klik Grant access.
-
Di kolom New principals, masukkan ID pengguna Anda. Biasanya, ini adalah alamat email untuk Akun Google.
- Klik Pilih peran, lalu telusuri peran.
- Untuk memberikan peran tambahan, klik Add another role, lalu tambahkan tiap peran tambahan.
- Klik Simpan.
Pastikan Anda memiliki peran berikut di organisasi: Project Creator dan Security Posture Admin
Memeriksa peran
Memberikan peran
Menyiapkan Cloud Shell
- Temukan ID organisasi Anda:
gcloud organizations list
Di konsol Google Cloud , aktifkan Cloud Shell.
Di bagian bawah konsol Google Cloud , sesi Cloud Shell akan dimulai 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 pada sesi.
Menyiapkan lingkungan
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan API pengelolaan Security Command Center dan layanan postur keamanan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com -
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
Buat atau pilih Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Pilih project: Memilih project tidak memerlukan peran IAM tertentu—Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Buat Google Cloud project:
gcloud projects create PROJECT_ID
Ganti
PROJECT_IDdengan nama untuk Google Cloud project yang Anda buat. -
Pilih project Google Cloud yang Anda buat:
gcloud config set project PROJECT_ID
Ganti
PROJECT_IDdengan nama project Google Cloud Anda.
-
Verifikasi bahwa penagihan diaktifkan untuk project Google Cloud Anda.
Aktifkan API pengelolaan Security Command Center dan layanan postur keamanan:
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran.gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Salin nomor project. Anda akan memerlukan nomor project untuk menetapkan resource target saat men-deploy postur.
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 dihasilkan 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_NUMBER
Ganti kode berikut:
ORGANIZATION_ID: ID organisasi Anda.POSTURE REVISION_ID: ID revisi postur Anda yang Anda salin.PROJECT_NUMBER: nomor project Anda.
Buat file Terraform dan 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_IDdengan project ID project yang Anda buat.Di Cloud Shell, buat file rencana 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:
mtuuntukexample_networkbukan 1000.initial_node_countuntukexample_node_poolbukan 3.example_buckettidak mengaktifkan akses level bucket yang seragam.example_buckettidak mengaktifkan logging.
Mengatasi pelanggaran
Di Cloud Shell, luncurkan Cloud Shell Editor.
Perbarui file
main.tfdengan 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_IDdengan project ID dari project yang Anda buat.Di Cloud Shell, buat file rencana 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 Google Cloud project:
gcloud projects delete PROJECT_ID
Langkah berikutnya
- Tinjau Validasi IaC Anda berdasarkan kebijakan organisasi Anda.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.