Abilita le notifiche sui risultati per Pub/Sub

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

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

Puoi connettere le notifiche di Security Command Center in Pub/Sub direttamente alle azioni di Cloud Functions. Per esempio di funzioni che possono essere utili per la risposta, l'arricchimento e la correzione, consulta il repository open source di Security Command Center di codice Cloud Functions. Il repository contiene soluzioni per aiutarti a eseguire azioni automatizzate sui risultati relativi alla sicurezza.

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 dei seguenti ruoli IAM (Identity and Access Management):

  • Amministratore Security Center (roles/securitycenter.Admin): per abilitare 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 all'account gcloud CLI a livello di organizzazione, cartella o progetto, uno dei seguenti ruoli:
    • Organization Administrator (roles/resourcemanager.organizationAdmin) (Amministratore organizzazione)
    • 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, cartella o progetto. La possibilità di visualizzare, modificare, creare o aggiornare risultati, asset e origini di sicurezza dipende dal livello per cui ti viene concesso l'accesso. Per saperne di più sui ruoli di Security Command Center, consulta Controllo dell'accesso.

Configurazione delle notifiche dell'API Security Command Center

Per configurare le notifiche, devi prima abilitare 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 te per cui vuoi abilitare l'API Notifications.

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

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

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

Localizzazione dei dati e notifiche

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

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

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

Le esportazioni continue vengono archiviate solo nella località in cui sono state create e non possono essere visualizzate o modificate in altre località.

Dopo aver creato un'esportazione continua, non puoi modificarne la località. Per cambiare la località, devi eliminare l'esportazione continua e ricrearla nella nuova posizione.

Per recuperare un'esportazione continua utilizzando le chiamate API, devi specificare la località nel nome completo della risorsa di 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 gcloud CLI, devi specificare la località nel nome completo della risorsa della configurazione o utilizzando il flag --locations. Ad esempio:

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

configura un argomento Pub/Sub

In questo passaggio, creerai e ti abboni all'argomento Pub/Sub a cui vuoi inviare notifiche. Se non hai bisogno di chiamare l'API in modo programmatico, si consigliano i comandi dell'interfaccia a riga di comando.

gcloud

Per configurare la funzionalità di notifica dell'API Security Command Center mediante gcloud CLI, esegui questi 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 sottoscrivere un argomento Pub/Sub:

  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. Per creare un nuovo argomento Pub/Sub o utilizzarne uno esistente, esegui questo comando:

      gcloud pubsub topics create TOPIC_ID
    

    Sostituisci TOPIC_ID con il nome dell'argomento.

  5. Imposta variabile di ambiente ID argomento:

      export TOPIC_ID=TOPIC_ID
    
  6. Crea una sottoscrizione all'argomento:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Sostituisci SUBSCRIPTION_ID con il nome della tua sottoscrizione.

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

Successivamente, configura le autorizzazioni per il tuo account.

Passaggio 2: configura le autorizzazioni dell'account gcloud CLI

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

  • Amministratore Centro sicurezza (roles/securitycenter.admin) o Editor configurazioni di notifiche del Centro sicurezza (roles/securitycenter.notificationConfigEditor). Questo ruolo deve essere concesso allo stesso livello (organizzazione, cartella o progetto) al quale stai creando l'NotificationConfig.
  • Amministratore Pub/Sub (roles/pubsub.admin) nell'argomento Pub/Sub che riceve le notifiche

a livello di organizzazione, cartella o progetto

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 l'ID organizzazione.

    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 dell'interfaccia a riga di comando gcloud CLI.

    4. Imposta l'ID argomento o utilizza l'argomento 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 include tutte le autorizzazioni securitycenter.notification, 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="user:$GCLOUD_ACCOUNT" \
      --role='ROLE_NAME'
      

      Sostituisci quanto segue:

      • PROJECT_ID: l'ID del progetto in cui è abilitato 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.

