Creare un report di convalida IaC di esempio


Questo tutorial descrive come verificare che la tua Infrastructure as Code (IaC) non violi i criteri dell'organizzazione o i rilevatori di Security Health Analytics.

Obiettivi

  • Crea una postura di sicurezza.
  • Eseguire il deployment della postura su un progetto.
  • Controlla la presenza di violazioni in un file Terraform di esempio.
  • Correggi le violazioni nel file Terraform e controlla di nuovo il file per verificare la correzione.

Prima di iniziare

Configurare le autorizzazioni

  1. Assicurati di disporre dei seguenti ruoli nell'organizzazione: Project Creator and Security Posture Admin

    Verifica i ruoli

    1. Nella console Google Cloud, vai alla pagina IAM.

      Vai a IAM
    2. Seleziona l'organizzazione.
    3. Nella colonna Entità, individua la riga contenente il tuo indirizzo email.

      Se il tuo indirizzo email non è in questa colonna, significa che non disponi di alcun ruolo.

    4. Nella colonna Ruolo per la riga contenente il tuo indirizzo email, controlla se l'elenco dei ruoli include quelli richiesti.

    Concedi i ruoli

    1. Nella console Google Cloud, vai alla pagina IAM.

      Vai a IAM
    2. Seleziona l'organizzazione.
    3. Fai clic su Concedi l'accesso.
    4. Nel campo Nuove entità, inserisci il tuo indirizzo email.
    5. Nell'elenco Seleziona un ruolo, scegli un ruolo.
    6. Per concedere altri ruoli, fai clic su Aggiungi un altro ruolo e aggiungi ciascun ruolo aggiuntivo.
    7. Fai clic su Salva.

Configura Cloud Shell

  1. Nella console Google Cloud, attiva Cloud Shell.

    Attiva Cloud Shell

    Nella parte inferiore della console Google Cloud viene avviata una sessione di Cloud Shell che mostra un prompt della riga di comando. Cloud Shell è un ambiente shell con Google Cloud CLI già installato e con valori già impostati per il progetto attuale. L'inizializzazione della sessione può richiedere alcuni secondi.

  2. Trova l'ID organizzazione:
    gcloud organizations list

prepara l'ambiente

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita le API Security posture service and Security Command Center management.

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  7. Installa Google Cloud CLI.
  8. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  9. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  10. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  11. Abilita le API Security posture service and Security Command Center management.

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  12. Copia l'ID progetto:
    gcloud projects describe PROJECT_ID
  13. Inizializza Terraform:
    terraform init

Crea ed esegui il deployment di una postura

  1. In Cloud Shell, avvia l'editor di Cloud Shell. Per avviare l'editor, fai clic su Pulsante editor di codice Apri editor sulla barra degli strumenti della finestra di Cloud Shell.

  2. Crea un file YAML denominato example-standard.yaml.

  3. Incolla il seguente codice nel file:

    name: organizations/ORGANIZATION_ID/locations/global/postures/example-standard
    state: ACTIVE
    policySets:
    - policySetId: policySet1
    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
    

    Sostituisci ORGANIZATION_ID con l'ID organizzazione.

  4. In Cloud Shell, crea la postura:

    gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
    
  5. Copia l'ID revisione postura generato dal comando.

  6. Esegui il deployment della postura nel progetto:

    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
    

    Sostituisci quanto segue:

    • ORGANIZATION_ID: l'ID della tua organizzazione.
    • POSTURE REVISION_ID: l'ID revisione della postura che hai copiato.
    • PROJECT_ID: il tuo ID progetto.

Crea il file Terraform ed esegui la convalida

  1. In Cloud Shell, avvia l'editor di Cloud Shell.

  2. Crea un file Terraform denominato main.tf.

  3. Incolla il seguente codice nel file:

    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
    }
    

    Sostituisci PROJECT_ID con l'ID del progetto che hai creato.

  4. In Cloud Shell, crea il file del piano Terraform e convertilo nel formato JSON:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  5. Crea il report di convalida IaC per mainplan.json:

    gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
    

    Questo comando restituisce un report di convalida IaC che descrive le seguenti violazioni:

    • Il mtu di example_network non è 1000.
    • Il valore di initial_node_count per example_node_pool non è 3.
    • Per example_bucket non è abilitato l'accesso uniforme a livello di bucket.
    • Il logging non è abilitato per example_bucket.

Risolvi le violazioni

  1. In Cloud Shell, avvia l'editor di Cloud Shell.

  2. Aggiorna il file main.tf apportando le seguenti modifiche:

    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
      }
    }
    

    Sostituisci PROJECT_ID con l'ID del progetto che hai creato.

  3. In Cloud Shell, crea il file del piano Terraform e convertilo in formato JSON:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  4. Ricrea il report di convalida IaC per mainplan.json:

    gcloud scc iac-validation-reports create organizations/ORGANIZATION_ID/locations/global --tf-plan-file=mainplan.json
    

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

    Elimina un progetto Google Cloud:

    gcloud projects delete PROJECT_ID

Passaggi successivi