Benachrichtigungskonfigurationen erstellen und verwalten

Auf dieser Seite wird die Verwendung der Benachrichtigungsfunktion der Security Command Center API beschrieben, einschließlich der folgenden Beispiele:

  • NotificationConfig erstellen
  • NotificationConfig abrufen
  • NotificationConfig aktualisieren
  • NotificationConfig löschen
  • NotificationConfig auflisten
  • Pub/Sub-Benachrichtigungen empfangen

Alternativ können Premium-Kunden von Security Command Center Continuous Exports für Pub/Sub im Security Command Center-Dashboard einrichten.

Hinweise

Um die Beispiele auf dieser Seite zu verwenden, müssen Sie die Anleitung zum Einrichten von Benachrichtigungen abschließen.

Zur Ausführung der folgenden Beispiele benötigen Sie eine IAM-Rolle (Identity and Access Management) mit den entsprechenden Berechtigungen:

  • NotificationConfig erstellen: Bearbeiter für Benachrichtigungskonfigurationen des Sicherheitscenters (roles/securitycenter.notificationConfigEditor)
  • NotificationConfig abrufen und auflisten: Betrachter von Benachrichtigungskonfigurationen im Sicherheitscenter (roles/securitycenter.notificationConfigViewer) oder Bearbeiter von Konfigurationen für Benachrichtigungen im Sicherheitscenter (roles/securitycenter.notificationConfigEditor)
  • NotificationConfig aktualisieren und löschen: Bearbeiter von Benachrichtigungskonfigurationen im Sicherheitscenter (roles/securitycenter.notificationConfigEditor)

Wenn Sie einem Hauptkonto, das auf notificationConfig zugreift, entsprechende Rollen zuweisen möchten, müssen Sie eine der folgenden IAM-Rollen haben:

  • Administrator der Organisation (roles/resourcemanager.organizationAdmin)
  • Ordner-IAM-Administrator (roles/resourcemanager.folderIamAdmin)
  • Projekt-IAM-Administrator (roles/resourcemanager.projectIamAdmin)

Die IAM-Rollen für Security Command Center können auf Organisations-, Ordner- oder Projektebene gewährt werden. Die Möglichkeit, Ergebnisse, Assets und Sicherheitsquellen anzusehen, zu bearbeiten, zu erstellen oder zu aktualisieren, hängt von der Ebene ab, auf die Ihnen Zugriff gewährt wurde. Weitere Informationen zu Security Command Center-Rollen finden Sie unter Zugriffssteuerung.

Datenstandort und Benachrichtigungen

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

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

Da die in kontinuierlichen Exporten verwendeten Filter Daten enthalten können, die Standortkontrollen unterliegen, müssen Sie vor dem Erstellen unbedingt den richtigen Speicherort angeben. Security Command Center schränkt nicht den Speicherort ein, an dem Exporte erstellt werden.

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

Wenn Sie einen kontinuierlichen Export mithilfe von API-Aufrufen abrufen möchten, müssen Sie den Standort im vollständigen Ressourcennamen von notificationConfig angeben. Beispiel:

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

Wenn Sie einen kontinuierlichen Export über die gcloud CLI abrufen möchten, müssen Sie den Speicherort auf ähnliche Weise entweder im vollständigen Ressourcennamen der Konfiguration oder mithilfe des Flags --locations angeben. Beispiel:

gcloud scc notifications describe myContinuousExport organizations/123 \
    --location=locations/us

NotificationConfig erstellen

Zum Erstellen einer NotificationConfig benötigen Sie Folgendes:

  • Ein vorhandenes Pub/Sub-Thema, an das Sie Benachrichtigungen senden möchten.
  • Erforderliche IAM-Rollen für das Hauptkonto, das die notificationConfig erstellt.

Weitere Informationen finden Sie im Schritt Pub/Sub-Thema einrichten in der Anleitung Ergebnisbenachrichtigungen einrichten.

Bevor Sie ein NotificationConfig erstellen, beachten Sie, dass jede Organisation 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 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 die numerische ID der übergeordneten Organisation, des übergeordneten Ordners oder des Projekts angeben, wenn Sie darauf verweisen.

So erstellen Sie den NotificationConfig mit der Sprache oder Plattform Ihrer Wahl:

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 1 bis 128 Zeichen lang sein und darf nur alphanumerische Zeichen, Unterstriche oder Bindestriche enthalten.
  • PARENT: der Bereich in der Ressourcenhierarchie, für den die Benachrichtigung gilt, organization, folder oder project.
  • PARENT_ID: Die ID der übergeordneten Organisation, des übergeordneten Ordners oder des Projekts im Format organizations/123, folders/456 oder projects/789.
  • LOCATION: Wenn der Datenstandort aktiviert ist, geben Sie den Speicherort von Security Command Center an, an dem die Benachrichtigung erstellt werden soll. Die resultierende notificationConfig-Ressource wird nur an diesem Speicherort gespeichert. Nur an diesem Standort ausgegebene Ergebnisse werden an Pub/Sub gesendet.

    Wenn der Datenstandort nicht aktiviert ist, wird durch Angabe des Flags --location die Benachrichtigung mithilfe der Security Command Center API v2 erstellt. Der einzige gültige Wert für das Flag ist global.

  • NOTIFICATION_DESCRIPTION: eine Beschreibung der Benachrichtigung mit maximal 1.024 Zeichen.

  • PUBSUB_TOPIC: Das Pub/Sub-Thema, das die Benachrichtigungen erhalten soll. 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"

Python

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

