Ergebnisbenachrichtigungen für Pub/Sub aktivieren

Auf dieser Seite wird erläutert, wie Sie Security Command Center API-Benachrichtigungen aktivieren.

Benachrichtigungen senden Ergebnisse und Ergebnisaktualisierungen innerhalb von Minuten an ein Pub/Sub-Thema. Security Command Center API-Benachrichtigungen enthalten alle Ergebnisinformationen, die im Security Command Center in der Google Cloud Console angezeigt werden.

Sie können Security Command Center-Benachrichtigungen in Pub/Sub direkt mit Cloud Run-Funktionen verbinden. Beispielfunktionen, die beim Antworten, bei der Anreicherung und der Problembehebung helfen, finden Sie im Open-Source-Repository von Security Command Center unter Cloud Run-Funktionscode. Das Repository enthält Lösungen, die Sie bei der Durchführung automatisierter Aktionen zu Sicherheitsergebnissen unterstützen.

Alternativ können Sie Ergebnisse nach BigQuery exportieren oder in der Google Cloud Console kontinuierliche Exporte für Pub/Sub einrichten.

Hinweise

  1. 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.

  2. Enable the Security Command Center API:

    gcloud services enable securitycenter.googleapis.com

Datenstandort und Benachrichtigungen

Wenn der Datenstandort für Security Command Center aktiviert ist, unterliegen die Konfigurationen, die Continuous Exports für Pub/Sub-notificationConfig-Ressourcen definieren, der Datenstandortsteuerung und werden an Ihrem Security Command Center-Speicherort gespeichert.

Wenn Sie Ergebnisse an einem Security Command Center-Speicherort nach Pub/Sub exportieren möchten, müssen Sie den kontinuierlichen Export an demselben Security Command Center-Speicherort wie die Ergebnisse konfigurieren.

Da die Filter, die in kontinuierlichen Exporten verwendet werden, Daten enthalten können, die den Steuerregeln für Personen mit Wohnsitz in der EU unterliegen, müssen Sie vor dem Erstellen den richtigen Standort angeben. Im Security Command Center ist nicht festgelegt, an welchem Speicherort Sie Exporte erstellen.

Kontinuierliche Exporte werden nur an dem Ort gespeichert, an dem sie erstellt wurden. Sie können an anderen Orten nicht angezeigt 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.

Wenn Sie einen fortlaufenden Export mit API-Aufrufen abrufen möchten, müssen Sie den Speicherort im vollständigen Ressourcennamen der notificationConfig angeben. Beispiel:

GET https://securitycenter.googleapis.com/v2/organizations/123/locations/eu/notificationConfigs/my-pubsub-export-01

Wenn Sie einen kontinuierlichen Export mit der gcloud CLI abrufen möchten, müssen Sie den Speicherort mit dem Flag --location angeben. Beispiel:

gcloud scc notifications describe myContinuousExport --organization=123 \
    --location=us

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. Öffnen Sie die Google Cloud Console.

    Weiter zur Google Cloud Console

  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 gewähren

Um eine NotificationConfig zu erstellen, 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. Öffnen Sie die Google Cloud Console.

    Weiter zur Google Cloud Console

  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 Ihres Google-Kontos

NotificationConfig erstellen

Beachten Sie vor dem Erstellen einer NotificationConfig, dass jede Organisation maximal 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 eine NotificationConfig erstellen, geben Sie ein übergeordnetes Element für die 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öchten, müssen Sie bei der Verlinkung die numerische ID der übergeordneten Organisation, des übergeordneten Ordners oder des übergeordneten Projekts angeben.

In der Google Cloud Console haben einige NotificationConfig-Ressourcen möglicherweise das Label Legacy. Das bedeutet, dass sie mit der Security Command Center API v1 erstellt wurden. Sie können diese NotificationConfig-Ressourcen mit der Google Cloud Console, der gcloud CLI, der Security Command Center API v1 oder den Clientbibliotheken v1 für Security Command Center verwalten.

Wenn Sie diese NotificationConfig-Ressourcen mit der gcloud CLI verwalten möchten, müssen Sie beim Ausführen des gcloud CLI-Befehls keinen Speicherort angeben.

