Activer les notifications de chat en temps réel

Présentation

Security Command Center fournit des notifications en temps réel sur ses résultats dans la consoleGoogle Cloud . Ce guide explique comment utiliser les services Google Cloud et les API tierces pour étendre ces fonctionnalités et recevoir des notifications en temps quasi réel dans Slack. Après l'avoir terminé, vous recevez des alertes concernant les nouveaux résultats des services tiers configurés sans vous connecter à la console Google Cloud . Vous pouvez ainsi trier plus rapidement les failles et les menaces. Découvrez les différents types de failles et menaces dans Security Command Center.

Topologie

Dans ce guide, vous créez la configuration illustrée dans le schéma suivant.

Workflow de notifications en temps quasi réel (cliquez pour agrandir)
Workflow de notifications en temps quasi réel pour Security Command Center (cliquez pour agrandir)

Objectifs

Dans ce guide, vous allez exécuter les opérations suivantes :

  1. Configurer un sujet Pub/Sub
  2. Configurez Slack.
  3. Écrire du code dans Cloud Run Functions
  4. Configurer Pub/Sub et Cloud Run Functions pour envoyer des notifications à Slack chaque fois qu'un résultat de gravité élevée ou critique est écrit dans Security Command Center.
  5. Résoudre les problèmes de notification

Coûts

Ce tutoriel fait appel à des composants payants de Google Cloud, y compris :

  • Pub/Sub
  • Cloud Run Functions
  • Cloud Build

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du Simulateur de coût.

Avant de commencer

Pour suivre ce guide, vous devez disposer des rôles Identity and Access Management (IAM) suivants :

  • Administrateur de l'organisation (roles/resourcemanager.organizationAdmin)
  • Administrateur du centre de sécurité (roles/securitycenter.admin)
  • Administrateur de sécurité (roles/iam.securityAdmin)
  • Un rôle disposant de l'autorisation serviceusage.services.use, tel que Propriétaire (roles/owner), Éditeur (roles/editor) ou un rôle personnalisé
  • Créateur de comptes de service (roles/iam.serviceAccountCreator)
  • Éditeur Pub/Sub (roles/pubsub.editor)
  • Administrateur de compte de facturation (roles/billing.admin)

Les rôles IAM pour Security Command Center peuvent être accordés au niveau de l'organisation, du dossier ou du projet. Votre capacité à afficher, modifier, créer ou mettre à jour les résultats, les éléments et les sources de sécurité dépend du niveau pour lequel vous disposez d'un accès. Pour en savoir plus sur les rôles Security Command Center, consultez la page Contrôle des accès.

Configurer un projet

Pour créer ou sélectionner un projet, procédez comme suit.

  1. Connectez-vous à votre compte Google Cloud . Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits sans frais pour exécuter, tester et déployer des charges de travail.
  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. Installez la Google Cloud CLI.

  6. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  7. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    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. Installez la Google Cloud CLI.

  12. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  13. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init

Durée estimée : la configuration et le test des notifications d'un seul service prend environ une heure.

Configurer un sujet Pub/Sub

Pub/Sub est un service de messagerie en temps réel qui permet l'envoi et la réception de messages entre applications indépendantes. En savoir plus sur Pub/Sub.

Dans cette section, vous allez configurer Security Command Center pour publier les résultats dans un sujet Pub/Sub.

Pour configurer un sujet Pub/Sub et vous y abonner, procédez comme suit :

  1. Spécifiez votre projet Google Cloud dans une variable d'environnement.

    export PROJECT_ID=PROJECT_ID
    

    Remplacez PROJECT_ID par l'ID du projet.

  2. Spécifiez votre organisation Google Cloud dans une variable d'environnement.

    export ORG_ID=ORG_ID
    

    Remplacez ORG_ID par votre ID d'organisation.

  3. Définissez l'ID du projet pour les commandes gcloud.

    gcloud config set project PROJECT_ID
    
  4. Créez le sujet Pub/Sub dans lequel les notifications sont publiées.

    gcloud pubsub topics create scc-critical-and-high-severity-findings-topic
    
  5. Spécifiez le sujet dans une variable d'environnement.

    export TOPIC=projects/$PROJECT_ID/topics/scc-critical-and-high-severity-findings-topic
    
  6. Créez l'abonnement qui indique aux fonctions Cloud Run d'envoyer un message de chat lorsque des messages sont publiés sur le sujet.

    gcloud pubsub subscriptions create scc-critical-and-high-severity-findings-sub \
      --topic scc-critical-and-high-severity-findings-topic
    
  7. Configurer Security Command Center pour publier des notifications sur le sujet. Tous les filtres compatibles avec l'API ListFindings peuvent être utilisés.

    Le filtre suivant publie des notifications pour les résultats actifs de gravité élevée et critique dans l'emplacement global. En savoir plus sur le filtrage des résultats

     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"'
    

