Benachrichtigungskonfigurationen erstellen und verwalten

Auf dieser Seite wird die Verwendung das Benachrichtigungsfeature 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 Security Command Center Premium-Kunden kontinuierliche Exporte einrichten für Pub/Sub in Security Command Center.

Hinweis

Um die Beispiele auf dieser Seite zu verwenden, müssen Sie den Leitfaden zur Benachrichtigungen zu Ergebnisbenachrichtigungen einrichten.

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

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

Wenn Sie einem Nutzer, der auf eine notificationConfig zugreift, die entsprechenden Rollen zuweisen möchten, benötigen Sie eine der folgenden IAM-Rollen:

  • 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 in der Organisation, Ordner- oder Projektebene. Ob Sie Ergebnisse, Assets und Sicherheitsquellen ansehen, bearbeiten, erstellen oder aktualisieren können, hängt davon ab, auf welcher Ebene Sie Zugriff erhalten. Weitere Informationen über Security Command Center-Rollen finden Sie unter Zugriffssteuerung.

Datenstandort und Benachrichtigungen

Wenn der Datenstandort für Security Command Center aktiviert, die Konfigurationen, kontinuierliche Exporte nach Pub/Sub (notificationConfig Ressourcen) unterliegen bis hin zur Kontrolle des Datenstandorts, und werden in Ihrem Speicherort von Security Command Center.

So exportieren Sie Ergebnisse an einem Security Command Center-Speicherort nach Pub/Sub verwenden, müssen Sie die kontinuierliche und zwar am selben Security Command Center-Speicherort wie die Ergebnisse.

Da die Filter, die in kontinuierlichen Exporte können Daten enthalten, die Standortkontrollen unterliegen, achten Sie darauf, dass Sie den richtigen Speicherort angeben, bevor Sie sie erstellen. In 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 diese Einstellung nicht mehr ihren Standort. Wenn Sie den Speicherort ändern möchten, müssen Sie den kontinuierlichen Export löschen und am neuen Speicherort neu erstellen.

So rufen Sie einen kontinuierlichen Export mithilfe von API-Aufrufen ab: müssen Sie den Standort im vollständigen Ressourcennamen der notificationConfig Beispiel:

GET https://securitycenter.googleapis.com/v2/{name=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 entweder im vollständigen Ressourcennamen der Konfiguration oder mit dem Flag --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

Weitere Informationen finden Sie im Abschnitt Pub/Sub-Thema einrichten in der Anleitung Ergebnis-Benachrichtigungen einrichten.

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

Das Feld NotificationConfig enthält ein Feld filter, das Benachrichtigungen auf nützliche Ereignisse beschränkt. Dieses Feld akzeptiert alle Filter, die in der Security Command Center API findings.list .

Wenn Sie ein NotificationConfig erstellen, legen Sie ein übergeordnetes Element für die NotificationConfig aus der Google Cloud-Ressourcenhierarchie, entweder ein Organisation, Ordner oder 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.

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 der Datenstandort aktiviert ist, geben Sie den Speicherort von Security Command Center in dem die Benachrichtigung erstellt werden soll. Der resultierende notificationConfig Ressource wird nur an diesem Standort gespeichert. Nur Ergebnisse, die an diesem Standort ausgegeben werden, werden an Pub/Sub gesendet.

Wenn der Datenstandort nicht aktiviert ist, wird die Benachrichtigung mithilfe der Security Command Center API v2 erstellt, wenn das Flag --location angegeben wird. Der einzige gültige Wert für das Flag ist global. * NOTIFICATION_DESCRIPTION: eine Beschreibung des Benachrichtigung mit einer Länge von maximal 1024 Zeichen. * PUBSUB_TOPIC: Das Pub/Sub-Thema, an das Benachrichtigungen gesendet werden. 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\"

Python

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

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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;
    }
  }
}

Go

Im folgenden Beispiel wird die v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1 API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

// 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 v1-API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1 API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.


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 automatisch die Rolle securitycenter.notificationServiceAgent. für die IAM-Richtlinie für PUBSUB_TOPIC beim Erstellen der Benachrichtigungskonfiguration. Dieses Die 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 die in der Benachrichtigungskonfiguration angegeben sind.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: Erforderlich, wenn entweder der Datenstandort aktiviert ist oder die notificationConfig-Ressourcen mit der API v2 erstellt wurden.

    Wenn der Datenstandort aktiviert ist, geben Sie den Security Command Center-Speicherort an, an dem die Benachrichtigungen gespeichert werden.

    Wenn die Datenspeicherung nicht aktiviert ist, geben Sie /locations/LOCATION nur an, wenn die notificationConfig-Ressource mit der Security Command Center API v2 erstellt wurde. In diesem Fall ist global der einzige gültige Speicherort.

  • NOTIFICATION_NAME: der Name der Benachrichtigung.

