Beispiel für einen IaC-Validierungsbericht erstellen


In dieser Anleitung wird beschrieben, wie Sie überprüfen können, ob Ihre Infrastructure-as-Code-Konfigurationen (IaC) nicht gegen Ihre Organisationsrichtlinien oder Security Health Analytics-Erkennungstypen verstoßen.

Lernziele

  • Sicherheitsstatus erstellen
  • Stellen Sie die Haltung in einem Projekt bereit.
  • Eine Terraform-Beispieldatei auf Verstöße prüfen
  • Beheben Sie die Verstöße in der Terraform-Datei und prüfen Sie die Datei noch einmal, um die Korrektur zu bestätigen.

Hinweise

Berechtigungen einrichten

  1. Make sure that you have the following role or roles on the organization: Project Creator and Security Posture Admin

    Check for the roles

    1. In the Google Cloud console, go to the IAM page.

      Go to IAM
    2. Select the organization.
    3. 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.

    4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

    Grant the roles

    1. In the Google Cloud console, go to the IAM page.

      Zu IAM
    2. Wählen Sie die Organisation aus.
    3. Klicken Sie auf Zugriff erlauben.
    4. Geben Sie im Feld Neue Hauptkonten Ihre Nutzer-ID ein. Dies ist in der Regel die E-Mail-Adresse eines Google-Kontos.

    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. In the Google Cloud console, activate Cloud Shell.

      Activate Cloud Shell

      At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    2. So ermitteln Sie Ihre Organisations-ID:
      gcloud organizations list
    3. Umgebung vorbereiten

      1. 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.
      2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

        Go to project selector

      3. Verify that billing is enabled for your Google Cloud project.

      4. Enable the Security posture service and Security Command Center management APIs.

        Enable the APIs

      5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

        Go to project selector

      6. Verify that billing is enabled for your Google Cloud project.

      7. Enable the Security posture service and Security Command Center management APIs.

        Enable the APIs

      8. Kopieren Sie die Projektnummer. Sie benötigen die Projektnummer, um die Zielressource beim Bereitstellen der Konfiguration festzulegen.
        gcloud projects describe PROJECT_ID
      9. Initialisieren Sie Terraform:
        terraform init
      10. Status erstellen und bereitstellen

        1. Starten Sie den Cloud Shell-Editor in Cloud Shell. 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.

        1. Erstellen Sie in Cloud Shell die Haltung:

          gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
          
        2. Kopieren Sie die ID der Haltungsüberarbeitung, die mit dem Befehl generiert wird.

        3. Stellen Sie die Haltung 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_NUMBER
          

          Ersetzen Sie Folgendes:

          • ORGANIZATION_ID: Ihre Organisations-ID.
          • POSTURE REVISION_ID: Die ID der Überarbeitung Ihres Beitrags, die Sie kopiert haben.
          • PROJECT_NUMBER: Ihre Projektnummer.

        Terraform-Datei erstellen und validieren

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

        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, in dem die folgenden Verstöße beschrieben werden:

          • Die mtu für example_network ist nicht 1.000.
          • Der 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 kein Logging aktiviert.

        Verstöße beheben

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

        2. Nehmen Sie die folgenden Ä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 neu:

          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

      1. In the Google Cloud console, go to the Manage resources page.

        Go to Manage resources

      2. In the project list, select the project that you want to delete, and then click Delete.
      3. In the dialog, type the project ID, and then click Shut down to delete the project.

      Nächste Schritte