Vous créez ou configurez ensuite votre application de chat pour recevoir des notifications de Pub/Sub.

Configurer une application de messagerie

Cette section explique comment utiliser Pub/Sub et les fonctions Cloud Run ou Cloud Run Functions (1re génération) pour activer les notifications en temps quasi réel pour Slack.

Pour envoyer des notifications à un canal Slack, procédez comme suit : * Créez une application Slack disposant de droits suffisants pour publier des messages sur un canal Slack public. * Créez et déployez une fonction Cloud Run qui publie des messages de chat sur Slack lorsque des notifications proviennent de Pub/Sub.

### Créer une application Slack

Dans cette section, vous allez créer une application Slack pour recevoir des notifications.

  1. Accédez à la liste des applications de l'API Slack. La page s'ouvre dans un autre onglet.
  2. Se connecter ou créer un compte.

  3. Sélectionnez Créer une application.

  4. Définissez le nom de l'application sur SCC Finding Notifier.

  5. Sélectionnez l'espace de travail Slack de développement dans lequel vous souhaitez que le bot Slack publie des messages, puis cliquez sur Créer une application.

  6. Dans le panneau de navigation, sélectionnez OAuth et autorisations.

  7. Accédez à la section Champs d'application. Les champs d'application appartiennent à deux catégories :

    • Champs d'application des jetons de bot
    • Champs d'application des jetons d'utilisateur
  8. Dans cet exercice, vous n'avez pas besoin d'ajouter un champ d'application de jeton d'utilisateur. Sous "Champs d'application des jetons de bot", cliquez sur Ajouter un champ d'application OAuth et saisissez les informations suivantes :

    • chat:write
    • chat:write.public
  9. En haut de la page OAuth et autorisations, cliquez sur Installer l'application dans l'espace de travail.

  10. Dans la boîte de dialogue de confirmation, cliquez sur Autoriser.

  11. Copiez le jeton d'accès OAuth de l'utilisateur bot pour l'utiliser dans Cloud Functions.

    Vous allez ensuite déployer une fonction Cloud Run pour envoyer des notifications à un groupe Slack.

    Créer la fonction Cloud Run Slack

    Dans cette section, vous allez déployer une fonction permettant d'envoyer des notifications à votre compte Slack. L'exemple de code de cette section est écrit en Python, mais vous pouvez utiliser n'importe quel langage compatible avec les fonctions Cloud Run.

  12. Dans la console Google Cloud , accédez à la page Services de Cloud Run Functions.

    Accéder aux services

  13. Sélectionnez l'ID du projet contenant le sujet Pub/Sub.

  14. Cliquez sur Écrire une fonction, puis remplissez les champs :

    1. Dans le champ Nom du service, saisissez slack-chat-high-and-critical-findings.
    2. Pour Région, sélectionnez la région dans laquelle vous souhaitez stocker le service.
    3. Dans le champ Environnement d'exécution, sélectionnez la version de Python à utiliser pour exécuter votre fonction.
  15. Cliquez sur Ajouter un déclencheur, puis sélectionnez Déclencheur Pub/Sub.

  16. Saisissez les détails du sujet Pub/Sub que vous avez créé dans la section Configurer un sujet Pub/Sub, puis cliquez sur Enregistrer le déclencheur.

  17. Cliquez sur Créer. Les détails du service s'affichent.

  18. Dans le volet Source de l'onglet Source, cliquez sur requirements.txt.

  19. Dans l'éditeur de code, ajoutez requests et functions-framework==3.* :

     requests
     functions-framework==3.*
    
  20. Dans le volet Source, cliquez sur main.py.

  21. Dans l'éditeur de code, remplacez le code par ce qui suit :

      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."
          })
    

    Remplacez les éléments suivants :

    • BOT_ACCESS_TOKEN : jeton d'accès OAuth de l'utilisateur bot que vous avez créé avec l'application Slack.
    • SLACK_CHANNEL_NAME : canal Slack sur lequel vous souhaitez envoyer les notifications.
  22. Dans le champ Point d'entrée de la fonction, saisissez le nom de la fonction dans l'exemple de code : send_slack_chat_notification.

  23. Cliquez sur Enregistrer et redéployer. Si une coche verte s'affiche à côté du nom de la fonction, cela signifie qu'elle a bien été déployée. Ce processus peut prendre quelques minutes.

