Attivazione delle notifiche chat in tempo reale

Panoramica

Security Command Center fornisce notifiche in tempo reale dei risultati nella Google Cloud console. 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. Al termine della guida, riceverai avvisi sui nuovi risultati nei servizi di terze parti configurati senza accedere alla Google Cloud console, consentendo una valutazione più rapida delle vulnerabilità e delle minacce. Scopri di più su i 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:

  1. Configurerai un argomento Pub/Sub.
  2. Configurerai Slack.
  3. Scriverai codice in Cloud Run Functions.
  4. Configurerai Pub/Sub e Cloud Run Functions per 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 Identity and Access Management (IAM):

  • Amministratore dell'organizzazione (roles/resourcemanager.organizationAdmin)
  • Amministratore Centro sicurezza (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
  • Create Service Accounts (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 per il quale ti è stato concesso l'accesso. Per scoprire di più sui ruoli di Security Command Center, consulta Controllo dell'accesso.

Configurazione di un progetto

Completa i seguenti passaggi per creare o selezionare un progetto.

  1. Accedi al tuo Google Cloud account. 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 workload.
  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. Installa Google Cloud CLI.

  6. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  7. Per inizializzare gcloud CLI, esegui questo 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. Installa Google Cloud CLI.

  12. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init

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

Configurazione di 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, configurerai Security Command Center per pubblicare i risultati in un argomento Pub/Sub.

Per configurare un argomento Pub/Sub ed eseguire la sottoscrizione:

  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 della tua 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 a Cloud Run Functions di inviare un messaggio di 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 per pubblicare le notifiche nell'argomento. È possibile utilizzare qualsiasi filtro compatibile con l'API ListFindings.

    Il seguente filtro pubblica le notifiche per i risultati attivi di 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"'
    

Poi, crea o configura l'app di chat per ricevere le 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 abilitare 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 in un canale Slack pubblico. * Crea ed esegui il deployment di una funzione Cloud Run che pubblica messaggi di chat in Slack quando riceve notifiche da Pub/Sub.

### Creare una nuova app Slack

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

  1. Vai alle app dell'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 lo spazio 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 devi aggiungere un ambito dei token utente. In Ambiti dei token bot, fai clic su Aggiungi un ambito OAuth e inserisci:

    • chat:write
    • chat:write.public
  9. Vai alla parte superiore della pagina OAuth e autorizzazioni e fai clic su Installa app nello spazio di lavoro.

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

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

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

    Creare la funzione Cloud Run di Slack

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

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

    Vai a Servizi

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

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

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

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

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

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

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

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

  21. 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 in cui vuoi inviare le notifiche.
  22. Nel campo Punto di ingresso della funzione, inserisci il nome della funzione nel esempio di codice: send_slack_chat_notification.

  23. Fai clic su Salva ed esegui di nuovo il deployment. Se accanto al nome della funzione viene visualizzato un segno di spunta verde, significa che 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. Keep in mind:

  • Riceverai un messaggio di chat separato per ogni singolo risultato di gravità critica o alta. 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:

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

Testare le notifiche

Per verificare se le notifiche sono configurate correttamente, segui queste istruzioni per attivare e disattivare i risultati di gravità alta.

  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, scorri verso il basso fino alla sezione Gravità e seleziona Alta o Critica. Il riquadro Risultati della query sui risultati viene aggiornato per mostrare solo i risultati 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 Non attivo. Se la query sui risultati corrente mostra solo i risultati attivi, il risultato viene rimosso dai risultati della query.
  6. Nel riquadro Filtri rapidi, scorri verso il basso fino alla sezione Stato e modifica le selezioni in modo che sia selezionato solo Non attivo. Il riquadro Risultati della query sui risultati viene aggiornato per mostrare solo i risultati non attivi.
  7. Nel riquadro Risultati della query sui risultati, seleziona il risultato che hai contrassegnato come non attivo.
  8. Dal menu Modifica stato attivo nella barra delle azioni Risultati della query sui risultati, seleziona Attivo.
  9. Controlla i messaggi di Slack. Viene visualizzato un messaggio simile alle immagini seguenti:

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

Pulizia

Per evitare che al tuo Google Cloud account 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 Google Cloud console, 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.

Elimina 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 della tua organizzazione.

    Per mantenere la configurazione e mettere in pausa temporaneamente le notifiche, inserisci come commento 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 Account di servizio
    2. Seleziona un progetto.
    3. Seleziona il account di servizio che vuoi eliminare, quindi fai clic su Elimina .

Passaggi successivi