Cómo habilitar las notificaciones de chat en tiempo real

Descripción general

Security Command Center proporciona notificaciones de resultados en tiempo real en la consola deGoogle Cloud . En esta guía, se describe cómo usar los Google Cloud servicios y las APIs de terceros para extender esa funcionalidad y recibir notificaciones casi en tiempo real en Slack. Cuando completas la guía, recibes alertas sobre resultados nuevos en servicios de terceros configurados sin acceder a la consola de Google Cloud , lo que permite una evaluación más rápida de las vulnerabilidades y amenazas. Obtén más información sobre los diferentes tipos de vulnerabilidades y amenazas en Security Command Center.

Topología

En esta guía, crearás la configuración que se ilustra en el siguiente diagrama.

Flujo de trabajo de notificaciones casi en tiempo real (haz clic para ampliar)
Flujo de trabajo de notificaciones casi en tiempo real para Security Command Center (haz clic para ampliar)

Objetivos

En esta guía, harás lo siguiente:

  1. Configura un tema de Pub/Sub
  2. Configura Slack.
  3. Escribir código en Cloud Run Functions
  4. Configurar Pub/Sub y las funciones de Cloud Run para enviar notificaciones a Slack cuando se escriba un nuevo hallazgo de gravedad alta o crítica en Security Command Center
  5. Solucionar problemas de notificaciones.

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

  • Pub/Sub
  • Cloud Run Functions
  • Cloud Build

Usa la calculadora de precios para estimar los costos según el uso previsto.

Antes de comenzar

Para completar esta guía, debes tener las siguientes funciones de Identity and Access Management (IAM):

  • Administrador de la organización (roles/resourcemanager.organizationAdmin)
  • Administrador del centro de seguridad (roles/securitycenter.admin)
  • Administrador de seguridad (roles/iam.securityAdmin)
  • Una función con el permiso serviceusage.services.use, como propietario (roles/owner), editor (roles/editor) o una función personalizada
  • Crea cuentas de servicio (roles/iam.serviceAccountCreator)
  • Editor de Pub/Sub (roles/pubsub.editor)
  • Administrador de cuentas de facturación (roles/billing.admin)

Los roles de IAM para Security Command Center se pueden otorgar a nivel de organización, carpeta o proyecto. Tu capacidad para ver, editar, crear o actualizar hallazgos, recursos y fuentes de seguridad depende del nivel al que se te otorga acceso. Para obtener más información sobre los roles de Security Command Center, consulta Control de acceso.

Configura un proyecto

Completa los siguientes pasos para crear o seleccionar un proyecto.

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. Instala Google Cloud CLI.

  6. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  11. Instala Google Cloud CLI.

  12. Si usas un proveedor de identidad externo (IdP), primero debes acceder a la gcloud CLI con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init

Tiempo estimado: La configuración y prueba de las notificaciones para un solo servicio tarda aproximadamente una hora.

Configura un tema de Pub/Sub

Pub/Sub es un servicio de mensajería en tiempo real que permite enviar y recibir mensajes entre aplicaciones independientes. Obtén más información sobre Pub/Sub.

En esta sección, configurarás Security Command Center para publicar los resultados en un tema de Pub/Sub.

Para configurar un tema de Pub/Sub y suscribirse a él, sigue estos pasos:

  1. Especifica tu proyecto Google Cloud en una variable de entorno.

    export PROJECT_ID=PROJECT_ID
    

    Reemplaza PROJECT_ID con el ID del proyecto.

  2. Especifica tu organización Google Cloud en una variable de entorno.

    export ORG_ID=ORG_ID
    

    Reemplaza ORG_ID por el ID de tu organización.

  3. Configura el ID del proyecto para los comandos gcloud.

    gcloud config set project PROJECT_ID
    
  4. Crea el tema de Pub/Sub en el que se publicarán las notificaciones.

    gcloud pubsub topics create scc-critical-and-high-severity-findings-topic
    
  5. Especifica el tema en una variable de entorno.

    export TOPIC=projects/$PROJECT_ID/topics/scc-critical-and-high-severity-findings-topic
    
  6. Crea la suscripción que notifica a las funciones de Cloud Run para que envíen un mensaje de chat cuando se publiquen mensajes en el tema.

    gcloud pubsub subscriptions create scc-critical-and-high-severity-findings-sub \
      --topic scc-critical-and-high-severity-findings-topic
    
  7. Configura Security Command Center para publicar notificaciones en el tema. Se puede usar cualquier filtro compatible con la API de ListFindings.

    El siguiente filtro publica notificaciones para los resultados de gravedad alta y crítica activas en la ubicación global. Obtén más información para filtrar resultados.

     gcloud scc notifications create scc-critical-high-severity \
         --pubsub-topic=$TOPIC \
         --organization=$ORG_ID \
         --location=global \
         --filter '(severity="HIGH" OR severity="CRITICAL") AND state="ACTIVE"'
    