Si les étapes précédentes se sont déroulées sans erreur, la configuration est terminée et vous commencez à recevoir des notifications. À noter :

  • Vous recevez un message de chat distinct pour chaque résultat critique ou grave. La fréquence ou le nombre de notifications dépend des ressources de votre organisation.
  • Les notifications sont publiées et envoyées en temps quasi réel. Cependant, l'immédiateté des messages n'est pas garantie. Plusieurs facteurs peuvent entraîner des retards, comme des problèmes liés à Slack.

Pour modifier le workflow des notifications, procédez comme suit :

  • Modifiez les destinataires en mettant à jour votre fonction Cloud Run.
  • Modifiez les résultats qui déclenchent des notifications en mettant à jour le filtre associé au sujet Pub/Sub.

Notifications de test

Pour vérifier si les notifications sont correctement configurées, suivez ces instructions pour faire passer les résultats de gravité élevée de l'état actif à l'état inactif.

  1. Accédez à la page "Résultats" de Security Command Center.
    Accéder à la page Résultats
  2. Sélectionnez votre organisation, si vous y êtes invité.
  3. Dans le panneau Filtres rapides, faites défiler la page jusqu'à la section Gravité, puis sélectionnez Élevée ou Critique. Le panneau Résultats de la requête de résultat est mis à jour pour n'afficher que les résultats de la gravité sélectionnée.
  4. Dans le panneau Résultats de requête sur les résultats, sélectionnez un résultat en cochant la case à côté de son nom.
  5. Dans le menu Modifier l'état actif de la barre d'actions Résultats de la requête, sélectionnez Inactif. Si la requête de résultats actuelle n'affiche que les résultats actifs, le résultat est supprimé des résultats de la requête.
  6. Dans le panneau Filtres rapides, faites défiler la page jusqu'à la section État, puis modifiez les sélections pour que seule l'option Inactif soit sélectionnée. Le panneau Résultats de la requête de résultat est mis à jour pour n'afficher que les résultats inactifs.
  7. Dans le panneau Résultats de la requête, sélectionnez le résultat que vous avez marqué comme inactif.
  8. Dans le menu Modifier l'état actif de la barre d'actions Résultats de la requête, sélectionnez Actif.
  9. Consultez vos messages Slack. Un message semblable à celui des images suivantes s'affiche :

Notification Slack

Dépannage

Si les messages de chat ne sont pas envoyés ou reçus, suivez ces étapes pour identifier et résoudre les problèmes potentiels.

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).

Nettoyer

Pour éviter que les ressources utilisées dans ce tutoriel ne soient facturées sur votre compte Google Cloud , supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. Dans la console Google Cloud , accédez à la page Gérer les ressources.

    Accéder à la page "Gérer les ressources"

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer des ressources individuelles

  1. Supprimez votre configuration de notification :

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

    Remplacez ORG_ID par votre ID d'organisation.

    Pour conserver votre configuration et suspendre temporairement les notifications, mettez en commentaire les appels send ou post dans votre fonction Cloud Run.

  2. Supprimez votre fonction Cloud Run :

    1. Accédez à Cloud Run Functions.
      Accéder à Cloud Run Functions
    2. Cochez la case située à côté de l'objet à supprimer.
    3. Cliquez sur Supprimer ().
  3. Supprimez le compte de service :

    1. Accédez à la page Comptes de service.
      Accédez à la page Comptes de service
    2. Sélectionnez un projet.
    3. Sélectionnez le compte de service que vous souhaitez supprimer, puis cliquez sur Supprimer .

Étapes suivantes