Quindi, crei un oggetto NotificationConfig.

Librerie client

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

  1. Configurare un account di servizio.
  2. Scaricare le librerie client delle API.
  3. Configurare un ambiente di sviluppo.
  4. Configurare un argomento e una sottoscrizione Pub/Sub.

Passaggio 1: configura un account di servizio

La funzionalità di notifica dell'API Security Command Center utilizza un account di servizio con le autorizzazioni appropriate per configurare le notifiche. Questo account di 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 dall'account di servizio creato per te durante la configurazione di Security Command Center.

Per creare un account di servizio, segui questi passaggi:

  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 della tua organizzazione:

        export ORGANIZATION_ID=ORGANIZATION_ID
      

      Sostituisci ORGANIZATION_ID con l'ID organizzazione.

    2. Imposta l'ID progetto per il progetto in cui vuoi abilitare l'API Notifications:

        export PROJECT_ID=PROJECT_ID
      

      Sostituisci PROJECT_ID con l'ID progetto.

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

        export SERVICE_ACCOUNT=CUSTOM_ID
      

      Sostituisci CUSTOM_ID con il nome personalizzato dell'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 il 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 archiviata in modo permanente nel KEY_LOCATION 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 autorizzazioni securitycenter.notification, 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 la chiave dell'account di servizio è archiviata nel KEY_LOCATION specificato. Per scoprire di più sugli account di servizio, consulta Creazione e gestione delle chiavi degli account di servizio.

Passaggio 2: configura 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 ambiente di sviluppo per la lingua 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 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 progetto, 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 di servizio notifiche che hai scaricato nei passaggi precedenti:

  1. In Intellij, fai clic su Esegui > Modifica configurazioni.
  2. Imposta la seguente variabile in Applicazione > Run_Configuration_For_Sample > Variabili di ambiente:

      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.

Go

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

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

Node.js

Nella cartella del progetto, utilizza npm per installare le dipendenze dell'API Notifications necessarie:

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

Passaggio 3: configura Pub/Sub

Per inviare notifiche a Pub/Sub, devi sottoscrivere un argomento Pub/Sub e concedere all'account di servizio notifiche un ruolo IAM che include l'autorizzazione pubsub.topics.setIamPolicy:

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

       gcloud pubsub topics create TOPIC_ID
    

    Sostituisci TOPIC_ID con l'ID dell'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 abilitato l'API Notifications:

        export CONSUMER_PROJECT=PROJECT_ID
      

      Sostituisci PROJECT_ID con l'ID progetto.

    3. Imposta l'indirizzo email dell'account di servizio che hai 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 all'argomento:

       gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Sostituisci SUBSCRIPTION_ID con l'ID abbonamento.

  4. Concedi all'account di servizio notifiche un ruolo con l'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 saperne di più sulla configurazione di Pub/Sub, consulta Gestione di argomenti e abbonamenti. Nel passaggio successivo, potrai completare la configurazione creando un NotificationConfig.

Creazione di un NotificationConfig

Prima di creare un NotificationConfig, tieni presente che ogni organizzazione può avere un numero limitato di file NotificationConfig. 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 elemento NotificationConfig, specifichi un elemento padre per l'elemento NotificationConfig dalla gerarchia delle risorse di Google Cloud: un'organizzazione, una cartella o un progetto. Se devi recuperare, aggiornare o eliminare NotificationConfig in un secondo momento, devi includere l'ID numerico dell'organizzazione, della cartella o del progetto principale quando lo fai riferimento.

