Habilita las notificaciones de resultados para Pub/Sub

En esta página, se explica cómo habilitar las notificaciones de la API de Security Command Center.

Las notificaciones envían resultados y actualizaciones de resultados a un tema de Pub/Sub en cuestión de minutos. Las notificaciones de la API de Security Command Center incluyen toda la información del resultado que muestra Security Command Center en la consola de Google Cloud.

Puedes conectar las notificaciones de Security Command Center en Pub/Sub directamente a las acciones de Cloud Functions. Para ver ejemplos de funciones que pueden ayudar con la respuesta, el enriquecimiento y la solución, consulta el repositorio de código abierto de Security Command Center del código de Cloud Functions. El repositorio contiene soluciones que te ayudan a realizar acciones automatizadas con respecto a los resultados de seguridad.

Como alternativa, puedes exportar los resultados a BigQuery o puedes configurar exportaciones continuas para Pub/Sub en la consola de Google Cloud.

Antes de comenzar

Para configurar las notificaciones, debes tener las siguientes funciones de Identity and Access Management (IAM):

  • Security Center Admin (roles/securitycenter.Admin): para habilitar las notificaciones de la API de Security Command Center
  • Visualizador administrador del centro de seguridad (roles/securitycenter.adminViewer): Para acceder a Security Command Center en la consola de Google Cloud
  • Para otorgar roles a la cuenta de servicio de notificaciones o a la cuenta de gcloud CLI a nivel de organización, carpeta o proyecto, usa uno de los siguientes roles:
    • Administrador de la organización (roles/resourcemanager.organizationAdmin)
    • Administrador de IAM de carpeta (roles/resourcemanager.folderIamAdmin)
    • Administrador de IAM de proyecto (roles/resourcemanager.projectIamAdmin)

Las funciones de IAM para Security Command Center se pueden otorgar a nivel de organización, carpeta o proyecto. Tu capacidad de ver, editar, crear o actualizar los resultados, los elementos y las fuentes de seguridad depende del nivel para el que se te otorgue acceso. Para obtener más información sobre las funciones de Security Command Center, consulta Control de acceso.

Configura las notificaciones de la API de Security Command Center

Para configurar las notificaciones, primero habilita la API de Security Command Center.

Habilita la API de Security Command Center

Para habilitar la API de Security Command Center, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Biblioteca de API.

    Ir a la Biblioteca de APIs

  2. Selecciona el proyecto en el que quieres habilitar la API de notificaciones.

  3. En el cuadro Buscar, ingresa Security Command Center y, luego, haz clic en Security Command Center en los resultados de la búsqueda.

  4. En la página de la API que aparece, haz clic en Habilitar.

La API de Security Command Center ahora está habilitada para tu proyecto. A continuación, usa la CLI de gcloud o las bibliotecas cliente para suscribirte a un tema de Pub/Sub y configurar los permisos.

Residencia de datos y notificaciones

Si la residencia de datos está habilitada para Security Command Center, la configuración que define las exportaciones continuas a Pub/Sub (recursos notificationConfig) está sujeta al control de residencia de datos y se almacena en tu ubicación de Security Command Center.

Para exportar los resultados de una ubicación de Security Command Center a Pub/Sub, debes configurar la exportación continua en la misma ubicación de Security Command Center que los resultados.

Debido a que los filtros que se usan en las exportaciones continuas pueden contener datos sujetos a controles de residencia, asegúrate de especificar la ubicación correcta antes de crearlos. Security Command Center no restringe la ubicación en la que creas las exportaciones.

Las exportaciones continuas se almacenan solo en la ubicación en la que se crearon y no se pueden ver ni editar en otras ubicaciones.

Después de crear una exportación continua, no puedes cambiar su ubicación. Para cambiar la ubicación, debes borrar la exportación continua y volver a crearla en la ubicación nueva.

Para recuperar una exportación continua mediante llamadas a la API, debes especificar la ubicación en el nombre completo del recurso de notificationConfig. Por ejemplo:

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

Del mismo modo, para recuperar una exportación continua con gcloud CLId, debes especificar la ubicación, ya sea en el nombre completo del recurso de la configuración o con la marca --locations. Por ejemplo:

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

Configura un tema de Pub/Sub

En este paso, crearás y te suscribirás al tema de Pub/Sub al que desea enviar notificaciones. Si no necesitas llamar a la API de manera programática, se recomiendan los comandos de la CLI de gcloud.

gcloud

Para configurar la función de notificaciones de la API de Security Command Center con la CLI de gcloud, sigue estos pasos:

  1. Configura una suscripción y un tema de Pub/Sub
  2. Configura los permisos de la cuenta de la CLI de gcloud.

