Abilita le notifiche sui risultati per Pub/Sub

Questa pagina spiega come attivare le notifiche dell'API Security Command Center.

Le notifiche inviano risultati e aggiornamenti dei risultati a un argomento Pub/Sub in pochi minuti. Le notifiche dell'API Security Command Center includono tutti i risultati visualizzate da Security Command Center nella nella console Google Cloud.

Puoi connettere le notifiche di Security Command Center in Pub/Sub direttamente alle azioni delle funzioni di Cloud Run. Per per funzioni di esempio utili per la risposta, l'arricchimento e la correzione, vedi il repository open source Security Command Center del codice delle funzioni Cloud Run. Il repository contiene soluzioni per aiutarti a eseguire azioni automatizzate in materia di sicurezza i risultati.

In alternativa, puoi esportare i risultati in BigQuery o configurare le esportazioni continue per Pub/Sub nella console Google Cloud.

Prima di iniziare

Per impostare e configurare le notifiche, devi disporre di quanto segue Ruoli IAM (Identity and Access Management):

  • Amministratore Security Center (roles/securitycenter.Admin): per attivare le notifiche dell'API Security Command Center
  • Visualizzatore amministratore Centro sicurezza (roles/securitycenter.adminViewer): per accedere a Security Command Center nella console Google Cloud
  • Per concedere ruoli all'account di servizio delle notifiche o l'account gcloud CLI a livello di organizzazione a livello di cartella o di progetto, uno dei seguenti ruoli:
    • Amministratore dell'organizzazione (roles/resourcemanager.organizationAdmin)
    • Amministratore IAM cartella (roles/resourcemanager.folderIamAdmin)
    • Amministratore IAM progetto (roles/resourcemanager.projectIamAdmin)

I ruoli IAM per Security Command Center possono essere concessi a livello di organizzazione, a livello di cartella o di progetto. Puoi visualizzare, modificare, creare o aggiornare risultati, asset e le origini di sicurezza dipendono dal livello a cui ti viene concesso l'accesso. Per scoprire di più sui ruoli di Security Command Center, consulta Controllo degli accessi.

Configurazione delle notifiche dell'API Security Command Center

Per configurare le notifiche, abilita prima l'API Security Command Center.

Abilitazione dell'API Security Command Center

Per abilitare l'API Security Command Center:

  1. Vai alla pagina Libreria API nella console Google Cloud.

    Vai alla Libreria API

  2. Seleziona il progetto per cui vuoi attivare l'API di notifica.

  3. Nella casella Cerca, inserisci Security Command Center e poi fai clic su Security Command Center nei risultati di ricerca.

  4. Nella pagina dell'API visualizzata, fai clic su Abilita.

L'API Security Command Center è abilitata per il tuo progetto. Quindi, utilizzi gcloud CLI o le librerie client per sottoscrivere un Pub/Sub e configurare le autorizzazioni.

Residenza dei dati e notifiche

Se la residenza dei dati è abilitata per Security Command Center, le configurazioni che definiscono le esportazioni continue in Pub/Sub, ovvero le risorse notificationConfig, sono soggette al controllo della residenza dei dati e vengono archiviate nella località di Security Command Center.

Per esportare i risultati in una posizione di Security Command Center in Pub/Sub, devi configurare l'esportazione continua nella stessa posizione di Security Command Center dei risultati.

Poiché i filtri utilizzati nelle esportazioni continue possono contenere dati soggetti a controlli della residenza, assicurati di specificare la località corretta prima di crearli. Security Command Center non limita la località in cui crei le esportazioni.

Le esportazioni continue vengono archiviate solo nella posizione in cui vengono create e non possono essere visualizzate o modificate in altre posizioni.

Una volta creata un'esportazione continua, non puoi modificarne la posizione. Per modificare la posizione, devi eliminare l'esportazione continua e ricrearla nella nuova posizione.

Per recuperare un'esportazione continua mediante le chiamate API, devi specificare la località nel nome completo notificationConfig. Ad esempio:

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