A continuación, crea o configura tu app de chat para recibir notificaciones de Pub/Sub.

Configura una app de mensajería

En esta sección, se describe cómo usar Pub/Sub y Cloud Run Functions o Cloud Run Functions (1ª gen.) para habilitar notificaciones casi en tiempo real para Slack.

Para enviar notificaciones a un canal de Slack, haz lo siguiente: * Crea una nueva app de Slack con privilegios suficientes para publicar mensajes en un canal público de Slack. * Crea e implementa una Cloud Run function que publique mensajes de chat en Slack cuando se reciban notificaciones de Pub/Sub.

### Crea una app de Slack nueva

En esta sección, crearás una aplicación de Slack nueva para recibir notificaciones.

  1. Navega a Apps de la API de Slack para abrir una página de ejemplo en otra pestaña.
  2. Accede o crea una cuenta.

  3. Selecciona Create an App.

  4. Configura Nombre de la aplicación como "SCC Finding Notifier".

  5. Selecciona el lugar de trabajo de Slack de desarrollo en el que deseas que el bot de Slack publique mensajes y, luego, haz clic en Crear aplicación.

  6. En el panel de navegación, selecciona OAuth y permisos.

  7. Navega a la sección Scopes. Los permisos se dividen en dos categorías:

    • Bot Token Scopes
    • User Token Scopes
  8. Para este ejercicio, no necesitas agregar un permiso de token de usuario. En Alcances del token de bot, haz clic en Agregar un alcance de OAuth y, luego, ingresa lo siguiente:

    • chat:write
    • chat:write.public
  9. Ve a la parte superior de la página OAuth y permisos y haz clic en Instalar aplicación en el lugar de trabajo.

  10. En el diálogo de confirmación, haz clic en Permitir.

  11. Copia el token de acceso OAuth de usuario bot para usar en la función de Cloud Functions.

    A continuación, implementarás una función de Cloud Run para enviar notificaciones a un grupo de Slack.

    Crea la función de Cloud Run de Slack

    En esta sección, implementarás una función para enviar notificaciones a tu cuenta de Slack. La muestra de código de esta sección está escrita en Python, pero puedes usar cualquier lenguaje compatible con Cloud Run Functions.

  12. En la consola de Google Cloud , ve a la página Servicios de Cloud Run Functions.

    Ir a Servicios

  13. Selecciona el ID del proyecto que contiene el tema de Pub/Sub.

  14. Haz clic en Escribir una función y completa los campos:

    1. Para Nombre del servicio, ingresa slack-chat-high-and-critical-findings.
    2. En Región, selecciona la región en la que deseas almacenar el servicio.
    3. En Entorno de ejecución, selecciona la versión de Python que se usará para ejecutar tu función.
  15. Haz clic en Agregar activador y selecciona Activador de Pub/Sub.

  16. Ingresa los detalles del tema de Pub/Sub que creaste en Configura un tema de Pub/Sub y haz clic en Guardar activador.

  17. Haz clic en Crear. Se mostrarán los detalles del servicio.

  18. En el panel Fuente de la pestaña Fuente, haz clic en requirements.txt.

  19. En el editor de código, agrega requests y functions-framework==3.*:

     requests
     functions-framework==3.*
    
  20. En el panel Source, haz clic en main.py.

  21. En el editor de código, reemplaza el código por lo siguiente:

      import base64
      import json
      import requests
      import functions_framework
    
      TOKEN = "BOT_ACCESS_TOKEN"
    
      @functions_framework.cloud_event
      def send_slack_chat_notification(cloud_event):
    
          pubsub_message = base64.b64decode(cloud_event.data["message"]["data"]).decode('utf-8').strip()
          message_json = json.loads(pubsub_message)
    
          finding = message_json['finding']
    
          requests.post("https://slack.com/api/chat.postMessage", data={
              "token": TOKEN,
              "channel": "#SLACK_CHANNEL_NAME",
              "text": f"A high severity finding {finding['category']} was detected."
          })
    

    Reemplaza lo siguiente:

    • BOT_ACCESS_TOKEN: El token de acceso OAuth de usuario bot que creaste con la app de Slack.
    • SLACK_CHANNEL_NAME: Es el canal de Slack al que deseas enviar las notificaciones.
  22. En el campo Punto de entrada de la función, ingresa el nombre de la función en la muestra de código: send_slack_chat_notification.

  23. Haz clic en Guardar y volver a implementar. Si aparece una marca de verificación verde junto al nombre de la función, significa que se implementó correctamente. Este proceso puede tardar unos minutos.