Paso 1: Configura Pub/Sub

Para configurar un tema de Pub/Sub y suscribirte a él, haz lo siguiente:

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell) .

  4. Para crear un tema nuevo de Pub/Sub o usar un tema existente, ejecuta el siguiente comando:

      gcloud pubsub topics create TOPIC_ID
    

    Reemplaza TOPIC_ID por el nombre del tema.

  5. Establece la variable de entorno del ID del tema:

      export TOPIC_ID=TOPIC_ID
    
  6. Crea una suscripción al tema:

      gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Reemplaza SUBSCRIPTION_ID por el nombre de tu suscripción.

Para obtener más información sobre cómo configurar Pub/Sub, consulta Administra temas y suscripciones.

A continuación, configura los permisos para tu cuenta.

Paso 2: Configura los permisos de la cuenta de la CLI de gcloud

Para crear un NotificationConfig, debes otorgar los siguientes roles a tu cuenta de gcloud CLI:

  • Administrador del centro de seguridad (roles/securitycenter.admin) o el editor de configuraciones de notificaciones del centro de seguridad (roles/securitycenter.notificationConfigEditor). Esta función se debe otorgar en el mismo nivel (organización, carpeta o proyecto) en el que creas la NotificationConfig.
  • Pub/Sub Admin (roles/pubsub.admin) en el tema de Pub/Sub que recibe notificaciones

a nivel de la organización, la carpeta o el proyecto

Para otorgar esos permisos, haz lo siguiente:

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell).

    1. Establece el nombre de la organización:

      export ORGANIZATION_ID=ORGANIZATION_ID
      

      Reemplaza ORGANIZATION_ID por el ID de la organización.

    2. Configura el ID del proyecto del proyecto al que pertenece el tema de Pub/Sub:

      export PUBSUB_PROJECT=PROJECT_ID
      

      Reemplaza PROJECT_ID con el ID del proyecto.

    3. Configura la cuenta de CLI de gcloud que usas:

      export GCLOUD_ACCOUNT=EMAIL
      

      Reemplaza EMAIL por la dirección de correo electrónico de la cuenta que ejecuta los comandosgcloud CLId.

    4. Configura el ID del tema o usa el tema que configuraste antes.

      export TOPIC_ID=TOPIC_ID
      

      Reemplaza TOPIC_ID por el nombre del tema.

    5. Otorga a la cuenta de la CLI de gcloud un rol de Pub/Sub con el permiso 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. Otorga a la cuenta de gcloud CLI un rol que incluya todos los permisos securitycenter.notification, como roles/securitycenter.notificationConfigEditor o roles/securitycenter.admin. Puedes otorgar el rol a nivel de proyecto, organización o carpeta.

      Para otorgar la función a nivel de proyecto, sigue estos pasos:

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

      Reemplaza lo siguiente:

      • PROJECT_ID: El ID del proyecto en el que está habilitado Security Command Center
      • ROLE_NAME: Es la función que se asignará.

      Para otorgar la función a nivel de la organización, sigue estos pasos:

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

      Reemplaza ROLE_NAME por el rol que se asignará.

A continuación, crea una NotificationConfig.

Bibliotecas cliente

Para configurar la función de notificaciones de la API de Security Command Center con las bibliotecas cliente, sigue estos pasos:

  1. Configura una cuenta de servicio
  2. Descarga las bibliotecas cliente de la API.
  3. Configura un entorno de desarrollo.
  4. Configura una suscripción y un tema de Pub/Sub

Paso 1: Configura una cuenta de servicio

La función de notificaciones de la API de Security Command Center usa una cuenta de servicio con los permisos adecuados para configurar las notificaciones. Esta cuenta de servicio solo se usa para la configuración inicial de una configuración; puedes usarla a fin de crear más archivos de configuración de notificaciones más adelante. Esta cuenta de servicio es independiente de la que se creó para configurar Security Command Center.

