Ergebnisbenachrichtigungen für Pub/Sub aktivieren

Auf dieser Seite wird erläutert, wie Sie mit der Security Command Center API Ergebnisbenachrichtigungen für Pub/Sub aktivieren.

Sie können Benachrichtigungen so konfigurieren, dass neue Ergebnisse und Ergebnisaktualisierungen nahezu in Echtzeit automatisch an ein Pub/Sub-Thema gesendet werden. Sie können diese Benachrichtigungen verwenden, um automatisierte Aktionen auszulösen, z. B. das Aufrufen von Cloud Run-Funktionen für Antworten, Anreicherung oder Fehlerbehebung. Beispiellösungen finden Sie im Open-Source-Repository von Security Command Center unter Cloud Run Functions-Code.

Wenn Sie die Einrichtung lieber über die Google Cloud Console als über die API vornehmen möchten, lesen Sie den Abschnitt Kontinuierliche Exporte. Kontinuierliche Exporte bieten dieselben Funktionen wie API-Benachrichtigungen.

Alternativ können Sie Ergebnisse zur Analyse nach BigQuery exportieren.

Hinweis

Bevor Sie Benachrichtigungen zu Ergebnissen aktivieren, müssen Sie bestimmte IAM-Rollen (Identity and Access Management) und -Berechtigungen erhalten, die Security Command Center API aktivieren und sich mit den Einschränkungen des Datenstandorts vertraut machen.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Einrichten und Konfigurieren von Security Command Center API-Benachrichtigungen benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Security Command Center API aktivieren

So aktivieren Sie die Security Command Center API:

Rollen, die zum Aktivieren von APIs erforderlich sind

Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen

gcloud services enable securitycenter.googleapis.com

Datenstandort und Benachrichtigungen

Wenn Datenstandort für Security Command Center aktiviert ist, unterliegen die Konfigurationen, die kontinuierliche Exporte nach Pub/Sub definieren (notificationConfig-Ressourcen), der Datenstandortkontrolle und werden an Ihrem Security Command Center-Standort gespeichert.

Wenn Sie Ergebnisse in einem Security Command Center-Standort nach Pub/Sub exportieren möchten, müssen Sie den kontinuierlichen Export am selben Security Command Center-Standort wie die Ergebnisse konfigurieren.

Da die in kontinuierlichen Exporten verwendeten Filter Daten enthalten können, die den Datenstandortkontrollen unterliegen, müssen Sie den richtigen Standort angeben, bevor Sie sie erstellen. Security Command Center schränkt nicht ein, an welchem Speicherort Sie Exporte erstellen.

Kontinuierliche Exporte werden nur an dem Standort gespeichert, an dem sie erstellt werden. Sie können nicht an anderen Standorten aufgerufen oder bearbeitet werden.

Nachdem Sie einen kontinuierlichen Export erstellt haben, können Sie seinen Speicherort nicht mehr ändern. Wenn Sie den Speicherort ändern möchten, müssen Sie den kontinuierlichen Export löschen und am neuen Speicherort neu erstellen.

Informationen zur Verwendung von Security Command Center, wenn der Datenstandort aktiviert ist, finden Sie unter Regionale Endpunkte für Security Command Center.

Pub-/Sub-Thema einrichten

In dieser Aufgabe erstellen und abonnieren Sie das Pub/Sub-Thema, an das Sie Benachrichtigungen senden möchten.

Schritt 1: Pub/Sub einrichten

So richten Sie ein Pub/Sub-Thema ein und abonnieren es:

  1. Zur Google Cloud Console.

    Rufen Sie die Google Cloud Console auf.

  2. Wählen Sie das Projekt aus, für das Sie die Security Command Center API aktiviert haben.

  3. Klicken Sie auf Cloud Shell aktivieren.

  4. Optional: Führen Sie den folgenden Befehl aus, um ein neues Pub/Sub-Thema zu erstellen:

    gcloud pubsub topics create TOPIC_ID
    

    Ersetzen Sie TOPIC_ID durch einen Themennamen.

  5. Erstellen Sie ein Abo für das Thema:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic=TOPIC_ID
    

    Ersetzen Sie Folgendes:

    • SUBSCRIPTION_ID: die Abo-ID
    • TOPIC_ID: die Themen-ID

Weitere Informationen zum Einrichten von Pub/Sub finden Sie unter Themen und Abos verwalten.

Schritt 2: Rolle für Pub/Sub-Thema zuweisen

Zum Erstellen eines NotificationConfig benötigen Sie die Rolle „Pub/Sub-Administrator“ (roles/pubsub.admin) für das Pub/Sub-Thema, für das Sie ein Abo erstellt haben.

So weisen Sie diese Rolle zu:

  1. Zur Google Cloud Console.

    Rufen Sie die Google Cloud Console auf.

  2. Wählen Sie das Projekt aus, für das Sie die Security Command Center API aktiviert haben.

  3. Klicken Sie auf Cloud Shell aktivieren.

  4. Weisen Sie Ihrem Google-Konto die erforderliche Rolle für das Pub/Sub-Thema zu:

    gcloud pubsub topics add-iam-policy-binding \
        projects/PUBSUB_PROJECT/topics/TOPIC_ID \
        --member="user:GOOGLE_ACCOUNT" \
        --role="roles/pubsub.admin"
    

    Ersetzen Sie Folgendes:

    • PUBSUB_PROJECT: das Google Cloud Projekt, das Ihr Pub/Sub-Thema enthält
    • TOPIC_ID: die Themen-ID
    • GOOGLE_ACCOUNT: die E-Mail-Adresse für Ihr Google-Konto