Python

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

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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;
    }
  }
}

Go

Im folgenden Beispiel wird die v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1 API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1 API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 NotificationConfig Beschreibung, Pub/Sub-Thema und Filter mit der Sprache deines Auswahl:

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 die in der Benachrichtigungskonfiguration angegeben sind.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: Erforderlich, wenn entweder der Datenstandort aktiviert ist oder die notificationConfig mit der API v2 erstellt wurde.

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

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

  • NOTIFICATION_NAME: der Name der Benachrichtigung.

  • NOTIFICATION_DESCRIPTION: eine Beschreibung des Benachrichtigung mit einer Länge von maximal 1024 Zeichen.

  • PUBSUB_TOPIC: das Pub/Sub-Thema, das Benachrichtigungen erhält. Das Format ist projects/PROJECT_ID/topics/TOPIC.

  • FILTER: der Ausdruck, den Sie auswählen welche Ergebnisse an Pub/Sub gesendet werden. Beispiel: state="ACTIVE"

Python

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

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.


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;
    }
  }
}

Go

Im folgenden Beispiel wird die v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1 API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1 API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.


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 die in der Benachrichtigungskonfiguration angegeben sind.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: Erforderlich, wenn entweder der Datenstandort aktiviert ist oder die notificationConfig mit der API v2 erstellt wurde.

    Wenn der Datenstandort aktiviert ist, geben Sie den Security Command Center-Speicherort in dem die Benachrichtigung gespeichert ist.

    Wenn der Datenstandort nicht aktiviert ist, fügen Sie /locations/LOCATION im vollständigen Namen oder Geben Sie das Flag --location nur an, wenn die notificationConfig mit der Security Command Center API v2 erstellt wurde. ist der einzige gültige Standort global.

  • NOTIFICATION_NAME: der Name der Benachrichtigung.

Python

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

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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;
  }
}

Go

Im folgenden Beispiel wird die v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1 API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

// 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 v1-API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1 API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.


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 mit organizations, folders oder projects, je nachdem, in welchem Umfang Benachrichtigungen aufgelistet werden sollen.
  • PARENT_ID durch die numerische ID der übergeordneten Ressource.
  • LOCATION: erforderlich, wenn entweder der Datenstandort ist aktiviert oder die Ressourcen notificationConfig wurden mit dem API v2.

    Wenn der Datenstandort aktiviert ist, geben Sie den Security Command Center-Speicherort an, an dem die Benachrichtigungen gespeichert werden.

    Wenn der Datenstandort nicht aktiviert ist, werden durch das Einfügen von /locations/LOCATION in den Namen oder das --location-Flag in den Befehl nur die notificationConfig-Ressourcen aufgelistet, die mit der Security Command Center API v2 erstellt wurden. Der einzige gültige Speicherort ist dann global.

Python

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

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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;
    }
  }
}

Go

Im folgenden Beispiel wird die v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1 API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1-API verwendet. Wenn Sie das Beispiel für Version 2 anpassen möchten, ersetzen Sie v1 durch v2 und fügen Sie dem Ressourcennamen /locations/LOCATION hinzu.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.

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 v1-API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Für die meisten Ressourcen fügen Sie /locations/LOCATION zum Ressourcenname nach /PARENT/PARENT_ID, wobei PARENT ist der organizations, folders, oder projects.

Fügen Sie bei Ergebnissen dem Ressourcennamen nach /sources/SOURCE_ID die Zeichenfolge /locations/LOCATION hinzu. Dabei ist SOURCE_ID die ID des Security Command Center-Dienstes, der das Ergebnis ausgegeben 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 v1 API verwendet. So ändern Sie die Einstellungen: im Beispiel für v2, ersetzen Sie v1 durch v2 und fügen Sie /locations/LOCATION für den Ressourcennamen.

Fügen Sie bei den meisten Ressourcen dem Ressourcennamen nach /PARENT/PARENT_ID die Zahl /locations/LOCATION hinzu. Dabei steht PARENT für organizations, folders oder projects.

Fügen Sie der Ressource /locations/LOCATION hinzu, um Ergebnisse zu erhalten Name nach /sources/SOURCE_ID, wobei SOURCE_ID ist die ID des Security Command Center-Dienst die das Fundament erhalten haben.


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

Dabei gilt:

  • 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();
      }
    }
  }
}

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