Para crear una cuenta de servicio, haz lo siguiente:

  1. Ve a la consola de Google Cloud.

    Ve a la consola de Google Cloud.

  2. Selecciona el proyecto para el que habilitaste la API de Security Command Center.

  3. Haz clic en Activate Cloud Shell (Activar Cloud Shell).

  4. Establece las variables de entorno:

    1. Establece el nombre de la organización:

        export ORGANIZATION_ID=ORGANIZATION_ID
      

      Reemplaza ORGANIZATION_ID por el ID de la organización.

    2. Establece el ID del proyecto en el que deseas habilitar la API de notificaciones:

        export PROJECT_ID=PROJECT_ID
      

      Reemplaza PROJECT_ID con el ID del proyecto.

    3. Configura el ID personalizado que deseas usar para la cuenta de servicio nueva, como scc-notifications. El nombre de la cuenta de servicio debe tener entre 6 y 30 caracteres, debe comenzar con una letra y contener todos los caracteres alfanuméricos en minúscula y guiones:

        export SERVICE_ACCOUNT=CUSTOM_ID
      

      Reemplaza CUSTOM_ID por el nombre personalizado de la cuenta de servicio.

    4. Configura la ruta en la que se debe almacenar la clave de la cuenta de servicio, como 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
      

      Reemplaza FULL_KEY_LOCATION_PATH por la ruta de acceso completa a la clave de tu cuenta de servicio.

  5. Crea una cuenta de servicio asociada a tu ID del proyecto:

       gcloud iam service-accounts create $SERVICE_ACCOUNT  --display-name \
        "Service Account for [USER]"  --project $PROJECT_ID
    
  6. Crea una clave para asociar a la cuenta de servicio. La clave se usa cuando creas un NotificationConfig y se almacena de forma persistente en el KEY_LOCATION que especificaste en los pasos anteriores.

       gcloud iam service-accounts keys create $KEY_LOCATION  --iam-account \
        $SERVICE_ACCOUNT@$PROJECT_ID.iam.gserviceaccount.com
    
  7. Otorga a la cuenta de servicio un rol que incluya todos los permisos securitycenter.notification, como roles/securitycenter.notificationConfigEditor o roles/securitycenter.admin. Puedes otorgar el rol a nivel del proyecto, la carpeta o la organización.

    Para otorgar la función a nivel de proyecto, sigue estos pasos:

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

    Reemplaza ROLE_NAME por el rol que se asignará.

    Para otorgar la función a nivel de la organización, sigue estos pasos:

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

    Reemplaza ROLE_NAME por el rol que se asignará.

La cuenta de servicio ahora está configurada para usarse con notificaciones, y la clave de la cuenta de servicio se almacena en el KEY_LOCATION que especificaste. Para obtener más información sobre las cuentas de servicio, consulta Crea y administra claves de cuentas de servicio.

Paso 2: Configura un entorno de desarrollo

Para usar la característica de notificaciones de la API de Security Command Center, puedes usar la CLI de gcloud o descargar las bibliotecas cliente y configurar tu entorno de desarrollo para el lenguaje que elijas.

Python

  1. Opcional: Antes de instalar la biblioteca de Python, te recomendamos usar Virtualenv para crear un entorno aislado de Python.

     virtualenv YOUR_ENV
     source YOUR_ENV/bin/activate
    

    Reemplaza YOUR_ENV por el nombre del entorno virtual.

  2. Instala pip para administrar la instalación de la biblioteca de Python.

  3. Ejecuta los siguientes comandos para instalar la biblioteca de Python:

     pip install google-cloud-securitycenter
    

Java

Para incluir la biblioteca de Java de Security Command Center como una dependencia en tu proyecto, selecciona un artefacto del repositorio de Maven. Se incluyen las notificaciones en la versión de la biblioteca 0.119.0 y versiones posteriores.

Si usas IntelliJ, configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS como la ruta absoluta de la clave de la cuenta de servicio de notificaciones que descargaste en los pasos anteriores:

  1. En IntelliJ, haz clic en Run (Ejecutar) > Edit Configurations (Editar configuraciones).
  2. Configura la siguiente variable en Aplicación > Run_Configuration_For_Sample > Variables de entorno:

      GOOGLE_APPLICATION_CREDENTIALS=ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY
    

    Reemplaza ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY por la ruta de acceso completa a la clave de tu cuenta de servicio.

Go

Para instalar las dependencias de Go de la API de notificaciones, descarga la biblioteca de Go:

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

Node.js

En la carpeta del proyecto, usa npm para instalar las dependencias necesarias de la API de notificaciones:

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

Paso 3: Configura Pub/Sub