def create_notification_config(parent_id, notification_config_id, pubsub_topic):
    """
    Args:
        parent_id: must be in one of the following formats:
            "organizations/{organization_id}"
            "projects/{project_id}"
            "folders/{folder_id}"
        notification_config_id: "your-config-id"
        pubsub_topic: "projects/{your-project-id}/topics/{your-topic-ic}"

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

    client = securitycenter.SecurityCenterClient()

    created_notification_config = 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(created_notification_config)

Java

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


import com.google.cloud.securitycenter.v1.CreateNotificationConfigRequest;
import com.google.cloud.securitycenter.v1.NotificationConfig;
import com.google.cloud.securitycenter.v1.NotificationConfig.StreamingConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class CreateNotificationConfigSnippets {

  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 = String.format("organizations/%s", "ORG_ID");
    String notificationConfigId = "{config-id}";
    String projectId = "{your-project}";
    String topicName = "{your-topic}";

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

  // Crete a notification config.
  // Ensure the ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the new topic.
  public static NotificationConfig createNotificationConfig(
      String parentId, String notificationConfigId, String projectId, String topicName)
      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()) {

      // Ensure this ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the topic.
      String pubsubTopic = String.format("projects/%s/topics/%s", projectId, topicName);

      CreateNotificationConfigRequest request =
          CreateNotificationConfigRequest.newBuilder()
              .setParent(parentId)
              .setConfigId(notificationConfigId)
              .setNotificationConfig(
                  NotificationConfig.newBuilder()
                      .setDescription("Java notification config")
                      .setPubsubTopic(pubsubTopic)
                      .setStreamingConfig(
                          StreamingConfig.newBuilder().setFilter("state = \"ACTIVE\"").build())
                      .build())
              .build();

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

Einfach loslegen (Go)

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/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}"
		//		"projects/{projectId}"
		//		"folders/{folderId}"
		Parent:   fmt.Sprintf("organizations/%s", 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
}

Node.js

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

// npm install '@google-cloud/security-center'
const {SecurityCenterClient} = require('@google-cloud/security-center');

const client = new SecurityCenterClient();

// parent: must be in one of the following formats:
//    `organizations/${organization_id}`
//    `projects/${project_id}`
//    `folders/${folder_id}`
// configId = "your-config-name";
// pubsubTopic = "projects/{your-project}/topics/{your-topic}";
// Ensure this Service Account has the "pubsub.topics.setIamPolicy" permission on this topic.
const parent = `organizations/${organizationId}`;

async function createNotificationConfig() {
  const [response] = await client.createNotificationConfig({
    parent: parent,
    configId: configId,
    notificationConfig: {
      description: 'Sample config for node.js',
      pubsubTopic: pubsubTopic,
      streamingConfig: {filter: 'state = "ACTIVE"'},
    },
  });
  console.log('Notification config creation succeeded: ', response);
}

createNotificationConfig();

PHP

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

use Google\Cloud\SecurityCenter\V1\Client\SecurityCenterClient;
use Google\Cloud\SecurityCenter\V1\CreateNotificationConfigRequest;
use Google\Cloud\SecurityCenter\V1\NotificationConfig;
use Google\Cloud\SecurityCenter\V1\NotificationConfig\StreamingConfig;

/**
 * @param string $organizationId        Your org ID
 * @param string $notificationConfigId  A unique identifier
 * @param string $projectId             Your Cloud Project ID
 * @param string $topicName             Your topic name
 */
function create_notification(
    string $organizationId,
    string $notificationConfigId,
    string $projectId,
    string $topicName
): void {
    $securityCenterClient = new SecurityCenterClient();
    // 'parent' must be in one of the following formats:
    //		"organizations/{orgId}"
    //		"projects/{projectId}"
    //		"folders/{folderId}"
    $parent = $securityCenterClient::organizationName($organizationId);
    $pubsubTopic = $securityCenterClient::topicName($projectId, $topicName);

    $streamingConfig = (new StreamingConfig())->setFilter('state = "ACTIVE"');
    $notificationConfig = (new NotificationConfig())
        ->setDescription('A sample notification config')
        ->setPubsubTopic($pubsubTopic)
        ->setStreamingConfig($streamingConfig);
    $createNotificationConfigRequest = (new CreateNotificationConfigRequest())
        ->setParent($parent)
        ->setConfigId($notificationConfigId)
        ->setNotificationConfig($notificationConfig);

    $response = $securityCenterClient->createNotificationConfig($createNotificationConfigRequest);
    printf('Notification config was created: %s' . PHP_EOL, $response->getName());
}

Ruby

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

require "google/cloud/security_center"

# Your organization id. e.g. for "organizations/123", this would be "123".
# org_id = "YOUR_ORGANZATION_ID"

# Your notification config id. e.g. for
# "organizations/123/notificationConfigs/my-config" this would be "my-config".
# config_id = "YOUR_CONFIG_ID"

# The PubSub topic where notifications will be published.
# pubsub_topic = "YOUR_TOPIC"

client = Google::Cloud::SecurityCenter.security_center

# You can also use 'project_id' or 'folder_id' as a parent.
# client.project_path project: project_id
# client.folder_path folder: folder_id
parent = client.organization_path organization: org_id

notification_config = {
  description:      "Sample config for Ruby",
  pubsub_topic:     pubsub_topic,
  streaming_config: { filter: 'state = "ACTIVE"' }
}

response = client.create_notification_config(
  parent:              parent,
  config_id:           config_id,
  notification_config: notification_config
)
puts "Created notification config #{config_id}: #{response}."

C#

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


using Google.Api.Gax.ResourceNames;
using Google.Cloud.SecurityCenter.V1;
using System;

///<summary> Create NotificationConfig Snippet. </summary>
public class CreateNotificationConfigSnippets
{
    public static NotificationConfig CreateNotificationConfig(
        string organizationId, string notificationConfigId, string projectId, string topicName)
    {
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        //      ProjectName projectName = new ProjectName(projectId);
        //      FolderName folderName = new FolderName(folderId);
        OrganizationName orgName = new OrganizationName(organizationId);
        TopicName pubsubTopic = new TopicName(projectId, topicName);

        SecurityCenterClient client = SecurityCenterClient.Create();
        CreateNotificationConfigRequest request = new CreateNotificationConfigRequest
        {
            ParentAsOrganizationName = orgName,
            ConfigId = notificationConfigId,
            NotificationConfig = new NotificationConfig
            {
                Description = ".Net notification config",
                PubsubTopicAsTopicName = pubsubTopic,
                StreamingConfig = new NotificationConfig.Types.StreamingConfig { Filter = "state = \"ACTIVE\"" }
            }
        };

        NotificationConfig response = client.CreateNotificationConfig(request);
        Console.WriteLine($"Notification config was created: {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 erstellt, wenn Sie Ihren ersten NotificationConfig erstellen, und erhält beim Erstellen der Benachrichtigungskonfiguration automatisch die Rolle securitycenter.notificationServiceAgent für die IAM-Richtlinie für PUBSUB_TOPIC. Diese Dienstkontorolle ist erforderlich, damit Benachrichtigungen funktionieren.

NotificationConfig abrufen

Zum Abrufen eines NotificationConfig benötigen Sie eine IAM-Rolle mit der Berechtigung securitycenter.notification.get.

gcloud

gcloud scc notifications describe PARENT_TYPE/PARENT_ID/locations/LOCATION/notificationConfigs/NOTIFICATION_NAME

Ersetzen Sie Folgendes:

  • PARENT_TYPE mit organizations, folders oder projects, je nachdem, welche Ebene der Ressourcenhierarchie in der Benachrichtigungskonfiguration angegeben wurde.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: erforderlich, wenn entweder der Datenstandort aktiviert ist oder die notificationConfig-Ressourcen mit der API Version 2 erstellt wurden.

    Wenn der Datenstandort aktiviert ist, geben Sie den Standort von Security Command Center an, an dem die Benachrichtigungen gespeichert werden sollen.

    Wenn der Datenstandort nicht aktiviert ist, fügen Sie /locations/LOCATION nur dann ein, wenn die Ressource notificationConfig mit der Security Command Center API Version 2 erstellt wurde. In diesem Fall ist der einzige gültige Speicherort global.

  • NOTIFICATION_NAME: der Name der Benachrichtigung.

Python

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

def get_notification_config(parent_id, notification_config_id):
    """
    Args:
        parent_id: must be in one of the following formats:
            "organizations/{organization_id}"
            "projects/{project_id}"
            "folders/{folder_id}"
        notification_config_id: "your-config-id"
    """
    from google.cloud import securitycenter as securitycenter

    client = securitycenter.SecurityCenterClient()

    notification_config_name = (
        f"{parent_id}/notificationConfigs/{notification_config_id}"
    )

    notification_config = client.get_notification_config(
        request={"name": notification_config_name}
    )
    print(f"Got notification config: {notification_config}")

Java

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


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

public class GetNotificationConfigSnippets {

  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 = String.format("organizations/%s", "ORG_ID");

    String notificationConfigId = "{config-id}";

    getNotificationConfig(parentId, notificationConfigId);
  }

  // Retrieve an existing notification config.
  public static NotificationConfig getNotificationConfig(
      String parentId, 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()) {
      NotificationConfig response =
          client.getNotificationConfig(String.format("%s/notificationConfigs/%s",
              parentId, notificationConfigId));

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

Einfach loslegen (Go)

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

import (
	"context"
	"fmt"
	"io"

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

func getNotificationConfig(w io.Writer, orgID string, notificationConfigID string) error {
	// orgID := "your-org-id"
	// 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()

	// Parent must be in one of the following formats:
	//		"organizations/{orgId}"
	//		"projects/{projectId}"
	//		"folders/{folderId}"
	parent := fmt.Sprintf("organizations/%s", orgID)
	req := &securitycenterpb.GetNotificationConfigRequest{
		Name: fmt.Sprintf("%s/notificationConfigs/%s", parent, notificationConfigID),
	}

	notificationConfig, err := client.GetNotificationConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("Failed to retrieve notification config: %w", err)
	}
	fmt.Fprintln(w, "Received config: ", notificationConfig)

	return nil
}

Node.js

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

// npm install @google-cloud/security-center/
const {SecurityCenterClient} = require('@google-cloud/security-center');

const client = new SecurityCenterClient();

// formattedConfigName: You can also use
//    `client.projectNotificationConfigPath(projectId, configId)` or
//    `client.folderNotificationConfigPath(folderId, configId)`.
// configId = "your-config-id";
const formattedConfigName = client.organizationNotificationConfigPath(
  organizationId,
  configId
);

async function getNotificationConfg() {
  const [response] = await client.getNotificationConfig({
    name: formattedConfigName,
  });
  console.log('Notification config: ', response);
}

getNotificationConfg();

PHP

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

use Google\Cloud\SecurityCenter\V1\Client\SecurityCenterClient;
use Google\Cloud\SecurityCenter\V1\GetNotificationConfigRequest;

/**
 * @param string $organizationId        Your org ID
 * @param string $notificationConfigId  A unique identifier
 */
function get_notification(string $organizationId, string $notificationConfigId): void
{
    $securityCenterClient = new SecurityCenterClient();
    $notificationConfigName = $securityCenterClient::notificationConfigName(
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        $organizationId,
        $notificationConfigId
    );
    $getNotificationConfigRequest = (new GetNotificationConfigRequest())
        ->setName($notificationConfigName);

    $response = $securityCenterClient->getNotificationConfig($getNotificationConfigRequest);
    printf('Notification config was retrieved: %s' . PHP_EOL, $response->getName());
}

Ruby

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

require "google/cloud/security_center"

# Your organization id. e.g. for "organizations/123", this would be "123".
# org_id = "YOUR_ORGANZATION_ID"

# Your notification config id. e.g. for
# "organizations/123/notificationConfigs/my-config" this would be "my-config".
# config_id = "YOUR_CONFIG_ID"

client = Google::Cloud::SecurityCenter.security_center

# You can also use 'project_id' or 'folder_id' as a parent.
config_path = client.notification_config_path organization:        org_id,
                                              notification_config: config_id

response = client.get_notification_config name: config_path
puts "Notification config fetched: #{response}"

C#

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


using Google.Cloud.SecurityCenter.V1;
using System;

/// <summary>Snippet for GetNotificationConfig</summary>
public class GetNotificationConfigSnippets
{
    public static NotificationConfig GetNotificationConfig(string organizationId, string configId)
    {
        SecurityCenterClient client = SecurityCenterClient.Create();
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        NotificationConfigName notificationConfigName = new NotificationConfigName(organizationId, configId);

        NotificationConfig response = client.GetNotificationConfig(notificationConfigName);
        Console.WriteLine($"Notification config: {response}");
        return response;
    }
}

NotificationConfig aktualisieren

Zum Aktualisieren eines NotificationConfig benötigen Sie eine IAM-Rolle mit der Berechtigung securitycenter.notification.update.

Wenn Sie das Feld mithilfe einer Feldmaske aktualisieren, werden nur die von Ihnen angegebenen Felder aktualisiert. Wenn Sie keine Feldmaske verwenden, werden alle veränderlichen Felder in NotificationConfig durch die neuen Werte ersetzt. Sie können das Pub/Sub-Thema und die Beschreibung mit einer Feldmaske aktualisieren.

Um dieses Beispiel abzuschließen, müssen Sie das neue Thema abonniert haben und Ihr Benachrichtigungsdienstkonto muss die Berechtigung pubsub.topics.setIamPolicy für das Thema haben.

Nachdem Sie die erforderlichen Berechtigungen gewährt haben, aktualisieren Sie die Beschreibung NotificationConfig, das Pub/Sub-Thema und den Filter mit der Sprache Ihrer Wahl:

gcloud

gcloud scc notifications update PARENT_TYPE/PARENT_ID/locations/LOCATION/notificationConfigs/NOTIFICATION_NAME
--description="NOTIFICATION_DESCRIPTION" \
--pubsub-topic=PUBSUB_TOPIC \
--filter="FILTER"

Ersetzen Sie Folgendes:

  • PARENT_TYPE mit organizations, folders oder projects, je nachdem, welche Ebene der Ressourcenhierarchie in der Benachrichtigungskonfiguration angegeben wurde.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: erforderlich, wenn entweder der Datenstandort aktiviert ist oder die notificationConfig mit der API Version 2 erstellt wurde.

    Wenn der Datenstandort aktiviert ist, geben Sie den Speicherort von Security Command Center an, an dem die Benachrichtigung gespeichert wird.

    Wenn der Datenstandort nicht aktiviert ist, fügen Sie /locations/LOCATION in den vollständigen Namen ein oder geben Sie das Flag --location nur an, wenn die Ressource notificationConfig mit der Security Command Center API Version 2 erstellt wurde. In diesem Fall ist der einzige gültige Standort global.

  • NOTIFICATION_NAME: der Name der Benachrichtigung.

  • NOTIFICATION_DESCRIPTION: eine Beschreibung der Benachrichtigung mit maximal 1.024 Zeichen.

  • PUBSUB_TOPIC: Das Pub/Sub-Thema, das die Benachrichtigungen erhalten soll. 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"

Python

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

def update_notification_config(parent_id, notification_config_id, pubsub_topic):
    """
    Args:
        parent_id: must be in one of the following formats:
            "organizations/{organization_id}"
            "projects/{project_id}"
            "folders/{folder_id}"
        notification_config_id: "config-id-to-update"
        pubsub_topic: "projects/{new-project}/topics/{new-topic}"

    If updating a pubsub_topic, ensure this ServiceAccount has the
    "pubsub.topics.setIamPolicy" permission on the new topic.
    """
    from google.cloud import securitycenter as securitycenter
    from google.protobuf import field_mask_pb2

    client = securitycenter.SecurityCenterClient()

    notification_config_name = (
        f"{parent_id}/notificationConfigs/{notification_config_id}"
    )

    updated_description = "New updated description"
    updated_filter = 'state = "INACTIVE"'

    # Only description and pubsub_topic can be updated.
    field_mask = field_mask_pb2.FieldMask(
        paths=["description", "pubsub_topic", "streaming_config.filter"]
    )

    updated_notification_config = client.update_notification_config(
        request={
            "notification_config": {
                "name": notification_config_name,
                "description": updated_description,
                "pubsub_topic": pubsub_topic,
                "streaming_config": {"filter": updated_filter},
            },
            "update_mask": field_mask,
        }
    )

    print(updated_notification_config)

Java

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


import com.google.cloud.securitycenter.v1.NotificationConfig;
import com.google.cloud.securitycenter.v1.NotificationConfig.StreamingConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.protobuf.FieldMask;
import java.io.IOException;

public class UpdateNotificationConfigSnippets {

  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 = String.format("organizations/%s", "ORG_ID");
    String notificationConfigId = "{config-id}";
    String projectId = "{your-project}";
    String topicName = "{your-topic}";

    updateNotificationConfig(parentId, notificationConfigId, projectId, topicName);
  }

  // Update an existing notification config.
  // If updating a Pubsub Topic, ensure the ServiceAccount has the
  // "pubsub.topics.setIamPolicy" permission on the new topic.
  public static NotificationConfig updateNotificationConfig(
      String parentId, String notificationConfigId, String projectId, String topicName)
      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 notificationConfigName =
          String.format(
              "%s/notificationConfigs/%s", parentId, notificationConfigId);

      // Ensure this ServiceAccount has the "pubsub.topics.setIamPolicy" permission on the topic.
      String pubsubTopic = String.format("projects/%s/topics/%s", projectId, topicName);

      NotificationConfig configToUpdate =
          NotificationConfig.newBuilder()
              .setName(notificationConfigName)
              .setDescription("updated description")
              .setPubsubTopic(pubsubTopic)
              .setStreamingConfig(StreamingConfig.newBuilder().setFilter("state = \"ACTIVE\""))
              .build();

      FieldMask fieldMask =
          FieldMask.newBuilder()
              .addPaths("description")
              .addPaths("pubsub_topic")
              .addPaths("streaming_config.filter")
              .build();

      NotificationConfig updatedConfig = client.updateNotificationConfig(configToUpdate, fieldMask);

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

Einfach loslegen (Go)

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
	"google.golang.org/genproto/protobuf/field_mask"
)

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

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

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

	updatedDescription := "Updated sample config"
	updatedFilter := `state = "INACTIVE"`
	// Parent must be in one of the following formats:
	//		"organizations/{orgId}"
	//		"projects/{projectId}"
	//		"folders/{folderId}"
	parent := fmt.Sprintf("organizations/%s", orgID)
	req := &securitycenterpb.UpdateNotificationConfigRequest{
		NotificationConfig: &securitycenterpb.NotificationConfig{
			Name:        fmt.Sprintf("%s/notificationConfigs/%s", parent, notificationConfigID),
			Description: updatedDescription,
			PubsubTopic: updatedPubsubTopic,
			NotifyConfig: &securitycenterpb.NotificationConfig_StreamingConfig_{
				StreamingConfig: &securitycenterpb.NotificationConfig_StreamingConfig{
					Filter: updatedFilter,
				},
			},
		},
		UpdateMask: &field_mask.FieldMask{
			Paths: []string{"description", "pubsub_topic", "streaming_config.filter"},
		},
	}

	notificationConfig, err := client.UpdateNotificationConfig(ctx, req)
	if err != nil {
		return fmt.Errorf("Failed to update notification config: %w", err)
	}

	fmt.Fprintln(w, "Updated NotificationConfig: ", notificationConfig)

	return nil
}

Node.js

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

// npm install @google-cloud/security-center/
const {SecurityCenterClient} = require('@google-cloud/security-center');

const client = new SecurityCenterClient();

// formattedConfigName: You can also use
//    `client.projectNotificationConfigPath(projectId, configId)` or
//    `client.folderNotificationConfigPath(folderId, configId)`.
// configId = "your-config-id";
const formattedConfigName = client.organizationNotificationConfigPath(
  organizationId,
  configId
);

// pubsubTopic = "projects/{your-project}/topics/{your-topic}";
// Ensure this Service Account has the "pubsub.topics.setIamPolicy" permission on this topic.

async function updateNotificationConfig() {
  const [response] = await client.updateNotificationConfig({
    updateMask: {
      paths: ['description', 'pubsub_topic', 'streaming_config.filter'],
    },
    notificationConfig: {
      name: formattedConfigName,
      description: 'Updated config description',
      pubsubTopic: pubsubTopic,
      streamingConfig: {filter: 'state = "INACTIVE"'},
    },
  });
  console.log('notification config update succeeded: ', response);
}

updateNotificationConfig();

PHP

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

use Google\Cloud\SecurityCenter\V1\Client\SecurityCenterClient;
use Google\Cloud\SecurityCenter\V1\NotificationConfig;
use Google\Cloud\SecurityCenter\V1\NotificationConfig\StreamingConfig;
use Google\Cloud\SecurityCenter\V1\UpdateNotificationConfigRequest;
use Google\Protobuf\FieldMask;

/**
 * @param string $organizationId        Your org ID
 * @param string $notificationConfigId  A unique identifier
 * @param string $projectId             Your Cloud Project ID
 * @param string $topicName             Your topic name
 */
function update_notification(
    string $organizationId,
    string $notificationConfigId,
    string $projectId,
    string $topicName
): void {
    $securityCenterClient = new SecurityCenterClient();

    // Ensure this ServiceAccount has the 'pubsub.topics.setIamPolicy' permission on the topic.
    // https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/setIamPolicy
    $pubsubTopic = $securityCenterClient::topicName($projectId, $topicName);
    // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
    $notificationConfigName = $securityCenterClient::notificationConfigName($organizationId, $notificationConfigId);

    $streamingConfig = (new StreamingConfig())->setFilter('state = "ACTIVE"');
    $fieldMask = (new FieldMask())->setPaths(['description', 'pubsub_topic', 'streaming_config.filter']);
    $notificationConfig = (new NotificationConfig())
        ->setName($notificationConfigName)
        ->setDescription('Updated description.')
        ->setPubsubTopic($pubsubTopic)
        ->setStreamingConfig($streamingConfig);
    $updateNotificationConfigRequest = (new UpdateNotificationConfigRequest())
        ->setNotificationConfig($notificationConfig);

    $response = $securityCenterClient->updateNotificationConfig($updateNotificationConfigRequest);
    printf('Notification config was updated: %s' . PHP_EOL, $response->getName());
}

Ruby

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

require "google/cloud/security_center"

# Your organization id. e.g. for "organizations/123", this would be "123".
# org_id = "YOUR_ORGANZATION_ID"

# Your notification config id. e.g. for
# "organizations/123/notificationConfigs/my-config" this would be "my-config".
# config_id = "YOUR_CONFIG_ID"

# Updated description of the notification config.
# description = "YOUR_DESCRIPTION"

# The PubSub topic where notifications will be published.
# pubsub_topic = "YOUR_TOPIC"

# Updated filter string for Notification config.
# filter = "UPDATED_FILTER"

client = Google::Cloud::SecurityCenter.security_center

# You can also use 'project_id' or 'folder_id' as a parent.
config_path = client.notification_config_path organization:        org_id,
                                              notification_config: config_id
notification_config = { name: config_path }
notification_config[:description] = description unless description.nil?
notification_config[:pubsub_topic] = pubsub_topic unless pubsub_topic.nil?
notification_config[:streaming_config][:filter] = filter unless filter.nil?

paths = []
paths.push "description" unless description.nil?
paths.push "pubsub_topic" unless pubsub_topic.nil?
paths.push "streaming_config.filter" unless filter.nil?
update_mask = { paths: paths }

response = client.update_notification_config(
  notification_config: notification_config,
  update_mask:         update_mask
)
puts response

C#

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


using Google.Cloud.SecurityCenter.V1;
using static Google.Cloud.SecurityCenter.V1.NotificationConfig.Types;
using Google.Protobuf.WellKnownTypes;
using System;

/// <summary>Snippet for UpdateNotificationConfig</summary>
public class UpdateNotificationConfigSnippets
{
    public static NotificationConfig UpdateNotificationConfig(
        string organizationId, string notificationConfigId, string projectId, string topicName)
    {
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        NotificationConfigName notificationConfigName = new NotificationConfigName(organizationId, notificationConfigId);
        TopicName pubsubTopic = new TopicName(projectId, topicName);

        NotificationConfig configToUpdate = new NotificationConfig
        {
            NotificationConfigName = notificationConfigName,
            Description = "updated description",
            PubsubTopicAsTopicName = pubsubTopic,
            StreamingConfig = new StreamingConfig { Filter = "state = \"INACTIVE\"" }
        };

        FieldMask fieldMask = new FieldMask { Paths = { "description", "pubsub_topic", "streaming_config.filter" } };
        SecurityCenterClient client = SecurityCenterClient.Create();
        NotificationConfig updatedConfig = client.UpdateNotificationConfig(configToUpdate, fieldMask);

        Console.WriteLine($"Notification config updated: {updatedConfig}");
        return updatedConfig;
    }
}

NotificationConfig löschen

Zum Löschen eines NotificationConfig benötigen Sie eine IAM-Rolle mit der Berechtigung securitycenter.notification.delete.

Wenn Sie einen NotificationConfig löschen, bleibt die Rolle securitycenter.notificationServiceAgent im Pub/Sub-Thema. Wenn Sie das Pub/Sub-Thema in keinem anderen NotificationConfig verwenden, entfernen Sie die Rolle aus dem Thema. Weitere Informationen finden Sie unter Zugriffssteuerung.

Löschen Sie einen NotificationConfig mit der Sprache Ihrer Wahl:

gcloud

gcloud scc notifications delete PARENT_TYPE/PARENT_ID/locations/LOCATION/notificationConfigs/NOTIFICATION_NAME

Ersetzen Sie Folgendes:

  • PARENT_TYPE mit organizations, folders oder projects, je nachdem, welche Ebene der Ressourcenhierarchie in der Benachrichtigungskonfiguration angegeben wurde.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: erforderlich, wenn entweder der Datenstandort aktiviert ist oder die notificationConfig mit der API Version 2 erstellt wurde.

    Wenn der Datenstandort aktiviert ist, geben Sie den Speicherort von Security Command Center an, an dem die Benachrichtigung gespeichert wird.

    Wenn der Datenstandort nicht aktiviert ist, fügen Sie /locations/LOCATION in den vollständigen Namen ein oder geben Sie das Flag --location nur an, wenn die notificationConfig mit der Security Command Center API Version 2 erstellt wurde. In diesem Fall ist der einzige gültige Speicherort global.

  • NOTIFICATION_NAME: der Name der Benachrichtigung.

Python

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

def delete_notification_config(parent_id, notification_config_id):
    """
    Args:
        parent_id: must be in one of the following formats:
            "organizations/{organization_id}"
            "projects/{project_id}"
            "folders/{folder_id}"
        notification_config_id: "your-config-id"
    """
    from google.cloud import securitycenter as securitycenter

    client = securitycenter.SecurityCenterClient()

    notification_config_name = (
        f"{parent_id}/notificationConfigs/{notification_config_id}"
    )

    client.delete_notification_config(request={"name": notification_config_name})
    print(f"Deleted notification config: {notification_config_name}")

Java

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import java.io.IOException;

public class DeleteNotificationConfigSnippets {

  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 = String.format("organizations/%s", "ORG_ID");

    String notificationConfigId = "{config-id}";

    deleteNotificationConfig(parentId, notificationConfigId);
  }

  // Delete a notification config.
  public static boolean deleteNotificationConfig(String parentId, 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()) {

      client.deleteNotificationConfig(String.format("%s/notificationConfigs/%s",
          parentId, notificationConfigId));

      System.out.printf("Deleted Notification config: %s%n", notificationConfigId);
    }
    return true;
  }
}

Einfach loslegen (Go)

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

import (
	"context"
	"fmt"
	"io"

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

func deleteNotificationConfig(w io.Writer, orgID string, notificationConfigID string) error {
	// orgID := "your-org-id"
	// notificationConfigID := "config-to-delete"

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

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

	// Parent must be in one of the following formats:
	//		"organizations/{orgId}"
	//		"projects/{projectId}"
	//		"folders/{folderId}"
	parent := fmt.Sprintf("organizations/%s", orgID)
	name := fmt.Sprintf("%s/notificationConfigs/%s", parent, notificationConfigID)
	req := &securitycenterpb.DeleteNotificationConfigRequest{
		Name: name,
	}

	if err = client.DeleteNotificationConfig(ctx, req); err != nil {
		return fmt.Errorf("Failed to retrieve notification config: %w", err)
	}
	fmt.Fprintln(w, "Deleted config: ", name)

	return nil
}

Node.js

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

// npm install @google-cloud/security-center/
const {SecurityCenterClient} = require('@google-cloud/security-center');

const client = new SecurityCenterClient();

// formattedConfigName: You can also use
//    `client.projectNotificationConfigPath(projectId, configId)` or
//    `client.folderNotificationConfigPath(folderId, configId)`.
// configId = "your-config-id";
const formattedConfigName = client.organizationNotificationConfigPath(
  organizationId,
  configId
);

async function deleteNotificationConfg() {
  await client.deleteNotificationConfig({name: formattedConfigName});
  console.log('Notification config deleted: ', formattedConfigName);
}

deleteNotificationConfg();

PHP

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

use Google\Cloud\SecurityCenter\V1\Client\SecurityCenterClient;
use Google\Cloud\SecurityCenter\V1\DeleteNotificationConfigRequest;

/**
 * @param string $organizationId        Your org ID
 * @param string $notificationConfigId  A unique identifier
 */
function delete_notification(string $organizationId, string $notificationConfigId): void
{
    $securityCenterClient = new SecurityCenterClient();
    $notificationConfigName = $securityCenterClient::notificationConfigName(
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        $organizationId,
        $notificationConfigId
    );
    $deleteNotificationConfigRequest = (new DeleteNotificationConfigRequest())
        ->setName($notificationConfigName);

    $securityCenterClient->deleteNotificationConfig($deleteNotificationConfigRequest);
    print('Notification config was deleted' . PHP_EOL);
}

Ruby

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

require "google/cloud/security_center"

# Your organization id. e.g. for "organizations/123", this would be "123".
# org_id = "YOUR_ORGANZATION_ID"

# Your notification config id. e.g. for
# "organizations/123/notificationConfigs/my-config" this would be "my-config".
# config_id = "YOUR_CONFIG_ID"

client = Google::Cloud::SecurityCenter.security_center

# You can also use 'project_id' or 'folder_id' as a parent.
config_path = client.notification_config_path organization:        org_id,
                                              notification_config: config_id

response = client.delete_notification_config name: config_path
puts "Deleted notification config #{config_id} with response: #{response}"

C#

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


using Google.Cloud.SecurityCenter.V1;
using System;

/// <summary>Snippet for DeleteNotificationConfig</summary>
public class DeleteNotificationConfigSnippets
{
    public static bool DeleteNotificationConfig(string organizationId, string notificationConfigId)
    {
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        NotificationConfigName notificationConfigName = new NotificationConfigName(organizationId, notificationConfigId);
        SecurityCenterClient client = SecurityCenterClient.Create();

        client.DeleteNotificationConfig(notificationConfigName);
        Console.WriteLine($"Deleted Notification config: {notificationConfigName}");
        return true;
    }
}

NotificationsConfigs auflisten

Sie benötigen eine IAM-Rolle mit der Berechtigung securitycenter.notification.list, um NotificationConfigs aufzulisten.

Alle Security Command Center API-Listen sind paginiert. Jede Antwort gibt eine Seite mit Ergebnissen und ein Token zurück, um die nächste Seite zurückzugeben. Der Standardwert von pageSize ist 10. Sie können die Seitengröße auf mindestens 1 und maximal 1.000 festlegen.

Listen Sie NotificationConfigs mit der gewünschten Sprache auf:

gcloud

gcloud scc notifications list PARENT_TYPE/PARENT_ID/locations/LOCATION

Ersetzen Sie Folgendes:

  • PARENT_TYPE durch organizations, folders oder projects, je nachdem, in welchem Bereich Sie Benachrichtigungen auflisten möchten.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: erforderlich, wenn entweder der Datenstandort aktiviert ist oder die notificationConfig-Ressourcen mit der API Version 2 erstellt wurden.

    Wenn der Datenstandort aktiviert ist, geben Sie den Standort von Security Command Center an, an dem die Benachrichtigungen gespeichert werden sollen.

    Wenn der Datenstandort nicht aktiviert ist, einschließlich /locations/LOCATION im Namen oder das Flag --location im Befehl, werden nur die notificationConfig-Ressourcen aufgelistet, die mit der Security Command Center API Version 2 erstellt wurden. Der einzige gültige Speicherort ist global.

Python

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

def list_notification_configs(parent_id):
    """
    Args:
        parent_id: must be in one of the following formats:
            "organizations/{organization_id}"
            "projects/{project_id}"
            "folders/{folder_id}"
    """
    from google.cloud import securitycenter as securitycenter

    client = securitycenter.SecurityCenterClient()

    notification_configs_iterator = client.list_notification_configs(
        request={"parent": parent_id}
    )
    for i, config in enumerate(notification_configs_iterator):
        print(f"{i}: notification_config: {config}")

Java

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


import com.google.cloud.securitycenter.v1.NotificationConfig;
import com.google.cloud.securitycenter.v1.SecurityCenterClient;
import com.google.cloud.securitycenter.v1.SecurityCenterClient.ListNotificationConfigsPagedResponse;
import com.google.common.collect.ImmutableList;
import java.io.IOException;

public class ListNotificationConfigSnippets {

  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 = String.format("organizations/%s", "ORG_ID");

    listNotificationConfigs(parentId);
  }

  // List notification configs present in the given parent.
  public static ImmutableList<NotificationConfig> listNotificationConfigs(String parentId)
      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()) {

      ListNotificationConfigsPagedResponse response = client.listNotificationConfigs(parentId);

      ImmutableList<NotificationConfig> notificationConfigs =
          ImmutableList.copyOf(response.iterateAll());

      System.out.printf("List notifications response: %s%n", response.getPage().getValues());
      return notificationConfigs;
    }
  }
}

Einfach loslegen (Go)

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

import (
	"context"
	"fmt"
	"io"

	securitycenter "cloud.google.com/go/securitycenter/apiv1"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
	"google.golang.org/api/iterator"
)

func listNotificationConfigs(w io.Writer, orgID string) error {
	// orgId := "your-org-id"

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

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

	req := &securitycenterpb.ListNotificationConfigsRequest{
		// Parent must be in one of the following formats:
		//		"organizations/{orgId}"
		//		"projects/{projectId}"
		//		"folders/{folderId}"
		Parent: fmt.Sprintf("organizations/%s", orgID),
	}
	it := client.ListNotificationConfigs(ctx, req)
	for {
		result, err := it.Next()
		if err == iterator.Done {
			break
		}

		if err != nil {
			return fmt.Errorf("it.Next: %w", err)
		}

		fmt.Fprintln(w, "NotificationConfig: ", result)
	}

	return nil
}

Node.js

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

// npm install @google-cloud/security-center/
const {SecurityCenterClient} = require('@google-cloud/security-center');

const client = new SecurityCenterClient();

// parent: must be in one of the following formats:
//    `organizations/${organization_id}`
//    `projects/${project_id}`
//    `folders/${folder_id}`
const parent = `organizations/${organizationId}`;

async function listNotificationConfigs() {
  const [resources] = await client.listNotificationConfigs({parent: parent});
  console.log('Received Notification configs: ');
  for (const resource of resources) {
    console.log(resource);
  }
}

listNotificationConfigs();

PHP

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

use Google\Cloud\SecurityCenter\V1\Client\SecurityCenterClient;
use Google\Cloud\SecurityCenter\V1\ListNotificationConfigsRequest;

/**
 * @param string $organizationId        Your org ID
 */
function list_notification(string $organizationId): void
{
    $securityCenterClient = new SecurityCenterClient();
    // 'parent' must be in one of the following formats:
    //		"organizations/{orgId}"
    //		"projects/{projectId}"
    //		"folders/{folderId}"
    $parent = $securityCenterClient::organizationName($organizationId);
    $listNotificationConfigsRequest = (new ListNotificationConfigsRequest())
        ->setParent($parent);

    foreach ($securityCenterClient->listNotificationConfigs($listNotificationConfigsRequest) as $element) {
        printf('Found notification config %s' . PHP_EOL, $element->getName());
    }

    print('Notification configs were listed' . PHP_EOL);
}

Ruby

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.

require "google/cloud/security_center"

# Your organization id. e.g. for "organizations/123", this would be "123".
# org_id = "YOUR_ORGANZATION_ID"

client = Google::Cloud::SecurityCenter.security_center

# You can also use 'project_id' or 'folder_id' as a parent.
# client.project_path project: project_id
# client.folder_path folder: folder_id
parent = client.organization_path organization: org_id

client.list_notification_configs(parent: parent).each_page do |page|
  page.each do |element|
    puts element
  end
end

C#

Im folgenden Beispiel wird die API V1 verwendet. Wenn Sie das Beispiel für v2 ändern möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie dem Ressourcennamen nach /PARENT/PARENT_ID /locations/LOCATION hinzu, wobei PARENT entweder organizations, folders oder projects ist.

Fügen Sie für Ergebnisse /locations/LOCATION dem Ressourcennamen nach /sources/SOURCE_ID hinzu, wobei SOURCE_ID die ID des Security Command Center-Dienstes ist, der das Ergebnis ausgestellt hat.


using Google.Api.Gax.ResourceNames;
using Google.Api.Gax;
using Google.Cloud.SecurityCenter.V1;
using System;

/// <summary>Snippet for ListNotificationConfig</summary>
public class ListNotificationConfigSnippets
{
    public static PagedEnumerable<ListNotificationConfigsResponse, NotificationConfig> ListNotificationConfigs(string organizationId)
    {
        // You can also use 'projectId' or 'folderId' instead of the 'organizationId'.
        //      ProjectName projectName = new ProjectName(projectId);
        //      FolderName folderName = new FolderName(folderId);
        OrganizationName orgName = new OrganizationName(organizationId);
        SecurityCenterClient client = SecurityCenterClient.Create();
        PagedEnumerable<ListNotificationConfigsResponse, NotificationConfig> notificationConfigs = client.ListNotificationConfigs(orgName);

        // Print Notification Configuration names.
        foreach (var config in notificationConfigs)
        {
            Console.WriteLine(config.NotificationConfigName);
        }
        return notificationConfigs;
    }
}

Pub/Sub-Benachrichtigungen erhalten

Dieser Abschnitt enthält eine Beispielbenachrichtigung und Beispiele, die zeigen, wie eine Pub/Sub-Nachricht in eine NotificationMessage umgewandelt wird, die ein Ergebnis enthält.

Benachrichtigungen werden im JSON-Format in Pub/Sub veröffentlicht. Hier ein Beispiel für eine Benachrichtigung:

{
   "notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/CONFIG_ID",
   "finding": {
     "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
     "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
     "state": "ACTIVE",
     "category": "TEST-CATEGORY",
     "securityMarks": {
       "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks"
     },
     "eventTime": "2019-07-26T07:32:37Z",
     "createTime": "2019-07-29T18:45:27.243Z"
   }
 }

Konvertieren Sie eine Pub/Sub-Nachricht mit der Sprache Ihrer Wahl in einen NotificationMessage:

gcloud

Die gcloud-CLI unterstützt nicht die Konvertierung einer Pub/Sub-Nachricht in eine NotificationMessage. Mit der gcloud-CLI können Sie eine NotificationMessage abrufen und JSON direkt in Ihrem Terminal ausgeben:

  # The subscription used to receive published messages from a topic
  PUBSUB_SUBSCRIPTION="projects/PROJECT_ID/subscriptions/SUBSCRIPTION_ID"

  gcloud pubsub subscriptions pull $PUBSUB_SUBSCRIPTION

Ersetzen Sie Folgendes:

  • PROJECT_ID durch Ihre Projekt-ID,
  • SUBSCRIPTION_ID durch Ihre Abo-ID.

Python

# Requires https://cloud.google.com/pubsub/docs/quickstart-client-libraries#pubsub-client-libraries-python
import concurrent

from google.cloud import pubsub_v1
from google.cloud.securitycenter_v1 import NotificationMessage

# TODO: project_id = "your-project-id"
# TODO: subscription_name = "your-subscription-name"

def callback(message):
    # Print the data received for debugging purpose if needed
    print(f"Received message: {message.data}")

    notification_msg = NotificationMessage.from_json(message.data)

    print(
        "Notification config name: {}".format(
            notification_msg.notification_config_name
        )
    )
    print(f"Finding: {notification_msg.finding}")

    # Ack the message to prevent it from being pulled again
    message.ack()

subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(project_id, subscription_name)

streaming_pull_future = subscriber.subscribe(subscription_path, callback=callback)

print(f"Listening for messages on {subscription_path}...\n")
try:
    streaming_pull_future.result(timeout=1)  # Block for 1 second
except concurrent.futures.TimeoutError:
    streaming_pull_future.cancel()

Java


import com.google.cloud.pubsub.v1.AckReplyConsumer;
import com.google.cloud.pubsub.v1.MessageReceiver;
import com.google.cloud.pubsub.v1.Subscriber;
import com.google.cloud.securitycenter.v1.NotificationMessage;
import com.google.protobuf.InvalidProtocolBufferException;
import com.google.protobuf.util.JsonFormat;
import com.google.pubsub.v1.ProjectSubscriptionName;
import com.google.pubsub.v1.PubsubMessage;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class NotificationReceiver {

  private NotificationReceiver() {
  }

  public static void receiveNotificationMessages(String projectId, String subscriptionId) {
    // String projectId = "{your-project}";
    // String subscriptionId = "{your-subscription}";
    ProjectSubscriptionName subscriptionName =
        ProjectSubscriptionName.of(projectId, subscriptionId);

    try {
      Subscriber subscriber =
          Subscriber.newBuilder(subscriptionName, new NotificationMessageReceiver()).build();
      subscriber.startAsync().awaitRunning();

      // This sets the timeout value of the subscriber to 10s.
      subscriber.awaitTerminated(10_000, TimeUnit.MILLISECONDS);
    } catch (IllegalStateException | TimeoutException e) {
      System.out.println("Subscriber stopped: " + e);
    }
  }

  static class NotificationMessageReceiver implements MessageReceiver {

    @Override
    public void receiveMessage(PubsubMessage message, AckReplyConsumer consumer) {
      NotificationMessage.Builder notificationMessageBuilder = NotificationMessage.newBuilder();

      try {
        String jsonString = message.getData().toStringUtf8();
        JsonFormat.parser().merge(jsonString, notificationMessageBuilder);

        NotificationMessage notificationMessage = notificationMessageBuilder.build();
        System.out.println(
            String.format("Config id: %s", notificationMessage.getNotificationConfigName()));
        System.out.println(String.format("Finding: %s", notificationMessage.getFinding()));
      } catch (InvalidProtocolBufferException e) {
        System.out.println("Could not parse message: " + e);
      } finally {
        consumer.ack();
      }
    }
  }
}

Einfach loslegen (Go)

import (
	"bytes"
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/pubsub"
	"cloud.google.com/go/securitycenter/apiv1/securitycenterpb"
	"github.com/golang/protobuf/jsonpb"
)

func receiveMessages(w io.Writer, projectID string, subscriptionName string) error {
	// projectID := "your-project-id"
	// subsriptionName := "your-subscription-name"

	ctx := context.Background()

	client, err := pubsub.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("pubsub.NewClient: %w", err)
	}
	defer client.Close()

	sub := client.Subscription(subscriptionName)
	cctx, cancel := context.WithCancel(ctx)
	err = sub.Receive(cctx, func(ctx context.Context, msg *pubsub.Message) {
		var notificationMessage = new(securitycenterpb.NotificationMessage)
		jsonpb.Unmarshal(bytes.NewReader(msg.Data), notificationMessage)

		fmt.Fprintln(w, "Got finding: ", notificationMessage.GetFinding())
		msg.Ack()
		cancel()
	})
	if err != nil {
		return fmt.Errorf("Receive: %w", err)
	}

	return nil
}

Node.js

const {PubSub} = require('@google-cloud/pubsub');
const {StringDecoder} = require('string_decoder');

// projectId = 'your-project-id'
// subscriptionId = 'your-subscription-id'

const subscriptionName =
  'projects/' + projectId + '/subscriptions/' + subscriptionId;
const pubSubClient = new PubSub();

function listenForMessages() {
  const subscription = pubSubClient.subscription(subscriptionName);

  // message.data is a buffer array of json
  // 1. Convert buffer to normal string
  // 2. Convert json to NotificationMessage object
  const messageHandler = message => {
    const jsonString = new StringDecoder('utf-8').write(message.data);
    const parsedNotificationMessage = JSON.parse(jsonString);

    console.log(parsedNotificationMessage);
    console.log(parsedNotificationMessage.finding);

    // ACK when done with message
    message.ack();
  };

  subscription.on('message', messageHandler);

  // Set timeout to 10 seconds
  setTimeout(() => {
    subscription.removeListener('message', messageHandler);
  }, 10000);
}

listenForMessages();

PHP

use Google\Cloud\PubSub\PubSubClient;

/**
 * @param string $projectId             Your Cloud Project ID
 * @param string $subscriptionId        Your subscription ID
 */
function receive_notification(string $projectId, string $subscriptionId): void
{
    $pubsub = new PubSubClient([
        'projectId' => $projectId,
    ]);
    $subscription = $pubsub->subscription($subscriptionId);

    foreach ($subscription->pull() as $message) {
        printf('Message: %s' . PHP_EOL, $message->data());
        // Acknowledge the Pub/Sub message has been received, so it will not be pulled multiple times.
        $subscription->acknowledge($message);
    }
}

Nächste Schritte