So erstellen Sie 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. Der Name 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: Wenn die Datenspeicherung aktiviert ist, der Standort des Security Command Centers, in dem die Daten gespeichert werden sollen. Ist die Datenspeicherung nicht aktiviert, 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, mit dem Sie auswählen, welche Ergebnisse an Pub/Sub gesendet werden. Beispiel: 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 client.Close()

	req := &securitycenterpb.CreateNotificationConfigRequest{
		// Parent must be in one of the following formats:
		//		"organizations/{orgId}/locations/global"
		//		"projects/{projectId}/locations/global"
		//		"folders/{folderId}/locations/global"
		Parent:   fmt.Sprintf("organizations/%s/locations/global", orgID),
		ConfigId: notificationConfigID,
		NotificationConfig: &securitycenterpb.NotificationConfig{
			Description: "Go sample config",
			PubsubTopic: pubsubTopic,
			NotifyConfig: &securitycenterpb.NotificationConfig_StreamingConfig_{
				StreamingConfig: &securitycenterpb.NotificationConfig_StreamingConfig{
					Filter: `state = "ACTIVE"`,
				},
			},
		},
	}

	notificationConfig, err := client.CreateNotificationConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("Failed to create notification config: %w", err)
	}
	fmt.Fprintln(w, "New NotificationConfig created: ", notificationConfig)

	return nil
}

Java


package vtwo.notifications;

import com.google.cloud.securitycenter.v2.LocationName;
import com.google.cloud.securitycenter.v2.NotificationConfig;
import com.google.cloud.securitycenter.v2.SecurityCenterClient;
import java.io.IOException;

public class CreateNotification {

  public static void main(String[] args) throws IOException {
    // parentId: must be in one of the following formats:
    //    "organizations/{organization_id}"
    //    "projects/{project_id}"
    //    "folders/{folder_id}"
    String parentId = "{parent-id}";
    String topicName = "{your-topic}";
    String notificationConfigId = "{your-notification-id}";
    // Specify the location of the notification config.
    String location = "global";

    createNotificationConfig(parentId, location, topicName, notificationConfigId);
  }

  // Crete a notification config.
  // Ensure the ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the new topic.
  public static NotificationConfig createNotificationConfig(
      String parentId, String location, String topicName, String notificationConfigId)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (SecurityCenterClient client = SecurityCenterClient.create()) {

      String pubsubTopic = String.format("projects/%s/topics/%s", parentId, topicName);

      NotificationConfig notificationConfig = NotificationConfig.newBuilder()
          .setDescription("Java notification config")
          .setPubsubTopic(pubsubTopic)
          .setStreamingConfig(
              NotificationConfig.StreamingConfig.newBuilder().setFilter("state = \"ACTIVE\"")
                  .build())
          .build();

      NotificationConfig response = client.createNotificationConfig(
          LocationName.of(parentId, location), notificationConfig, notificationConfigId);

      System.out.printf("Notification config was created: %s%n", response);
      return response;
    }
  }
}

Node.js

// npm install '@google-cloud/security-center'
const {SecurityCenterClient} = require('@google-cloud/security-center').v2;
const uuidv1 = require('uuid').v1;

const client = new SecurityCenterClient();
/*
 *  Required. Resource name of the new notification config's parent. Its format
 *  is "organizations/[organization_id]/locations/[location_id]",
 *  "folders/[folder_id]/locations/[location_id]", or
 *  "projects/[project_id]/locations/[location_id]".
 */
const parent = `projects/${projectId}/locations/${location}`;

/**
 *  Required.
 *  Unique identifier provided by the client within the parent scope.
 *  It must be between 1 and 128 characters and contain alphanumeric
 *  characters, underscores, or hyphens only.
 */
const configId = 'notif-config-test-node-create-' + uuidv1();

// pubsubTopic = "projects/{your-project}/topics/{your-topic}";
const pubsubTopic = `projects/${projectId}/topics/${topicName}`;

/**
 *  Required. The notification config being created. The name and the service
 *  account will be ignored as they are both output only fields on this
 *  resource.
 */
const notificationConfig = {
  description: 'Sample config for node v2',
  pubsubTopic: pubsubTopic,
  streamingConfig: {filter: 'state = "ACTIVE"'},
};