Para entregar notificaciones a Pub/Sub, debes suscribirte a un tema de Pub/Sub y otorgar a la cuenta de servicio de notificaciones una función de IAM que incluya el permiso pubsub.topics.setIamPolicy:

  1. Crea un tema nuevo de Pub/Sub o usa uno existente:

       gcloud pubsub topics create TOPIC_ID
    

    Reemplaza TOPIC_ID por el ID del tema.

  2. Establece las variables de entorno:

    1. Configura el ID del tema:

        export TOPIC_ID=TOPIC_ID
      
    2. Configura el ID del proyecto para el proyecto en el que habilitaste la API de notificaciones:

        export CONSUMER_PROJECT=PROJECT_ID
      

      Reemplaza PROJECT_ID con el ID del proyecto.

    3. Configura el correo electrónico de la cuenta de servicio que creaste en los pasos anteriores:

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

      Reemplaza SERVICE_ACCOUNT_NAME por el nombre de la cuenta de servicio.

  3. Crea una suscripción al tema:

       gcloud pubsub subscriptions create SUBSCRIPTION_ID --topic TOPIC_ID
    

    Reemplaza SUBSCRIPTION_ID por el ID de la suscripción.

  4. Otorga a la cuenta de servicio de notificaciones una función con el permiso 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'
    

Para obtener más información sobre cómo configurar Pub/Sub, consulta Administra temas y suscripciones. En el paso siguiente, completa el proceso con la creación de un NotificationConfig.

Crea un NotificationConfig

Antes de crear un NotificationConfig, ten en cuenta que cada organización puede tener una cantidad limitada de archivos NotificationConfig. Para obtener más información, consulta Cuotas y límites.

El NotificationConfig incluye un campo filter que limita las notificaciones a eventos útiles. Este campo acepta todos los filtros disponibles en el método findings.list de la API de Security Command Center.

Cuando creas un NotificationConfig, debes especificar un elemento superior para el NotificationConfig desde la jerarquía de recursos de Google Cloud, ya sea una organización, una carpeta o un proyecto. Si más adelante necesitas recuperar, actualizar o borrar el NotificationConfig, debes incluir el ID numérico de la organización, la carpeta o el proyecto superior cuando hagas referencia a ellos.

Para crear el NotificationConfig con el lenguaje o la plataforma que prefieras, sigue estos pasos:

gcloud

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

Reemplaza lo siguiente:

  • NOTIFICATION_NAME: Es el nombre de la notificación. Debe tener entre 1 y 128 caracteres y solo puede contener caracteres alfanuméricos, guiones bajos o guiones.
  • PARENT: Es el alcance en la jerarquía de recursos al que se aplica la notificación, organization, folder o project.
  • PARENT_ID: Es el ID de la organización, la carpeta o el proyecto superior, especificado en el formato organizations/123, folders/456 o projects/789.
  • LOCATION: Si la residencia de datos está habilitada, especifica la ubicación de Security Command Center en la que se crea la notificación. El recurso notificationConfig resultante se almacena solo en esta ubicación. Solo los resultados que se emiten en esta ubicación se envían a Pub/Sub.

    Si la residencia de datos no está habilitada, especificar la marca --location crea la notificación con la API de Security Command Center v2 y el único valor válido para la marca es global.

  • NOTIFICATION_DESCRIPTION: Es una descripción de la notificación de no más de 1,024 caracteres.

  • PUBSUB_TOPIC: Es el tema de Pub/Sub que recibirá notificaciones. Su formato es projects/PROJECT_ID/topics/TOPIC.

  • FILTER: Es la expresión que defines para seleccionar qué resultados se envían a Pub/Sub. Por ejemplo, state="ACTIVE"

Python

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

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

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.


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

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

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

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

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

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

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

Rita

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.

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#

En el siguiente ejemplo, se usa la API v1. Si deseas modificar la muestra para v2, reemplaza v1 por v2 y agrega /locations/LOCATION al nombre del recurso.

Para la mayoría de los recursos, agrega /locations/LOCATION al nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders o projects.

Para los resultados, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, en el que SOURCE_ID es el ID del servicio de Security Command Center que emitió el resultado.


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

Las notificaciones ahora se publican en el tema de Pub/Sub que especificaste.

Para publicar notificaciones, se crea una cuenta de servicio para ti con el formato service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com. Esta cuenta de servicio se crea cuando creas tu primer NotificationConfig y se le otorga automáticamente el rol securitycenter.notificationServiceAgent en la política de IAM para PUBSUB_TOPIC cuando se crea la configuración de notificaciones. Se requiere este rol de cuenta de servicio para que funcionen las notificaciones.

Otorga acceso al perímetro en los Controles del servicio de VPC

Si usas los Controles del servicio de VPC y tu tema de Pub/Sub forma parte de un proyecto dentro de un perímetro de servicio, debes otorgar acceso a los proyectos para crear notificaciones.

Si quieres otorgar acceso a los proyectos, crea reglas de entrada y salida para las principales y los proyectos que se usan para crear notificaciones. Las reglas permiten el acceso a los recursos protegidos y permiten que Pub/Sub verifique que los usuarios tengan el permiso setIamPolicy en el tema de Pub/Sub.