Si los pasos anteriores se completaron sin errores, la configuración se completará y comenzarás a recibir notificaciones. Keep in mind:

  • Recibirás un mensaje de chat individual por cada resultado individual crítico o de gravedad alta. La frecuencia o la cantidad de notificaciones depende de los recursos dentro de tu organización.
  • Las notificaciones se publican y se envían casi en tiempo real. Sin embargo, la inmediatez de los mensajes no está garantizada, y varios factores pueden causar retrasos, incluidos los problemas con Slack.

Para cambiar el flujo de trabajo de notificaciones, puedes hacer lo siguiente:

  • Actualiza la función de Cloud Run para cambiar los destinatarios.
  • Actualiza el filtro para el tema de Pub/Sub a fin de cambiar qué resultados activan notificaciones.

Prueba las notificaciones

Para probar si las notificaciones están configuradas de forma correcta, sigue estas instrucciones para activar o desactivar los resultados de gravedad alta entre estados activos e inactivos.

  1. Ve a la página Resultados de Security Command Center.
    Ir a la página Resultados
  2. Si se le solicita, selecciona tu organización.
  3. En el panel Filtros rápidos, desplázate hacia abajo hasta la sección Gravedad y selecciona Alta o Crítica. El panel Resultados de la búsqueda se actualiza para mostrar solo los hallazgos de la gravedad seleccionada.
  4. En el panel Resultados de la consulta de hallazgos, selecciona un hallazgo marcando la casilla junto a su nombre.
  5. En el menú Cambiar el estado activo de la barra de acciones Resultados de la búsqueda, selecciona Inactivo. Si la búsqueda actual de resultados solo muestra los resultados activos, el resultado se quita de los resultados de la búsqueda.
  6. En el panel Filtros rápidos, desplázate hacia abajo hasta la sección Estado y cambia las selecciones para que solo se seleccione Inactivo. El panel Resultados de la búsqueda se actualiza para mostrar solo los resultados inactivos.
  7. En el panel Resultados de la búsqueda de hallazgos, selecciona el hallazgo que marcaste como inactivo.
  8. En el menú Cambiar el estado activo de la barra de acciones Resultados de la búsqueda, selecciona Activo.
  9. Revisa tus mensajes de Slack. Aparecerá un mensaje similar a las siguientes imágenes:

Notificación de Slack

Soluciona problemas

Si no se envían ni reciben mensajes de chat, sigue estos pasos para identificar y resolver posibles problemas.

1. Check [Stackdriver
logs](https://console.cloud.google.com/projectselector2/logs/viewer) for
your Cloud Run function to determine whether the function is being
invoked. If it is not being invoked, ensure that notifications are set up
correctly.

1. If the Cloud Run function is being invoked, then it might be
crashing. Check for errors in Cloud Run functions using
[Google Cloud console Error Reporting]
(https://console.developers.google.com/errors).

Realiza una limpieza

Para evitar que se apliquen cargos a tu Google Cloud cuenta por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra recursos individuales

  1. Borra la configuración de tus notificaciones:

    gcloud scc notifications delete scc-critical-high-severity \
        --organization=ORG_ID \
        --location=global
    

    Reemplaza ORG_ID por el ID de tu organización.

    Para mantener la configuración y pausar las notificaciones de manera temporal, comenta las llamadas send o post en la función de Cloud Run.

  2. Borra tu función de Cloud Run:

    1. Ve a Cloud Run Functions.
      Ir a Cloud Run Functions
    2. Haz clic en la casilla de verificación junto al objeto que deseas borrar.
    3. Haz clic en Borrar .
  3. Borra la cuenta de servicio:

    1. Vaya a la página de cuentas de servicio.
      Ir a las cuentas de servicio
    2. Selecciona un proyecto
    3. Selecciona la cuenta de servicio que deseas borrar y, luego, haz clic en Borrar .

¿Qué sigue?