Analogamente, per recuperare un'esportazione continua utilizzando con gcloud CLI, devi specificare la posizione nel nome completo della risorsa della configurazione o utilizzando --locations flag. Ad esempio:

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

Configurazione di un argomento Pub/Sub

In questo passaggio, crei e ti abboni all'argomento Pub/Sub a cui vuoi inviare le notifiche. Se non devi chiamare programmaticamente l'API, ti consigliamo di utilizzare i comandi dell'interfaccia a riga di comando gcloud.

gcloud

Per configurare la funzionalità di notifiche dell'API Security Command Center utilizzando l'interfaccia a riga di comando gcloud, svolgi i seguenti passaggi:

  1. Configurare un argomento e una sottoscrizione Pub/Sub.
  2. Configura le autorizzazioni dell'account gcloud CLI.

Passaggio 1: configura Pub/Sub

Per configurare e iscriverti a un argomento Pub/Sub, segui questi passaggi:

  1. Vai alla console Google Cloud.

    Vai alla console Google Cloud

  2. Seleziona il progetto per cui hai attivato l'API Security Command Center.

  3. Fai clic su Attiva Cloud Shell.

  4. Per creare un nuovo argomento Pub/Sub o utilizzare un argomento esistente, esegui questo comando:

      gcloud pubsub topics create TOPIC_ID
    

    Sostituisci TOPIC_ID con il nome dell'argomento.

  5. Imposta la variabile di ambiente dell'ID argomento:

      export TOPIC_ID=TOPIC_ID
    
  6. Crea una sottoscrizione per l'argomento:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Sostituisci SUBSCRIPTION_ID con il tuo abbonamento nome.

Per saperne di più sulla configurazione di Pub/Sub, consulta Gestione degli argomenti e degli abbonamenti.

Poi devi impostare le autorizzazioni per il tuo account.

Passaggio 2: configura le autorizzazioni dell'account gcloud CLI

Per creare un NotificationConfig, devi concedere i seguenti ruoli al tuo account gcloud CLI:

  • Amministratore Centro sicurezza (roles/securitycenter.admin) o Editor configurazioni notifiche Centro sicurezza (roles/securitycenter.notificationConfigEditor). Questo ruolo deve essere assegnati allo stesso livello: organizzazione, cartella progetto in cui stai creando NotificationConfig.
  • Amministratore Pub/Sub (roles/pubsub.admin) nella Argomento Pub/Sub che riceve notifiche

nell'organizzazione, nella cartella o nel progetto livello

Per concedere queste autorizzazioni:

  1. Vai alla console Google Cloud.

    Vai alla console Google Cloud

  2. Seleziona il progetto per il quale hai abilitato l'API Security Command Center.

  3. Fai clic su Attiva Cloud Shell.

    1. Imposta il nome della tua organizzazione:

      export ORGANIZATION_ID=ORGANIZATION_ID
      

      Sostituisci ORGANIZATION_ID con la tua organizzazione ID.

    2. Imposta l'ID progetto per il progetto a cui appartiene l'argomento Pub/Sub:

      export PUBSUB_PROJECT=PROJECT_ID
      

      Sostituisci PROJECT_ID con l'ID progetto.

    3. Imposta l'account gcloud CLI che stai utilizzando:

      export GCLOUD_ACCOUNT=EMAIL
      

      Sostituisci EMAIL con l'indirizzo email dell'account che esegue i comandi gcloud CLI.

    4. Imposta l'ID argomento o utilizza quello configurato in precedenza.

      export TOPIC_ID=TOPIC_ID
      

      Sostituisci TOPIC_ID con il nome dell'argomento.

    5. Concedi all'account gcloud CLI un ruolo Pub/Sub con l'autorizzazione pubsub.topics.setIamPolicy:

      gcloud pubsub topics add-iam-policy-binding \
        projects/$PUBSUB_PROJECT/topics/$TOPIC_ID \
        --member="user:$GCLOUD_ACCOUNT" \
        --role='roles/pubsub.admin'
      
    6. Concedi all'account gcloud CLI un ruolo che includa tutte le securitycenter.notification autorizzazioni, ad esempio roles/securitycenter.notificationConfigEditor o roles/securitycenter.admin. Puoi assegnare il ruolo a livello di progetto, cartella o organizzazione.

      Per concedere il ruolo a livello di progetto:

      gcloud projects add-iam-policy-binding PROJECT_ID \
      --member="user:$GCLOUD_ACCOUNT" \
      --role='ROLE_NAME'
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID del progetto in cui è attivato Security Command Center
      • ROLE_NAME: il ruolo da assegnare

      Per concedere il ruolo a livello di organizzazione:

      gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
        --member="user:$GCLOUD_ACCOUNT" \
        --role='ROLE_NAME'
      

      Sostituisci ROLE_NAME con il ruolo da assegnare.

