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 de búsqueda que Security Command Center muestra en la consola de Google Cloud.

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

Como alternativa, puedes exportar resultados a BigQuery o puedes configurar las 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 de gcloud CLI a nivel de la organización, a nivel de carpeta o a nivel de proyecto, 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)

Los roles de IAM de Security Command Center se pueden otorgar a nivel de organización, carpeta o proyecto. Tu capacidad para ver, editar, crear o actualizar resultados, recursos, y las fuentes de seguridad dependen del nivel al que se te otorgue acceso. Para obtener más información Para conocer los roles 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 la API

  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 los datos y notificaciones

Si la residencia de datos para Security Command Center, los parámetros de configuración que definen las exportaciones continuas a Pub/Sub (notificationConfig recursos) están sujetos al control de residencia de datos y se almacenan 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 infraestructura exportar en la misma ubicación de Security Command Center que los resultados.

Debido a que los filtros que se usan en las las exportaciones 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 que creas exportarás.

Las exportaciones continuas se almacenan solo en la ubicación en las que se crean 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 nueva ubicación.

Para recuperar una exportación continua mediante llamadas a la API, haz lo siguiente: debes especificar la ubicación en el nombre completo del recurso de la 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 usando en gcloud CLI, debes especificar la ubicación en el nombre completo del recurso de la configuración o mediante --locations marca. 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 tu suscripción. de la fuente de datos.

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 Editor de configuración de notificaciones del centro de seguridad (roles/securitycenter.notificationConfigEditor). Este rol debe se otorguen en el mismo nivel: organización, carpeta proyecto, en el que se crea el NotificationConfig.
  • Pub/Sub Admin (roles/pubsub.admin) en el tema de Pub/Sub que recibe notificaciones

a nivel de organización, carpeta o proyecto nivel

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 tu 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 del cuenta que ejecuta comandos de gcloud CLI.

    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 la CLI de gcloud un rol que incluya todos los permisos de securitycenter.notification, como roles/securitycenter.notificationConfigEditor o roles/securitycenter.admin. Puedes otorgar el rol a nivel del proyecto, a nivel de 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 Security Command Center está habilitado
      • 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
      

      Reemplazar ORGANIZATION_ID por tu organización ID.

    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 de 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 el rol a nivel del 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 ya está configurada para usarse con notificaciones la clave de la cuenta se almacena en la KEY_LOCATION que especificada. Para obtener más información sobre las cuentas de servicio, consulta crear y administrar 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
    

    Reemplazar ABSOLUTE_PATH_TO_SERVICE_ACCOUNT_KEY con 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 la API de Security Command Center findings.list .

Cuando creas un NotificationConfig, especificas un elemento superior para el NotificationConfig de la jerarquía de recursos de Google Cloud, una organización, una carpeta o un proyecto. Si necesitas recuperar, actualizar o borrar la NotificationConfig más tarde, deberás incluir el ID numérico de la organización, la carpeta o el proyecto superior cuando hacer referencia a él.

Para crear el NotificationConfig con el lenguaje o la plataforma que elijas:

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 contener caracteres alfanuméricos solo caracteres, guiones bajos o guiones.
  • PARENT: Es el permiso en la jerarquía de recursos. a la que se aplica la notificación, organization, folder o project.
  • PARENT_ID: 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 el Ubicación de Security Command Center en la que se creará la notificación. El notificationConfig resultante recurso se almacena solo en esta ubicación. Solo se envían a Pub/Sub los resultados que se emiten en esta ubicación.

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

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

  • PUBSUB_TOPIC: el 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 de v1. Para modificar la muestra para la v2, reemplaza v1 por v2 y agrega /locations/LOCATION para el nombre del recurso

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

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

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 de v1. Para modificar la muestra para la v2, reemplaza v1 por v2 y agrega /locations/LOCATION para el 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 recurso nombre después de /sources/SOURCE_ID, donde SOURCE_ID es el ID del Servicio de Security Command Center que emitió el hallazgo.


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. Para 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 el nombre del recurso después de /PARENT/PARENT_ID, donde PARENT es organizations, folders, o projects.

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

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. Para modificar la muestra para la v2, reemplaza v1 por v2 y agrega /locations/LOCATION para el nombre del recurso

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

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

// 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. Para modificar la muestra para la v2, reemplaza v1 por v2 y agrega /locations/LOCATION para el nombre del recurso

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

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

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

En el siguiente ejemplo, se usa la API v1. Para modificar la muestra para la v2, reemplaza v1 por v2 y agrega /locations/LOCATION para el 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 recurso nombre después de /sources/SOURCE_ID, donde SOURCE_ID es el ID del Servicio de Security Command Center que emitió el hallazgo.

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. Para 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 hallazgos, agrega /locations/LOCATION al nombre del recurso después de /sources/SOURCE_ID, donde SOURCE_ID es el ID del servicio de Security Command Center que emitió el hallazgo.


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 de securitycenter.notificationServiceAgent en la política de IAM de PUBSUB_TOPIC cuando se crea la configuración de notificaciones. Este rol de la cuenta de servicio es obligatorio 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.

A fin de otorgar acceso a los proyectos, crea reglas de entrada y salida para las principales. y 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 el principal que se usa para llamar a la API de Security Command Center.
    • HACIA 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 usará para lo siguiente: llamar a la API de Security Command Center.
    • HACIA 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 del 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?