Beispielbericht zur IaC-Validierung 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.

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. Install the Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  8. Install the Google Cloud CLI.

  9. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  10. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

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

  13. Enable the Security posture service and Security Command Center management APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable securityposture.googleapis.com  securitycentermanagement.googleapis.com
  14. Kopieren Sie die Projektnummer. Sie benötigen die Projektnummer, um die Zielressource beim Bereitstellen der Konfiguration festzulegen.
    gcloud projects describe PROJECT_ID
  15. Initialisieren Sie Terraform:
    terraform init
  16. 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 die 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 Verhaltens, 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 die 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:

      • Der 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