A questo punto, crea un NotificationConfig.

Librerie client

Per configurare la funzionalità di notifica dell'API Security Command Center utilizzando il client librerie, devi seguire questi passaggi:

  1. Configura un account di servizio.
  2. Scarica le librerie client dell'API.
  3. Configura un ambiente di sviluppo.
  4. Configurare un argomento e una sottoscrizione Pub/Sub.

Passaggio 1: configura un account di servizio

La funzionalità di notifiche dell'API Security Command Center utilizza un account di servizio con le autorizzazioni appropriate per configurare le notifiche. Questo account servizio viene utilizzato solo per la configurazione iniziale di una configurazione e puoi riutilizzarlo per creare altre configurazioni di notifica in un secondo momento. Questo account di servizio è separato creato per te durante la configurazione di Security Command Center.

Per creare un account di servizio:

  1. Vai alla console Google Cloud.

    Vai alla console Google Cloud

  2. Seleziona il progetto per il quale hai abilitato l'API Security Command Center.

  3. Fai clic su Attiva Cloud Shell.

  4. Imposta le variabili di ambiente:

    1. Imposta il nome dell'organizzazione:

        export ORGANIZATION_ID=ORGANIZATION_ID
      

      Sostituisci ORGANIZATION_ID con la tua organizzazione ID.

    2. Imposta l'ID progetto per il progetto in cui vuoi attivare l'API di notifica:

        export PROJECT_ID=PROJECT_ID
      

      Sostituisci PROJECT_ID con l'ID progetto.

    3. Imposta l'ID personalizzato da utilizzare per il nuovo account di servizio, ad esempio scc-notifications. Il nome dell'account di servizio deve essere compreso tra 6 e 30 iniziare con una lettera e contenere caratteri alfanumerici minuscoli caratteri e trattini:

        export SERVICE_ACCOUNT=CUSTOM_ID
      

      Sostituisci CUSTOM_ID con il nome personalizzato di l'account di servizio.

    4. Imposta il percorso in cui archiviare la chiave dell'account di servizio, ad esempio export KEY_LOCATION=/home/$USER/mykeys/$SERVICE_ACCOUNT.json:

        export KEY_LOCATION=FULL_KEY_LOCATION_PATH
        # This is used by client libraries to find the key
        export GOOGLE_APPLICATION_CREDENTIALS=$KEY_LOCATION
      

      Sostituisci FULL_KEY_LOCATION_PATH con percorso completo della chiave dell'account di servizio.

  5. Crea un account di servizio associato al tuo ID progetto:

       gcloud iam service-accounts create $SERVICE_ACCOUNT  --display-name \
        "Service Account for [USER]"  --project $PROJECT_ID
    
  6. Crea una chiave da associare all'account di servizio. La chiave viene utilizzata quando crei un NotificationConfig e viene memorizzata in modo permanente nel NotificationConfig specificato nei passaggi precedenti.

       gcloud iam service-accounts keys create $KEY_LOCATION  --iam-account \
        $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
    
  7. Concedi all'account di servizio un ruolo che include tutte le securitycenter.notification autorizzazioni, come roles/securitycenter.notificationConfigEditor o roles/securitycenter.admin. Puoi concedere il ruolo a livello di progetto, cartella o organizzazione.

    Per concedere il ruolo a livello di progetto:

       gcloud projects add-iam-policy-binding $PROJECT_ID \
         --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \
         --role='ROLE_NAME'
    

    Sostituisci ROLE_NAME con il ruolo da assegnare.

    Per concedere il ruolo a livello di organizzazione:

       gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \
         --member="serviceAccount:$SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com" \
         --role='ROLE_NAME'
    

    Sostituisci ROLE_NAME con il ruolo da assegnare.

