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 Fehlerkorrektur zu überprüfen.
Hinweise
Berechtigungen einrichten
-
Prüfen Sie, ob Sie die folgenden Rollen für die Organisation haben: Project Creator and Security Posture Admin
Auf Rollen prüfen
-
Öffnen Sie in der Google Cloud Console die Seite IAM.
IAM aufrufen - Wählen Sie die Organisation aus.
-
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.
- 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
-
Öffnen Sie in der Google Cloud Console die Seite IAM.
IAM aufrufen - Wählen Sie die Organisation aus.
- Klicken Sie auf Zugriff erlauben.
- Geben Sie in das Feld Neue Hauptkonten Ihre E-Mail-Adresse ein.
- Wählen Sie in der Liste Rolle auswählen eine Rolle aus.
- Wenn Sie weitere Rollen hinzufügen möchten, klicken Sie auf Weitere Rolle hinzufügen und fügen Sie weitere Rollen hinzu.
- Klicken Sie auf Speichern.
-
Cloud Shell einrichten
-
Aktivieren Sie Cloud Shell in der Google Cloud Console.
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.
- Organisations-ID ermitteln:
gcloud organizations list
Umgebung vorbereiten
- 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.
- Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Aktivieren Sie die Security posture service and Security Command Center management APIs:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Installieren Sie die Google Cloud CLI.
-
Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:
gcloud init
-
Create or select a Google Cloud project.
-
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.
-
-
Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.
-
Aktivieren Sie die Security posture service and Security Command Center management APIs:
gcloud services enable securityposture.googleapis.com
securitycentermanagement.googleapis.com - Kopieren Sie die Projekt-ID:
gcloud projects describe PROJECT_ID
- Terraform initialisieren:
terraform init
Sicherheitsstatus erstellen und bereitstellen
Starten Sie in Cloud Shell den Cloud Shell-Editor. Klicken Sie zum Starten des Editors in der Symbolleiste des Cloud Shell-Fensters auf
Editor öffnen.
Erstellen Sie eine YAML-Datei mit dem Namen
example-standard.yaml
.Fügen Sie den folgenden Code in Ihre Datei ein:
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
Ersetzen Sie
ORGANIZATION_ID
durch Ihre Organisations-ID.Erstellen Sie den Sicherheitsstatus in Cloud Shell:
gcloud scc postures create organizations/ORGANIZATION_ID/locations/global/postures/example-standard --posture-from-file=example-standard.yaml
Kopieren Sie die Überarbeitungs-ID des Sicherheitsstatus, die der Befehl generiert.
Stellen Sie den Sicherheitsstatus für Ihr 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 Statusüberarbeitung, die Sie kopiert haben.PROJECT_ID
: Ihre Projekt-ID.
Terraform-Datei erstellen und validieren
Starten Sie in Cloud Shell den Cloud Shell-Editor.
Erstellen Sie eine Terraform-Datei mit dem Namen
main.tf
.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.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
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:
- Der
mtu
fürexample_network
ist nicht 1.000. - Der
initial_node_count
fürexample_node_pool
ist nicht 3. - Für
example_bucket
ist der einheitliche Zugriff auf Bucket-Ebene nicht aktiviert. - Für
example_bucket
ist Logging nicht aktiviert.
- Der
Verstöße beheben
Starten Sie in Cloud Shell den Cloud Shell-Editor.
Nehmen Sie die folgenden Änderungen in 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.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
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
- Lesen Sie Ihren IaC anhand der Richtlinien Ihrer Organisation validieren.
- Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center