Beispielbericht für IaC-Validierung erstellen


In dieser Anleitung wird beschrieben, wie Sie prüfen können, ob Ihre Infrastruktur als Code (IaC) gegen Ihre Organisationsrichtlinien oder Security Health Analytics-Detektoren verstößt.

Lernziele

  • Erstellen Sie einen Sicherheitsstatus.
  • Stellen Sie den Sicherheitsstatus für ein Projekt bereit.
  • Prüfen Sie eine Terraform-Beispieldatei auf Verstöße.
  • Beheben Sie die Verstöße in der Terraform-Datei und prüfen Sie die Datei noch einmal, um die Korrektur zu ermitteln.

Hinweise

Berechtigungen einrichten

  1. Prüfen Sie, ob Sie die folgenden Rollen für die Organisation haben: Project Creator and Security Posture Admin

    Auf Rollen prüfen

    1. Öffnen Sie in der Google Cloud Console die Seite IAM.

      IAM aufrufen
    2. Wählen Sie die Organisation aus.
    3. Suchen Sie in der Spalte Hauptkonto die Zeile mit Ihrer E-Mail-Adresse.

      Ist Ihre E-Mail-Adresse nicht in dieser Spalte enthalten, haben Sie keine Rollen.

    4. Prüfen Sie in der Spalte Rolle der Zeile mit Ihrer E-Mail-Adresse, ob die Liste der Rollen die erforderlichen Rollen enthält.

    Rollen zuweisen

    1. Öffnen Sie in der Google Cloud Console die Seite IAM.

      IAM aufrufen
    2. Wählen Sie die Organisation aus.
    3. Klicken Sie auf Zugriff erlauben.
    4. Geben Sie in das Feld Neue Hauptkonten Ihre E-Mail-Adresse ein.
    5. Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
    6. Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
    7. Klicken Sie auf Speichern.

Cloud Shell einrichten

  1. Aktivieren Sie Cloud Shell in der Google Cloud Console.

    Cloud Shell aktivieren

    Unten in der Google Cloud Console wird eine Cloud Shell-Sitzung gestartet und eine Eingabeaufforderung angezeigt. Cloud Shell ist eine Shell-Umgebung, in der das Google Cloud CLI bereits installiert ist und Werte für Ihr aktuelles Projekt bereits festgelegt sind. Das Initialisieren der Sitzung kann einige Sekunden dauern.

  2. Suchen Sie nach Ihrer Organisations-ID:
    gcloud organizations list

Umgebung vorbereiten

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie die Security posture service and Security Command Center management APIs:

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  7. Installieren Sie die Google Cloud CLI.
  8. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  9. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  10. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  11. Aktivieren Sie die Security posture service and Security Command Center management APIs:

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  12. Kopieren Sie die Projekt-ID:
    gcloud projects describe PROJECT_ID
  13. Initialisieren Sie Terraform:
    terraform init

Sicherheitsstatus erstellen und bereitstellen

  1. Starten Sie in Cloud Shell den Cloud Shell-Editor. Klicken Sie zum Starten des Editors in der Symbolleiste des Cloud Shell-Fensters auf Schaltfläche „Code-Editor“ Editor öffnen.

  2. Erstellen Sie eine YAML-Datei mit dem Namen example-standard.yaml.

  3. Fügen Sie den folgenden Code in Ihre Datei ein:

    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
    

    Ersetzen Sie ORGANIZATION_ID durch Ihre Organisations-ID.

  4. Erstellen Sie in Cloud Shell den Sicherheitsstatus:

    gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
    
  5. Kopieren Sie die ID der Versionsversion des Sicherheitsstatus, die der Befehl generiert.

  6. Stellen Sie den Sicherheitsstatus in Ihrem Projekt bereit:

    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
    

    Ersetzen Sie Folgendes:

    • ORGANIZATION_ID: Ihre Organisations-ID.
    • POSTURE REVISION_ID: Die ID der Version des Sicherheitsstatus, die Sie kopiert haben.
    • PROJECT_ID: Ihre Projekt-ID.

Terraform-Datei erstellen und validieren

  1. Starten Sie in Cloud Shell den Cloud Shell-Editor.

  2. Erstellen Sie eine Terraform-Datei mit dem Namen main.tf.

  3. Fügen Sie den folgenden Code in Ihre Datei ein:

    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
    }
    

    Ersetzen Sie PROJECT_ID durch die Projekt-ID des von Ihnen erstellten Projekts.

  4. Erstellen Sie in Cloud Shell die Terraform-Plandatei und konvertieren Sie sie in das JSON-Format:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  5. Erstellen Sie den IaC-Validierungsbericht für mainplan.json:

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

    Dieser Befehl gibt einen IaC-Validierungsbericht zurück, der die folgenden Verstöße beschreibt:

    • mtu für example_network ist nicht 1.000.
    • initial_node_count für example_node_pool ist nicht 3.
    • Für example_bucket ist kein einheitlicher Zugriff auf Bucket-Ebene aktiviert.
    • Für example_bucket ist Logging nicht aktiviert.

Verstöße beheben

  1. Starten Sie in Cloud Shell den Cloud Shell-Editor.

  2. Nehmen Sie folgende Änderungen an der Datei main.tf vor:

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

    Ersetzen Sie PROJECT_ID durch die Projekt-ID des von Ihnen erstellten Projekts.

  3. Erstellen Sie in Cloud Shell die Terraform-Plandatei und konvertieren Sie sie in das JSON-Format:

    terraform plan -out main.plan
    terraform show -json main.plan > mainplan.json
    
  4. Erstellen Sie den IaC-Validierungsbericht für mainplan.json noch einmal:

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

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

    Google Cloud-Projekt löschen:

    gcloud projects delete PROJECT_ID

Nächste Schritte