L'account di servizio è ora configurato per l'utilizzo con le notifiche e il servizio la chiave dell'account è archiviata nel KEY_LOCATION specificato. Per scoprire di più sugli account di servizio, vedi creazione e gestione delle chiavi degli account di servizio.

Passaggio 2: configurazione di un ambiente di sviluppo

Per utilizzare la funzionalità di notifica dell'API Security Command Center, puoi utilizzare gcloud CLI o scaricare le librerie client e configurare un per il linguaggio che preferisci.

Python

  1. Facoltativo: prima di installare la libreria Python, ti consigliamo di utilizzare Virtualenv per creare un ambiente Python isolato.

     virtualenv YOUR_ENV
     source YOUR_ENV/bin/activate
    

    Sostituisci YOUR_ENV con il nome del tuo ambiente virtuale.

  2. Installa pip in per gestire l'installazione della libreria Python.

  3. Esegui questi comandi per installare la libreria Python:

     pip install google-cloud-securitycenter
    

Java

Per includere la libreria Java di Security Command Center come dipendenza nel tuo seleziona un artefatto dal repository Maven. Le notifiche sono incluse nella versione della libreria 0.119.0 e successive.

Se utilizzi Intellij, imposta la variabile di ambiente GOOGLE_APPLICATION_CREDENTIALS sul percorso assoluto della chiave dell'account del servizio di notifiche che hai scaricato nei passaggi precedenti:

  1. In Intellij, fai clic su Esegui > Modifica configurazioni.
  2. Imposta la seguente variabile in Application > Run_Configuration_For_Sample > Environment Variables:

      GOOGLE_APPLICATION_CREDENTIALS=ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY
    

    Sostituisci ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY con il percorso completo della chiave dell'account di servizio.

Vai

Per installare le dipendenze Go dell'API di notifica, scarica la libreria Go:

  go get cloud.google.com/go/securitycenter/apiv1

Node.js

Nella cartella del progetto, usa npm per installare l'API di notifica necessaria dependencies:

  npm install --save @google-cloud/security-center/

Passaggio 3: configura Pub/Sub

Per inviare notifiche a Pub/Sub, sottoscrivi un Pub/Sub e concedere all'account di servizio delle notifiche un Ruolo IAM che include pubsub.topics.setIamPolicy autorizzazione:

  1. Crea un nuovo argomento Pub/Sub o utilizzane uno esistente:

       gcloud pubsub topics create TOPIC_ID
    

    Sostituisci TOPIC_ID con l'ID argomento.

  2. Imposta le variabili di ambiente:

    1. Imposta l'ID argomento:

        export TOPIC_ID=TOPIC_ID
      
    2. Imposta l'ID progetto per il progetto in cui hai attivato l'API di notifica:

        export CONSUMER_PROJECT=PROJECT_ID
      

      Sostituisci PROJECT_ID con l'ID progetto.

    3. Imposta l'indirizzo email dell'account di servizio creato nei passaggi precedenti:

        export SERVICE_ACCOUNT_EMAIL=SERVICE_ACCOUNT_NAME@$CONSUMER_PROJECT.iam.gserviceaccount.com
      

      Sostituisci SERVICE_ACCOUNT_NAME con il nome dell'account di servizio.

  3. Crea una sottoscrizione per l'argomento:

       gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Sostituisci SUBSCRIPTION_ID con l'ID abbonamento.

  4. Concedi all'account di servizio delle notifiche un ruolo con il Autorizzazione pubsub.topics.setIamPolicy:

    gcloud pubsub topics add-iam-policy-binding \
         projects/$CONSUMER_PROJECT/topics/$TOPIC_ID \
      --member="serviceAccount:$SERVICE_ACCOUNT_EMAIL" \
      --role='roles/pubsub.admin'
    