Antes de crear una NotificationConfig

Antes de completar los pasos de Crea una NotificationConfig, haz lo siguiente:

  1. Ve a la página Controles del servicio de VPC en la consola de Google Cloud.

    Ir a los Controles del servicio de VPC

  2. Si es necesario, selecciona tu organización.

  3. Haz clic en el nombre del perímetro de servicio que deseas cambiar.

    Para encontrar el perímetro de servicio que necesitas modificar, puedes revisar los registros en busca de entradas que muestren incumplimientos de RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER. En esas entradas, verifica el campo servicePerimeterName: accessPolicies/ACCESS_POLICY_ID/servicePerimeters/SERVICE_PERIMETER_NAME.

  4. Haz clic en Editar perímetro.

  5. En el menú de navegación, haz clic en Política de entrada.

  6. Si quieres configurar reglas de entrada para usuarios o cuentas de servicio, usa los siguientes parámetros:

    • DESDE atributos del cliente de la API:
      • En el menú desplegable Fuente, selecciona Todas las fuentes.
      • En el menú desplegable Identidades, elige Identidades seleccionadas.
      • Haz clic en Seleccionar y, luego, ingresa la principal que se usa para llamar a la API de Security Command Center.
    • HASTA atributos de los servicios o recursos de Google Cloud:
      • En el menú desplegable Proyecto, elige Proyectos seleccionados.
      • Haz clic en Seleccionar y, luego, ingresa el proyecto que contiene el tema de Pub/Sub.
      • En el menú desplegable Servicios, selecciona Servicios seleccionados y, luego, selecciona API de Cloud Pub/Sub.
      • En el menú desplegable Métodos, selecciona Todas las acciones.
  7. Haz clic en Guardar.

  8. En el menú de navegación, haz clic en Política de salida.

  9. Haz clic en Agregar regla.

  10. A fin de configurar reglas de salida para cuentas de usuario o servicio, ingresa los siguientes parámetros:

    • DESDE atributos del cliente de la API:
      • En el menú desplegable Identidades, elige Identidades seleccionadas.
      • Haz clic en Seleccionar y, luego, ingresa la principal que se usa para llamar a la API de Security Command Center.
    • HASTA atributos de los servicios o recursos de Google Cloud:
      • En el menú desplegable Proyecto, selecciona Todos los proyectos.
      • En el menú desplegable Servicios, selecciona Servicios seleccionados y, luego, selecciona API de Cloud Pub/Sub.
      • En el menú desplegable Métodos, selecciona Todas las acciones.
  11. Haz clic en Guardar.

Crea una regla de entrada para la NotificationConfig

A fin de crear una regla de entrada para una NotificationConfig, haz lo siguiente:

  1. Completa las instrucciones de Crea una NotificationConfig.
  2. Vuelve a abrir el perímetro de servicio de la sección anterior.
  3. Haz clic en Política de entrada.
  4. Haz clic en Agregar regla.
  5. Para configurar la regla de entrada de la cuenta de servicio NotificationConfig que creaste, ingresa los siguientes parámetros:
    • DESDE atributos del cliente de la API:
      • En el menú desplegable Fuente, selecciona Todas las fuentes.
      • En el menú desplegable Identidades, elige Identidades seleccionadas.
      • Haz clic en Seleccionar y, luego, ingresa el nombre de la cuenta de servicio NotificationConfig: service-org-ORGANIZATION_ID@gcp-sa-scc-notification.iam.gserviceaccount.com
    • HACIA atributos de los servicios o recursos de GCP:
      • En el menú desplegable Proyecto, elige Proyectos seleccionados.
      • Haz clic en Seleccionar y, luego, selecciona el proyecto que contiene el tema de Pub/Sub.
      • En el menú desplegable Servicios, selecciona Servicios seleccionados y, luego, selecciona API de Cloud Pub/Sub.
      • En el menú desplegable Métodos, selecciona Todas las acciones.
  6. En el menú de navegación, haz clic en Guardar.

Los proyectos, los usuarios y las cuentas de servicio seleccionados ahora pueden acceder a los recursos protegidos y crear notificaciones.

Si seguiste todos los pasos de esta guía y las notificaciones funcionan de forma correcta, ahora puedes borrar lo siguiente:

  • La regla de entrada para la principal
  • La regla de salida para la principal

Esas reglas solo eran necesarias para configurar la NotificationConfig. Sin embargo, para que las notificaciones continúen funcionando, debes conservar la regla de entrada de la NotificationConfig, que le permite publicar notificaciones en tu tema de Pub/Sub detrás del perímetro de servicio.

¿Qué sigue?