Attivazione delle notifiche chat in tempo reale

Panoramica

Security Command Center fornisce notifiche in tempo reale dei risultati nella consoleGoogle Cloud . Questa guida descrive come utilizzare i servizi Google Cloud e le API di terze parti per estendere questa funzionalità e ricevere notifiche quasi in tempo reale in Slack. Quando completi la guida, ricevi avvisi sulle nuove scoperte nei servizi di terze parti configurati senza accedere alla console Google Cloud , il che consente di eseguire una valutazione più rapida delle vulnerabilità e delle minacce. Scopri di più sui diversi tipi di vulnerabilità e minacce in Security Command Center.

Topologia

In questa guida, creerai la configurazione illustrata nel diagramma seguente.

Workflow delle notifiche quasi in tempo reale (fai clic per ingrandire)
Flusso di lavoro delle notifiche quasi in tempo reale per Security Command Center (fai clic per ingrandire)

Obiettivi

In questa guida imparerai a:

  1. Configurare un argomento Pub/Sub.
  2. Configura Slack.
  3. Scrivi codice in Cloud Run Functions.
  4. Configura Pub/Sub e Cloud Run Functions in modo da inviare notifiche a Slack ogni volta che viene scritto un nuovo risultato di gravità alta o critica in Security Command Center.
  5. Risolvi i problemi relativi alle notifiche.

Costi

Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:

  • Pub/Sub
  • Cloud Run Functions
  • Cloud Build

Utilizza il calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.

Prima di iniziare

Per completare questa guida, devi disporre dei seguenti ruoli IAM (Identity and Access Management):

  • Amministratore dell'organizzazione (roles/resourcemanager.organizationAdmin)
  • Security Center Admin (roles/securitycenter.admin)
  • Amministratore sicurezza (roles/iam.securityAdmin)
  • Un ruolo con l'autorizzazione serviceusage.services.use, ad esempio Proprietario (roles/owner), Editor (roles/editor) o un ruolo personalizzato
  • Crea service account (roles/iam.serviceAccountCreator)
  • Editor Pub/Sub (roles/pubsub.editor)
  • Amministratore account di fatturazione (roles/billing.admin)

I ruoli IAM per Security Command Center possono essere concessi a livello di organizzazione, cartella o progetto. La possibilità di visualizzare, modificare, creare o aggiornare risultati, asset e origini di sicurezza dipende dal livello di accesso che ti è stato concesso. Per scoprire di più sui ruoli di Security Command Center, consulta Controllo dell'accesso.

Configurare un progetto

Completa i seguenti passaggi per creare o selezionare un progetto.

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
  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

Tempo stimato: la configurazione e il test delle notifiche per un singolo servizio richiedono circa un'ora.

Configurare un argomento Pub/Sub

Pub/Sub è un servizio di messaggistica in tempo reale che consente di inviare e ricevere messaggi tra applicazioni indipendenti. Scopri di più su Pub/Sub.

In questa sezione, configuri Security Command Center in modo da pubblicare i risultati in un argomento Pub/Sub.

Per configurare e sottoscrivere un argomento Pub/Sub:

  1. Specifica il tuo Google Cloud progetto in una variabile di ambiente.

    export PROJECT_ID=PROJECT_ID
    

    Sostituisci PROJECT_ID con l'ID progetto.

  2. Specifica la tua Google Cloud organizzazione in una variabile di ambiente.

    export ORG_ID=ORG_ID
    

    Sostituisci ORG_ID con l'ID organizzazione.

  3. Imposta l'ID progetto per i comandi gcloud.

    gcloud config set project PROJECT_ID
    
  4. Crea l'argomento Pub/Sub in cui vengono pubblicate le notifiche.

    gcloud pubsub topics create scc-critical-and-high-severity-findings-topic
    
  5. Specifica l'argomento in una variabile di ambiente.

    export TOPIC=projects/$PROJECT_ID/topics/scc-critical-and-high-severity-findings-topic
    
  6. Crea la sottoscrizione che notifica alle funzioni Cloud Run di inviare un messaggio chat quando i messaggi vengono pubblicati nell'argomento.

    gcloud pubsub subscriptions create scc-critical-and-high-severity-findings-sub \
      --topic scc-critical-and-high-severity-findings-topic
    
  7. Configura Security Command Center in modo da pubblicare le notifiche nell'argomento. È possibile utilizzare qualsiasi filtro compatibile con l'API ListFindings.

    Il seguente filtro pubblica le notifiche per i risultati attivi con gravità alta e critica nella località global. Scopri di più sul filtraggio dei risultati.

     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
    

    Aggiungi il flag --deletion-notifications-enabled per ricevere notifiche sugli eventi di eliminazione dei risultati a causa dei criteri di conservazione. La notifica contiene il campo deletedFinding: true impostato. Assicurati che le funzioni Cloud Run o l'applicazione analizzino l'attributo deletedFinding in modo che gli avvisi riflettano correttamente le eliminazioni dei risultati. Per disattivare le notifiche di eliminazione, aggiorna NotificationConfig e imposta il flag --no-deletion-notifications-enabled.