Per scoprire di più sulla configurazione di Pub/Sub, consulta Gestire argomenti e iscrizioni. Nella passaggio successivo, completi la configurazione creando un NotificationConfig.

Creazione di un oggetto NotificationConfig

Prima di creare un NotificationConfig, tieni presente che ogni organizzazione può avere un numero limitato di NotificationConfig file. Per ulteriori informazioni, consulta Quote e limiti.

NotificationConfig include un campo filter che limita le notifiche a eventi utili. Questo campo accetta tutti i filtri disponibili nel metodo findings.list dell'API Security Command Center.

Quando crei un NotificationConfig, devi specificare un genitore NotificationConfig dalla gerarchia delle risorse Google Cloud, un'organizzazione, una cartella o un progetto. Se devi recuperare, aggiornare o eliminare NotificationConfig in seguito, devi includere l'ID numerico del dell'organizzazione, della cartella o del progetto principale quando vi fai riferimento.

Per creare NotificationConfig usando la lingua o la piattaforma del tuo scelta:

gcloud

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

Sostituisci quanto segue:

  • NOTIFICATION_NAME: il nome della notifica. Deve avere una lunghezza compresa tra 1 e 128 caratteri e contenere caratteri alfanumerici, con trattini bassi o trattini bassi.
  • PARENT: l'ambito nella gerarchia delle risorse a cui si applica la notifica, organization, folder o project.
  • PARENT_ID: l'ID dell'organizzazione, della cartella o dell'organizzazione principale specificato nel formato organizations/123, folders/456 o projects/789.
  • LOCATION: se la residenza dei dati è abilitata, specifica la località di Security Command Center in cui creare la notifica. L'elemento notificationConfig risultante è archiviata solo in questa località. Solo i risultati emessi in questo percorso viene inviato a Pub/Sub.

Se la residenza dei dati non è abilitata, specificando il flag --location viene creato la notifica utilizzando l'API Security Command Center v2 e l'unico metodo il valore del flag è global. * NOTIFICATION_DESCRIPTION: una descrizione della notifica di massimo 1024 caratteri. * PUBSUB_TOPIC: l'argomento Pub/Sub che verrà ricevere notifiche. Il suo formato è projects/PROJECT_ID/topics/TOPIC. * FILTER: l'espressione che definisci per selezionare i risultati da inviare a Pub/Sub. Ad esempio, state=\"ACTIVE\".

Python

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione 2, sostituisci v1 con v2 e aggiungi /locations/LOCATION al nome della risorsa.

Per la maggior parte delle risorse, aggiungi /locations/LOCATION al del nome della risorsa dopo /PARENT/PARENT_ID, dove PARENT è organizations, folders, o projects.

Per i risultati, aggiungi /locations/LOCATION alla risorsa nome dopo /sources/SOURCE_ID, dove SOURCE_ID è l'ID del Servizio Security Command Center che ha restituito il risultato.

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

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione 2, sostituisci v1 con v2 e aggiungi /locations/LOCATION al nome della risorsa.

Per la maggior parte delle risorse, aggiungi /locations/LOCATION al del nome della risorsa dopo /PARENT/PARENT_ID, dove PARENT è organizations, folders, o projects.

Per i risultati, aggiungi /locations/LOCATION al nome della risorsa dopo /sources/SOURCE_ID, dove SOURCE_ID è l'ID del servizio Security Command Center che ha emesso il risultato.


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