// Build the request.
const createNotificationRequest = {
  parent: parent,
  configId: configId,
  notificationConfig: notificationConfig,
};

async function createNotificationConfig() {
  const [response] = await client.createNotificationConfig(
    createNotificationRequest
  );
  console.log('Notification configuration creation successful: %j', response);
}

await createNotificationConfig();

Python

def create_notification_config(
    parent_id, location_id, pubsub_topic, notification_config_id
) -> NotificationConfig:
    """
    This method is used to create the Notification Config.
    Args:
        parent_id: must be in one of the following formats:
            "organizations/{organization_id}"
            "projects/{project_id}"
            "folders/{folder_id}"
        location_id: "global"
        pubsub_topic: "projects/{your-project-id}/topics/{your-topic-id}"
        notification_config_id: "your-config-id"


    Ensure this ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the new topic.
    """
    from google.cloud import securitycenter_v2 as securitycenter_v2

    client = securitycenter_v2.SecurityCenterClient()
    parent_id = parent_id + "/locations/" + location_id
    response = client.create_notification_config(
        request={
            "parent": parent_id,
            "config_id": notification_config_id,
            "notification_config": {
                "description": "Notification for active findings",
                "pubsub_topic": pubsub_topic,
                "streaming_config": {"filter": 'state = "ACTIVE"'},
            },
        }
    )
    print(f"create notification config response:{response}")
    return response

Benachrichtigungen werden jetzt in dem von Ihnen angegebenen Pub/Sub-Thema veröffentlicht.

Für die Veröffentlichung von Benachrichtigungen wird ein Dienstkonto in der Form service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com erstellt. Dieses Dienstkonto wird beim Erstellen der ersten NotificationConfig erstellt und erhält beim Erstellen der Benachrichtigungskonfiguration automatisch die Rolle securitycenter.notificationServiceAgent in der IAM-Richtlinie für PUBSUB_TOPIC. Diese Dienstkontorolle ist erforderlich, damit Benachrichtigungen funktionieren.

Perimeterzugriff in VPC Service Controls gewähren

Wenn Sie VPC Service Controls verwenden und Ihr Pub/Sub-Thema Teil eines Projekts innerhalb eines Dienstperimeters ist, müssen Sie Zugriff auf Projekte gewähren, um Benachrichtigungen erstellen zu können.

Wenn Sie Zugriff auf Projekte gewähren möchten, erstellen Sie Regeln für eingehenden und ausgehenden Traffic für die Hauptbenutzer und Projekte, die zum Erstellen von Benachrichtigungen verwendet werden. Die Regeln erlauben den Zugriff auf geschützte Ressourcen und ermöglichen Pub/Sub zu prüfen, ob Nutzer die Berechtigung setIamPolicy für das Pub/Sub-Thema haben.

Vor dem Erstellen einer NotificationConfig