Successivamente, crea o configura la tua app di chat per ricevere notifiche da Pub/Sub.

Configurazione di un'app di messaggistica

Questa sezione descrive come utilizzare Pub/Sub e Cloud Run Functions o Cloud Run Functions (1ª generazione.) per attivare le notifiche quasi in tempo reale per Slack.

Per inviare notifiche a un canale Slack:

  • Crea una nuova app Slack con privilegi sufficienti per pubblicare messaggi su un canale Slack pubblico.
  • Crea ed esegui il deployment di una funzione Cloud Run che pubblica messaggi chat su Slack quando vengono ricevute notifiche da Pub/Sub.

Creare una nuova app Slack

In questa sezione, crea una nuova app Slack per ricevere le notifiche.

  1. Vai a App API Slack. La pagina si apre in una nuova scheda.
  2. Accedi o crea un account.

  3. Seleziona Crea un'app.

  4. Imposta Nome app su "SCC Finding Notifier".

  5. Seleziona l'area di lavoro Slack di sviluppo in cui vuoi che il bot Slack pubblichi i messaggi, quindi fai clic su Crea app.

  6. Nel pannello di navigazione, seleziona OAuth e autorizzazioni.

  7. Vai alla sezione Ambiti. Gli ambiti rientrano in due categorie:

    • Ambiti dei token bot
    • Ambiti dei token utente
  8. Per questo esercizio, non è necessario aggiungere un ambito del token utente. In Ambiti token bot, fai clic su Aggiungi un ambito OAuth e inserisci:

    • chat:write
    • chat:write.public
  9. Vai in cima alla pagina OAuth e autorizzazioni e fai clic su Installa app in Workspace.

  10. Nella finestra di dialogo di conferma, fai clic su Consenti.

  11. Copia il token di accesso OAuth utente bot da utilizzare nella funzione Cloud.

Successivamente, esegui il deployment di una funzione Cloud Run per inviare notifiche a un gruppo Slack.

Crea la funzione Cloud Run di Slack

In questa sezione, esegui il deployment di una funzione per inviare notifiche al tuo account Slack. L'esempio di codice in questa sezione è scritto in Python, ma puoi utilizzare qualsiasi linguaggio supportato da Cloud Run Functions.

  1. Nella console Google Cloud , vai alla pagina Servizi di Cloud Run Functions.

    Vai a Servizi

  2. Seleziona l'ID del progetto che contiene l'argomento Pub/Sub.

  3. Fai clic su Scrivi una funzione e compila i campi:

    1. In Nome servizio, inserisci slack-chat-high-and-critical-findings.
    2. Per Regione, seleziona la regione in cui vuoi archiviare il servizio.
    3. In Runtime, seleziona la versione di Python da utilizzare per eseguire la funzione.
  4. Fai clic su Aggiungi trigger e seleziona Trigger Pub/Sub.

  5. Inserisci i dettagli dell'argomento Pub/Sub che hai creato in Configurazione di un argomento Pub/Sub e fai clic su Salva trigger.

  6. Fai clic su Crea. Vengono visualizzati i dettagli del servizio.

  7. Nel riquadro Origine della scheda Origine, fai clic su requirements.txt.

  8. Nell'editor di codice, aggiungi requests e functions-framework==3.*:

    requests
    functions-framework==3.*
    
  9. Nel riquadro Origine, fai clic su main.py.

  10. Nell'editor di codice, sostituisci il codice con il seguente:

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

    Sostituisci quanto segue:

    • BOT_ACCESS_TOKEN: il token di accesso OAuth dell'utente bot che hai creato con l'app Slack.
    • SLACK_CHANNEL_NAME: il canale Slack a cui vuoi inviare le notifiche.
  11. Nel campo Entry point della funzione, inserisci il nome della funzione nell'esempio di codice: send_slack_chat_notification.

  12. Fai clic su Salva e ridistribuisci. Se accanto al nome della funzione viene visualizzato un segno di spunta verde, il deployment della funzione è stato eseguito correttamente. Questa procedura può richiedere alcuni minuti.