Vai

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione 2, sostituisci v1 con v2 e aggiungi /locations/LOCATION al nome della risorsa.

Per la maggior parte delle risorse, aggiungi /locations/LOCATION al nome della risorsa dopo /PARENT/PARENT_ID, dove PARENT è organizations, folders o projects.

Per i risultati, aggiungi /locations/LOCATION alla risorsa nome dopo /sources/SOURCE_ID, dove SOURCE_ID è l'ID del Servizio Security Command Center che ha restituito il risultato.

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

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione 2, sostituisci v1 con v2 e aggiungi /locations/LOCATION al nome della risorsa.

Per la maggior parte delle risorse, aggiungi /locations/LOCATION al del nome della risorsa dopo /PARENT/PARENT_ID, dove PARENT è organizations, folders, o projects.

Per i risultati, aggiungi /locations/LOCATION al nome della risorsa dopo /sources/SOURCE_ID, dove SOURCE_ID è l'ID del servizio Security Command Center che ha emesso il risultato.

// 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

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione 2, sostituisci v1 con v2 e aggiungi /locations/LOCATION al nome della risorsa.

Per la maggior parte delle risorse, aggiungi /locations/LOCATION al del nome della risorsa dopo /PARENT/PARENT_ID, dove PARENT è organizations, folders, o projects.

Per i risultati, aggiungi /locations/LOCATION alla risorsa nome dopo /sources/SOURCE_ID, dove SOURCE_ID è l'ID del Servizio Security Command Center che ha restituito il risultato.

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

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione 2, sostituisci v1 con v2 e aggiungi /locations/LOCATION al nome della risorsa.

Per la maggior parte delle risorse, aggiungi /locations/LOCATION al nome della risorsa dopo /PARENT/PARENT_ID, dove PARENT è organizations, folders o projects.

Per i risultati, aggiungi /locations/LOCATION alla risorsa nome dopo /sources/SOURCE_ID, dove SOURCE_ID è l'ID del Servizio Security Command Center che ha restituito il risultato.

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#

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione 2, sostituisci v1 con v2 e aggiungi /locations/LOCATION al nome della risorsa.

Per la maggior parte delle risorse, aggiungi /locations/LOCATION al nome della risorsa dopo /PARENT/PARENT_ID, dove PARENT è organizations, folders o projects.

Per i risultati, aggiungi /locations/LOCATION al nome della risorsa dopo /sources/SOURCE_ID, dove SOURCE_ID è l'ID del servizio Security Command Center che ha emesso il risultato.


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

Le notifiche sono ora pubblicate nell'argomento Pub/Sub che specificato.

Per pubblicare le notifiche, viene creato un account di servizio sotto forma di service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com. Questo account di servizio viene creato quando crei il tuo primo NotificationConfig e al quale viene concesso automaticamente il ruolo securitycenter.notificationServiceAgent nel criterio IAM per PUBSUB_TOPIC durante la creazione della configurazione di notifica. Questo Per il funzionamento delle notifiche è necessario il ruolo dell'account di servizio.

Concessione dell'accesso al perimetro nei Controlli di servizio VPC

Se utilizzi Controlli di servizio VPC e il tuo argomento Pub/Sub fa parte di un progetto all'interno di un perimetro di servizio, devi concedere l'accesso ai progetti per creare notifiche.

Per concedere l'accesso ai progetti, crea regole in entrata e in uscita per le entità e progetti usati per creare notifiche. Le regole consentono di accedere alle risorse protette e consentono a Pub/Sub di verificare che gli utenti dispongano dell'autorizzazione setIamPolicy per l'argomento Pub/Sub.

Prima di creare un oggetto NotificationConfig