NotificationConfig erstellen

Bevor Sie ein NotificationConfig erstellen, beachten Sie, dass jede Organisation nur eine begrenzte Anzahl von NotificationConfig-Dateien haben kann. Weitere Informationen finden Sie unter Kontingente und Limits.

Das Feld NotificationConfig enthält ein Feld filter, das Benachrichtigungen auf nützliche Ereignisse beschränkt. In diesem Feld werden alle Filter akzeptiert, die in der Methode findings.list der Security Command Center API verfügbar sind.

Wenn Sie ein NotificationConfig erstellen, geben Sie ein übergeordnetes Element für das NotificationConfig aus der Google Cloud Ressourcenhierarchie an, entweder eine Organisation, einen Ordner oder ein Projekt. Wenn Sie die NotificationConfig später abrufen, aktualisieren oder löschen müssen, müssen Sie die numerische ID der übergeordneten Organisation, des Ordners oder des Projekts angeben, wenn Sie darauf verweisen.

So erstellen Sie die NotificationConfig mit der gewünschten Programmiersprache oder Plattform:

gcloud

gcloud scc notifications create NOTIFICATION_NAME \
  --PARENT=PARENT_ID \
  --location=LOCATION \
  --description="NOTIFICATION_DESCRIPTION" \
  --pubsub-topic=PUBSUB_TOPIC \
  --filter="FILTER"

Ersetzen Sie Folgendes:

  • NOTIFICATION_NAME: Der Name der Benachrichtigung. Muss zwischen 1 und 128 Zeichen lang sein und darf nur alphanumerische Zeichen, Unterstriche oder Bindestriche enthalten.
  • PARENT: Der Bereich in der Ressourcenhierarchie, auf den sich die Benachrichtigung bezieht: organization, folder oder project.
  • PARENT_ID: Die ID der übergeordneten Organisation, des übergeordneten Ordners oder des übergeordneten Projekts im Format organizations/123, folders/456 oder projects/789.
  • LOCATION: Der Security Command Center-Standort, an dem Benachrichtigungen der Security Command Center API eingerichtet und konfiguriert werden sollen. Wenn die Datenlokalisierung aktiviert ist, verwenden Sie eu, sa oder us. Andernfalls verwenden Sie den Wert global.
  • NOTIFICATION_DESCRIPTION: eine Beschreibung der Benachrichtigung mit maximal 1.024 Zeichen.
  • PUBSUB_TOPIC: Das Pub/Sub-Thema, das Benachrichtigungen empfängt. Das Format ist projects/PROJECT_ID/topics/TOPIC.
  • FILTER: Der Ausdruck, den Sie definieren, um auszuwählen, welche Ergebnisse an Pub/Sub gesendet werden. Beispiel: state=\"ACTIVE\"

Terraform

So erstellen Sie ein NotificationConfig für eine Organisation:

resource "google_pubsub_topic" "scc_v2_organization_notification_config" {
  name = "my-topic"
}

resource "google_scc_v2_organization_notification_config" "custom_organization_notification_config" {
  config_id    = "my-config"
  organization = "123456789"
  location     = "global"
  description  = "My custom Cloud Security Command Center Finding Organization Notification Configuration"
  pubsub_topic = google_pubsub_topic.scc_v2_organization_notification_config.id

  streaming_config {
    filter = "category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\""
  }
}

So erstellen Sie eine NotificationConfig für einen Ordner:

resource "google_folder" "folder" {
  parent       = "organizations/123456789"
  display_name = "folder-name"
}

resource "google_pubsub_topic" "scc_v2_folder_notification_config" {
  name = "my-topic"
}

resource "google_scc_v2_folder_notification_config" "custom_notification_config" {
  config_id    = "my-config"
  folder       = google_folder.folder.folder_id
  location     = "global"
  description  = "My custom Cloud Security Command Center Finding Notification Configuration"
  pubsub_topic =  google_pubsub_topic.scc_v2_folder_notification_config.id

  streaming_config {
    filter = "category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\""
  }
}

So erstellen Sie ein NotificationConfig für ein Projekt:

resource "google_pubsub_topic" "scc_v2_project_notification" {
  name = "my-topic"
}

resource "google_scc_v2_project_notification_config" "custom_notification_config" {
  config_id    = "my-config"
  project      = "my-project-name"
  description  = "My custom Cloud Security Command Center Finding Notification Configuration"
  pubsub_topic =  google_pubsub_topic.scc_v2_project_notification.id

  streaming_config {
    filter = "category = \"OPEN_FIREWALL\" AND state = \"ACTIVE\""
  }
}

Go

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv2"
	"cloud.google.com/go/securitycenter/apiv2/securitycenterpb"
)

func createNotificationConfig(w io.Writer, orgID string, pubsubTopic string, notificationConfigID string) error {
	// orgID := "your-org-id"
	// pubsubTopic := "projects/{your-project}/topics/{your-topic}"
	// notificationConfigID := "your-config-id"

	ctx := context.Background()
	client, err := securitycenter.NewClient(ctx)

	if err != nil {
		return fmt.Errorf("securitycenter.NewClient: %w", err)
	}
	defer