Activer les notifications de chat en temps réel

Présentation

Security Command Center fournit des notifications en temps réel sur les résultats dans la consoleGoogle Cloud . Ce guide explique comment utiliser les services Google Cloud et les API tierces pour étendre cette fonctionnalité et recevoir des notifications en temps quasi réel dans Slack. Lorsque vous avez terminé le guide, vous recevez des alertes concernant les nouvelles découvertes dans les services tiers configurés sans avoir à vous connecter à la console Google Cloud . Vous pouvez ainsi trier plus rapidement les failles et les menaces. En savoir plus sur les différents types de failles et de menaces dans Security Command Center

Topologie

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

Workflow des 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. Écrivez du code dans Cloud Run Functions.
  4. Configurez des fonctions Pub/Sub et Cloud Run pour envoyer des notifications à Slack chaque fois qu'un nouveau 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
  • Fonctions Cloud Run
  • 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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    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, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    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 d'envoyer et de recevoir des messages entre différentes applications. 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 avertit les fonctions Cloud Run d'envoyer un message de chat lorsque des messages sont publiés dans 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"' \
         --deletion-notifications-enabled
    

    Ajoutez l'indicateur --deletion-notifications-enabled pour recevoir des notifications concernant les événements de suppression de résultats en raison des règles de conservation. La notification contient le champ deletedFinding: true défini. Assurez-vous que vos fonctions ou applications Cloud Run analysent l'attribut deletedFinding afin que les alertes reflètent correctement les suppressions de résultats. Pour désactiver les notifications de suppression, mettez à jour NotificationConfig et définissez l'indicateur --no-deletion-notifications-enabled.

Ensuite, vous devez créer ou configurer votre application de chat pour qu'elle reçoive les notifications de Pub/Sub.

Configurer une application de messagerie

Cette section explique comment utiliser Pub/Sub et Cloud Run Functions 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 sont reçues 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 Slack Cloud Run

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 Cloud Run Functions.

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

    Accéder aux services

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

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

    1. Dans le champ Nom du service, saisissez slack-chat-high-and-critical-findings.
    2. Dans le champ 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.
  4. Cliquez sur Ajouter un déclencheur, puis sélectionnez Déclencheur Pub/Sub.

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

  6. Cliquez sur Créer. Les informations sur le service s'affichent.

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

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

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

  10. 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.
  11. 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.

  12. 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 de gravité élevée. 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. Toutefois, l'immédiateté des messages n'est pas garantie et de nombreux facteurs peuvent entraîner des retards, y compris des problèmes avec 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, accédez à la section Gravité, puis sélectionnez Élevée ou Critique. Le panneau Résultats de la requête est mis à jour pour n'afficher que les résultats de la gravité sélectionnée.
  4. Dans le panneau Résultats de la requête de résultat, sélectionnez un résultat en cochant la case à côté de son nom.
  5. Dans le menu Modifier l'état de l'activité 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, accédez à la section État et 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 de résultats, sélectionnez le résultat que vous avez marqué comme inactif.
  8. Dans le menu Modifier l'état de l'activité de la barre d'actions Résultats de la requête, sélectionnez Actif.
  9. Consultez vos messages Slack. Un message semblable à celui de l'image suivante s'affiche :

Notification Slack

Dépannage

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

  1. Consultez les journaux Stackdriver de votre fonction Cloud Run pour déterminer si elle est appelée. Si elle n'est pas appelée, assurez-vous que les notifications sont correctement configurées.

  2. Si la fonction Cloud Run est appelée, elle risque de planter. Recherchez les erreurs dans Cloud Run Functions à l'aide de l'outil Error Reporting de la consoleGoogle Cloud .

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, commentez 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