Membuat contoh laporan validasi IaC


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

  1. Pastikan Anda memiliki peran berikut di organisasi: Project Creator and Security Posture Admin

    Memeriksa peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih organisasi.
    3. Di kolom Akun utama, cari baris yang berisi alamat email Anda.

      Jika alamat email Anda tidak ada di kolom tersebut, berarti Anda tidak memiliki peran apa pun.

    4. Di kolom Peran untuk baris yang berisi alamat email Anda, periksa apakah daftar peran menyertakan peran yang diperlukan.

    Memberikan peran

    1. Di konsol Google Cloud, buka halaman IAM.

      Buka IAM
    2. Pilih organisasi.
    3. Klik Berikan akses.
    4. Di kolom Akun utama baru, masukkan alamat email Anda.
    5. Di daftar Pilih peran, pilih peran.
    6. Untuk memberikan peran tambahan, klik Tambahkan peran lain, lalu tambahkan setiap peran tambahan.
    7. Klik Simpan.

Menyiapkan Cloud Shell

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    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.

  2. Menemukan ID organisasi Anda:
    gcloud organizations list

Menyiapkan lingkungan

  1. 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.
  2. Menginstal Google Cloud CLI.
  3. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. 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.

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Aktifkan API Security posture service and Security Command Center management:

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  7. Menyiapkan autentikasi:

    1. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    2. 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
    3. 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 kunci
      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
  8. Menginstal Google Cloud CLI.
  9. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  10. 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.

  11. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  12. Aktifkan API Security posture service and Security Command Center management:

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  13. Menyiapkan autentikasi:

    1. Buat akun layanan:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Ganti SERVICE_ACCOUNT_NAME dengan nama untuk akun layanan.

    2. 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
    3. 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 kunci
      • SERVICE_ACCOUNT_NAME: nama dari akun layanan.
      • PROJECT_ID: project ID dimana Anda membuat akun layanan
  14. Salin project ID:
    gcloud projects describe PROJECT_ID
  15. Lakukan inisialisasi Terraform:
    terraform init

Membuat dan men-deploy postur

  1. Di Cloud Shell, luncurkan Cloud Shell Editor. Untuk meluncurkan editor, klik Tombol Editor Kode Open Editor di toolbar jendela Cloud Shell.

  2. Buat file YAML bernama example-standard.yaml.

  3. 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.

  4. Di Cloud Shell, buat postur:

    gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
    
  5. Salin ID revisi postur yang dibuat perintah.

  6. 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

  1. Di Cloud Shell, luncurkan Cloud Shell Editor.

  2. Buat file Terraform bernama main.tf.

  3. 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.

  4. Di Cloud Shell, buat file paket Terraform dan konversikan ke format JSON:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  5. 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 untuk example_network bukan 1.000.
    • initial_node_count untuk example_node_pool bukan 3.
    • example_bucket tidak mengaktifkan akses level bucket seragam.
    • example_bucket tidak mengaktifkan logging.

Selesaikan pelanggaran

  1. Di Cloud Shell, luncurkan Cloud Shell Editor.

  2. 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.

  3. Di Cloud Shell, buat file paket Terraform dan konversikan ke format JSON:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  4. 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