Se i passaggi precedenti sono stati completati senza errori, la configurazione è completa e inizierai a ricevere le notifiche. Ricorda:

  • Ricevi un messaggio chat separato per ogni singolo risultato critico o di gravità elevata. La frequenza o il numero di notifiche dipende dalle risorse all'interno della tua organizzazione.
  • Le notifiche vengono pubblicate e inviate quasi in tempo reale. Tuttavia, l'immediatezza dei messaggi non è garantita e diversi fattori possono causare ritardi, inclusi problemi con Slack.

Per modificare il flusso di lavoro delle notifiche, puoi:

  • Modifica i destinatari aggiornando la funzione Cloud Run.
  • Modifica i risultati che attivano le notifiche aggiornando il filtro per l'argomento Pub/Sub.

Test delle notifiche

Per verificare se le notifiche sono configurate correttamente, segui queste istruzioni per alternare lo stato dei risultati di gravità elevata tra attivo e inattivo.

  1. Vai alla pagina Risultati di Security Command Center.
    Vai alla pagina Risultati
  2. Se richiesto, seleziona la tua organizzazione.
  3. Nel riquadro Filtri rapidi, vai alla sezione Gravità e seleziona Alta o Critica. Il riquadro Risultati della query sui risultati viene aggiornato per mostrare i risultati solo della gravità selezionata.
  4. Nel riquadro Risultati della query sui risultati, seleziona un risultato selezionando la casella accanto al nome.
  5. Dal menu Modifica stato attivo nella barra delle azioni Risultati della query sui risultati, seleziona Inattivo. Se la query sui risultati attuale mostra solo i risultati attivi, il risultato viene rimosso dai risultati della query.
  6. Nel riquadro Filtri rapidi, vai alla sezione Stato e modifica le selezioni in modo che sia selezionato solo Non attivo. Il riquadro Risultati della query sui risultati si aggiorna per mostrare solo i risultati inattivi.
  7. Nel riquadro Risultati della query sui risultati, seleziona il risultato che hai contrassegnato come inattivo.
  8. Dal menu Modifica stato attivo nella barra delle azioni Risultati della query sui risultati, seleziona Attivo.
  9. Controlla i tuoi messaggi di Slack. Viene visualizzato un messaggio simile all'immagine seguente:

Notifica di Slack

Risoluzione dei problemi

Se i messaggi di chat non vengono inviati o ricevuti, segui questi passaggi per identificare e risolvere i potenziali problemi.

  1. Controlla i log Stackdriver della funzione Cloud Run per determinare se la funzione viene richiamata. Se non viene richiamato, assicurati che le notifiche siano configurate correttamente.

  2. Se viene richiamata la funzione Cloud Run, è possibile che si arresti in modo anomalo. Controlla la presenza di errori in Cloud Run Functions utilizzando Google Cloud Error Reporting della console.

Pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. Nella console Google Cloud , vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID progetto, quindi fai clic su Chiudi per eliminare il progetto.

Eliminazione di singole risorse

  1. Elimina la configurazione delle notifiche:

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

    Sostituisci ORG_ID con l'ID organizzazione.

    Per mantenere la configurazione e mettere in pausa temporaneamente le notifiche, commenta le chiamate send o post nella funzione Cloud Run.

  2. Elimina la funzione Cloud Run:

    1. Vai a Cloud Run Functions.
      Vai a Cloud Run Functions
    2. Fai clic sulla casella di controllo accanto alla funzione che vuoi eliminare.
    3. Fai clic su Elimina .
  3. Elimina il account di servizio:

    1. Vai alla pagina Account di servizio.
      Vai alla pagina Service account
    2. Seleziona un progetto.
    3. Seleziona il account di servizio da eliminare, quindi fai clic su Elimina .

Passaggi successivi