Prima di completare i passaggi in Creazione di un NotificationConfig, segui questi passaggi:

  1. Vai alla pagina Controlli di servizio VPC nella console Google Cloud.

    Vai a Controlli di servizio VPC

  2. Se necessario, seleziona la tua organizzazione.

  3. Fai clic sul nome del perimetro del servizio da modificare.

    Per trovare il perimetro del servizio da modificare, puoi controllare i log per verificare se sono presenti voci che mostrano violazioni RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. Nella queste voci, controlla il campo servicePerimeterName: accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME.

  4. Fai clic su Modifica perimetro.

  5. Nel menu di navigazione, fai clic su Criterio in entrata.

  6. Per configurare le regole di ingresso per gli utenti o gli account servizio, utilizza i seguenti parametri:

    • Attributi FROM del client API:
      • Nel menu a discesa Origine, seleziona Tutte le origini.
      • Nel menu a discesa Identità, scegli Identità selezionate.
      • Fai clic su Seleziona e inserisci l'entità utilizzato per chiamare l'API Security Command Center.
    • Attributi TO di servizi/risorse Google Cloud:
      • Nel menu a discesa Progetto, scegli Progetti selezionati.
      • Fai clic su Seleziona e poi inserisci il progetto che contiene l'argomento Pub/Sub.
      • Nel menu a discesa Servizi, scegli Servizi selezionati e poi API Cloud Pub/Sub.
      • Nel menu a discesa Metodi, scegli Tutte le azioni.
  7. Fai clic su Salva.

  8. Nel menu di navigazione, fai clic su Criterio in uscita.

  9. Fai clic su Aggiungi regola.

  10. Per configurare le regole in uscita per gli utenti inserisci i parametri seguenti:

    • Attributi FROM del client API:
      • Nel menu a discesa Identità, scegli Selezionate. identità.
      • Fai clic su Seleziona, quindi inserisci il principale utilizzato per chiamare l'API Security Command Center.
    • Attributi TO di servizi/risorse Google Cloud:
      • Nel menu a discesa Progetto, scegli Tutti i progetti.
      • Nel menu a discesa Servizi, scegli Servizi selezionati, quindi seleziona API Cloud Pub/Sub.
      • Nel menu a discesa Metodi, scegli Tutte le azioni.
  11. Fai clic su Salva.

Crea una regola di ingresso per NotificationConfig

Per creare una regola in entrata per un NotificationConfig:

  1. Completa le istruzioni riportate in Creare un oggetto NotificationConfig.
  2. Riapri il perimetro di servizio dalla sezione precedente.
  3. Fai clic su Criterio in entrata.
  4. Fai clic su Aggiungi regola.
  5. Per configurare la regola di ingresso per l'account di servizio NotificationConfig che hai creato, inserisci i seguenti parametri:
    • Attributi FROM del client API:
      • Nel menu a discesa Origine, seleziona Tutte le origini.
      • Nel menu a discesa Identità, scegli Identità selezionate.
      • Fai clic su Seleziona e inserisci il nome del NotificationConfig account di servizio: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • Attributi TO di servizi/risorse Google Cloud:
      • Nel menu a discesa Progetto, scegli Progetti selezionati.
      • Fai clic su Seleziona e poi seleziona il progetto che contiene l'argomento Pub/Sub.
      • Nel menu a discesa Servizi, scegli Servizi selezionati e poi seleziona API Cloud Pub/Sub.
      • Nel menu a discesa Metodi, scegli Tutte le azioni.
  6. Nel menu di navigazione, fai clic su Salva.

I progetti, gli utenti e gli account di servizio selezionati possono ora accedere all'infrastruttura risorse e creare notifiche.

Se hai seguito tutti i passaggi di questa guida e le notifiche funzionano correttamente, ora puoi eliminare quanto segue:

  • La regola in entrata per l'entità
  • La regola in uscita per l'entità

Queste regole erano necessarie solo per configurare NotificationConfig. Tuttavia, per delle notifiche per continuare a funzionare, devi mantenere la regola in entrata per NotificationConfig, che consente di pubblicare notifiche sui tuoi Pub/Sub dietro il perimetro di servizio.

Passaggi successivi