Per creare NotificationConfig utilizzando la lingua o la piattaforma che preferisci:

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 solo caratteri alfanumerici, trattini bassi o trattini.
  • PARENT: l'ambito della gerarchia delle risorse a cui si applica la notifica, organization, folder o project.
  • PARENT_ID: l'ID dell'organizzazione, della cartella o del progetto 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. La risorsa notificationConfig risultante viene archiviata solo in questa località. Solo i risultati emessi in questa posizione vengono inviati a Pub/Sub.

    Se la residenza dei dati non è abilitata, se specifichi il flag --location viene creata la notifica utilizzando l'API Security Command Center v2. L'unico valore valido per il flag è global.

  • NOTIFICATION_DESCRIPTION: una descrizione della notifica che non superi i 1024 caratteri.

  • PUBSUB_TOPIC: l'argomento Pub/Sub che riceverà le notifiche. Il suo formato è projects/PROJECT_ID/topics/TOPIC.

  • FILTER: l'espressione definita per selezionare i risultati che vengono inviati a Pub/Sub. Ad esempio, state="ACTIVE".

Python

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione v2, 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 inviato 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 v2, 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 inviato 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;
    }
  }
}

Go

L'esempio seguente utilizza l'API v1. Per modificare l'esempio per la versione v2, 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 inviato 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 v2, 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 inviato 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 v2, 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 inviato 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 v2, 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 inviato 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 v2, 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 inviato 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;
    }
}

Ora le notifiche sono pubblicate nell'argomento Pub/Sub specificato.

Per pubblicare le notifiche, viene creato per te 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 ti viene concesso automaticamente il ruolo securitycenter.notificationServiceAgent nel criterio IAM per PUBSUB_TOPIC durante la creazione della configurazione delle notifiche. Questo ruolo dell'account di servizio è necessario per il funzionamento delle notifiche.

Concessione dell'accesso al perimetro nei Controlli di servizio VPC

Se utilizzi Controlli di servizio VPC e l'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 i progetti utilizzati per creare notifiche. Le regole consentono di accedere alle risorse protette e permettono a Pub/Sub di verificare che gli utenti dispongano dell'autorizzazione setIamPolicy per l'argomento Pub/Sub.

Prima di creare un NotificationConfig

Prima di completare i passaggi per la creazione di un NotificationConfig, procedi nel seguente modo:

  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 di servizio che vuoi modificare.

    Per trovare il perimetro di servizio da modificare, puoi verificare se nei log sono presenti voci che mostrano violazioni di RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. In 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 in entrata per gli utenti o gli account di 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à utilizzata per chiamare l'API Security Command Center.
    • Attributi TO di servizi e risorse Google Cloud:
      • Nel menu a discesa Progetto, scegli Progetti selezionati.
      • Fai clic su Seleziona e inserisci il progetto che contiene l'argomento Pub/Sub.
      • Nel menu a discesa Servizi, scegli Servizi selezionati, quindi seleziona 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 account utente o di servizio, inserisci i seguenti parametri:

    • Attributi FROM del client API:
      • Nel menu a discesa Identità, scegli Identità selezionate.
      • Fai clic su Seleziona e inserisci l'entità utilizzata per chiamare l'API Security Command Center.
    • Attributi TO di servizi e 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 in entrata per NotificationConfig

Per creare una regola in entrata per un oggetto NotificationConfig:

  1. Completa le istruzioni riportate in Creazione di un NotificationConfig.
  2. Riapri il perimetro di servizio della sezione precedente.
  3. Fai clic su Criterio in entrata.
  4. Fai clic su Aggiungi regola.
  5. Per configurare la regola in entrata 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 dell'account di servizio NotificationConfig: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • Attributi TO di servizi/risorse di Google Cloud:
      • Nel menu a discesa Progetto, scegli Progetti selezionati.
      • Fai clic su Seleziona e scegli il progetto che contiene l'argomento Pub/Sub.
      • Nel menu a discesa Servizi, scegli Servizi selezionati, quindi 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 alle risorse protette 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, affinché le notifiche continuino a funzionare, devi mantenere la regola in entrata per NotificationConfig, che le consente di pubblicare le notifiche nell'argomento Pub/Sub dietro il perimetro di servizio.

Passaggi successivi