Führen Sie die folgenden Schritte aus, bevor Sie die Schritte unter NotificationConfig erstellen ausführen:

  1. Rufen Sie in der Google Cloud Console die Seite „VPC Service Controls“ auf.

    Zu „VPC Service Controls“

  2. Wählen Sie gegebenenfalls Ihre Organisation aus.

  3. Klicken Sie auf den Namen des Dienstperimeters, den Sie ändern möchten.

    Um den Dienstperimeter zu finden, den Sie ändern müssen, können Sie Ihre Logs auf Einträge prüfen, die RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER-Verstöße enthalten. Prüfen Sie in diesen Einträgen das Feld servicePerimeterName: accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME.

  4. Klicken Sie auf Perimeter bearbeiten.

  5. Klicken Sie im Navigationsmenü auf Richtlinie für eingehenden Traffic.

  6. Verwenden Sie die folgenden Parameter, um Regeln für eingehenden Traffic für Nutzer oder Dienstkonten zu konfigurieren:

    • FROM-Attribute des API-Clients:
      • Wählen Sie im Drop-down-Menü Quelle die Option Alle Quellen aus.
      • Wählen Sie im Drop-down-Menü Identitäten die Option Ausgewählte Identitäten aus.
      • Klicken Sie auf Auswählen und geben Sie dann den Nutzer ein, mit dem die Security Command Center API aufgerufen wird.
    • TO-Attribute von Google Cloud-Diensten/-Ressourcen:
      • Wählen Sie im Drop-down-Menü Projekt die Option Ausgewählte Projekte aus.
      • Klicken Sie auf Auswählen und geben Sie das Projekt ein, das das Pub/Sub-Thema enthält.
      • Wählen Sie im Drop-down-Menü Dienste die Option Ausgewählte Dienste und dann Cloud Pub/Sub API aus.
      • Wählen Sie im Drop-down-Menü Methoden die Option Alle Aktionen aus.
  7. Klicken Sie auf Speichern.

  8. Klicken Sie im Navigationsmenü auf Richtlinie für ausgehenden Traffic.

  9. Klicken Sie auf Add Rule (Regel hinzufügen).

  10. Geben Sie folgende Parameter ein, um Regeln für ausgehenden Traffic für Nutzer- oder Dienstkonten zu konfigurieren:

    • FROM-Attribute des API-Clients:
      • Wählen Sie im Drop-down-Menü Identitäten die Option Ausgewählte Identitäten aus.
      • Klicken Sie auf Auswählen und geben Sie dann den Nutzer ein, mit dem die Security Command Center API aufgerufen wird.
    • TO-Attribute von Google Cloud-Diensten/-Ressourcen:
      • Wählen Sie im Drop-down-Menü Projekt die Option Alle Projekte aus.
      • Wählen Sie im Drop-down-Menü Dienste die Option Ausgewählte Dienste und dann Cloud Pub/Sub API aus.
      • Wählen Sie im Drop-down-Menü Methoden die Option Alle Aktionen aus.
  11. Klicken Sie auf Speichern.

Regel für eingehenden Traffic für die NotificationConfig erstellen

So erstellen Sie eine Regel für eingehenden Traffic für eine NotificationConfig:

  1. Folgen Sie der Anleitung unter NotificationConfig erstellen.
  2. Öffnen Sie noch einmal den Dienstperimeter aus dem vorherigen Abschnitt.
  3. Klicken Sie auf Richtlinie für eingehenden Traffic.
  4. Klicken Sie auf Add Rule (Regel hinzufügen).
  5. Geben Sie die folgenden Parameter ein, um die Regel für eingehenden Traffic für das von Ihnen erstellte NotificationConfig-Dienstkonto zu konfigurieren:
    • FROM-Attribute des API-Clients:
      • Wählen Sie im Drop-down-Menü Quelle die Option Alle Quellen aus.
      • Wählen Sie im Drop-down-Menü Identitäten die Option Ausgewählte Identitäten aus.
      • Klicken Sie auf Auswählen und geben Sie den Namen des NotificationConfig-Dienstkontos ein: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com.
    • TO-Attribute von GCP-Diensten/-Ressourcen:
      • Wählen Sie im Drop-down-Menü Projekt die Option Ausgewählte Projekte aus.
      • Klicken Sie auf Auswählen und wählen Sie das Projekt aus, das das Pub/Sub-Thema enthält.
      • Wählen Sie im Drop-down-Menü Dienste die Option Ausgewählte Dienste und dann Cloud Pub/Sub API aus.
      • Wählen Sie im Drop-down-Menü Methoden die Option Alle Aktionen aus.
  6. Klicken Sie im Navigationsmenü auf Speichern.

Die ausgewählten Projekte, Nutzer und Dienstkonten können jetzt auf die geschützten Ressourcen zugreifen und Benachrichtigungen erstellen.

Wenn Sie alle Schritte in dieser Anleitung ausgeführt haben und Benachrichtigungen ordnungsgemäß funktionieren, können Sie jetzt Folgendes löschen:

  • Die Regel für eingehenden Traffic für das Hauptkonto
  • Die Regel für ausgehenden Traffic für das Hauptkonto

Diese Regeln waren nur für die Konfiguration der NotificationConfig erforderlich. Damit Benachrichtigungen weiterhin funktionieren, müssen Sie jedoch die Regel für eingehenden Traffic für die NotificationConfig beibehalten, damit sie Benachrichtigungen in Ihrem Pub/Sub-Thema hinter dem Dienstperimeter veröffentlichen kann.

Nächste Schritte