Integra Pub/Sub con Google SecOps

Questo documento spiega come integrare Pub/Sub con Google Security Operations.

Casi d'uso

L'integrazione di Pub/Sub supporta i seguenti casi d'uso:

  • Importazione automatica degli avvisi: recupera continuamente log di sicurezza, avvisi e dati di telemetria pubblicati negli argomenti Pub/Sub per importarli in Google SecOps come casi.

  • Orchestration della sicurezza centralizzata: consolida il routing degli eventi di sicurezza tramite Pub/Sub dai sistemi cloud e di terze parti per attivare playbook di risposta automatizzati.

Prima di iniziare

Prima di configurare l'integrazione di Pub/Sub in Google SecOps, completa i seguenti passaggi preliminari:

  1. Crea un account di servizio.

  2. Concedi i ruoli Identity and Access Management necessari al tuo service account.

  3. Scegli e configura uno dei seguenti metodi di autenticazione:

    • Opzione 1: Workload Identity (consigliata): questo metodo utilizza token di breve durata tramite la simulazione dell'identità dei account di servizio.

    • Opzione 2: chiave JSON del service account. Questo metodo si basa su un file di chiave secret statico e di lunga durata.

Crea un account di servizio

  1. Nella console Google Cloud , vai a IAM e amministrazione > Account di servizio.

    Vai a Service account

  2. Fai clic su addCrea service account.

  3. Fornisci un nome e una descrizione, quindi fai clic su Fine. Prendi nota dell'indirizzo email del service account.

Concedi ruoli IAM

La concessione delle autorizzazioni consente all'integrazione di visualizzare ed estrarre i messaggi dalle tue sottoscrizioni. Per assegnare il ruolo standard, completa i seguenti passaggi:

  1. Nella console Google Cloud , vai a IAM.

    Vai a IAM

  2. Individua il tuo account di servizio e fai clic su Modifica entità (edit).

  3. Fai clic su Aggiungi un altro ruolo e seleziona Pub/Sub Viewer (roles/pubsub.viewer).

  4. Fai clic su Salva.

Configura le credenziali di Workload Identity

Workload Identity è l'approccio consigliato perché utilizza token di accesso di breve durata tramite la simulazione dell'identità dei account di servizio.

Identifica l'identità univoca dell'istanza

Per stabilire una connessione, devi concedere alla tua istanza Google SecOps l'autorizzazione per simulare l'identità del tuo account di servizio.

  1. In Google SecOps, vai a Content Hub > Integrazioni di risposta.

  2. Seleziona l'integrazione Pub/Sub e inserisci l'indirizzo email del service account in Email Workload Identity.

  3. Fai clic su Salva > Verifica. Il test dovrebbe non riuscire.

  4. Fai clic su close_small accanto al pulsante Test e individua l'email di identità che inizia con gke-init-python@... o soar-python@....

  5. Copia questo indirizzo email univoco.

Autorizza l'identità dell'istanza in Google Cloud

  1. Nella console Google Cloud , vai a IAM e amministrazione > Account di servizio.

    Vai a Service account

  2. Seleziona il account di servizio di destinazione e vai a Autorizzazioni > Concedi l'accesso.

  3. Incolla l'indirizzo email univoco in Nuove entità e assegna il ruolo Creatore token account di servizio (roles/iam.serviceAccountTokenCreator).

Concedi l'accesso al progetto di quota

L'autenticazione con Workload Identity richiede un Quota Project ID per monitorare l'utilizzo e la fatturazione delle API.

  1. Nella console Google Cloud , vai a IAM per il progetto utilizzato come progetto di quota.

    Vai a IAM

  2. Trova il tuo account di servizio e fai clic su Modifica entità (edit).

  3. Fai clic su Aggiungi un altro ruolo e seleziona Service Usage Consumer (roles/serviceusage.serviceUsageConsumer).

  4. Fai clic su Salva.

Configura una chiave JSON

I file di chiavi secret statici e di lunga durata richiedono la rotazione manuale. Utilizza questo metodo solo se l'autenticazione di Workload Identity non è disponibile.

  1. Nella console Google Cloud , vai a IAM e amministrazione > Account di servizio e seleziona il tuo service account.

    Vai a Service account

  2. Vai alla scheda Chiavi e fai clic su Aggiungi chiave > Crea nuova chiave.

  3. Seleziona JSON e fai clic su Crea. Il browser scarica il file JSON sul tuo computer.

Parametri di integrazione

L'integrazione di Pub/Sub richiede i seguenti parametri:

Parametro Descrizione
Workload Identity Email

Facoltativo.

L'indirizzo email client del tuo account di servizio.

Configura questo parametro solo se esegui l'autenticazione utilizzando Workload Identity. Se configurato, devi anche fornire un Quota Project ID e Service Account JSON File Content viene ignorato.

Service Account JSON File Content

Facoltativo.

I contenuti completi del file JSON della chiave del account di servizio.

Configura questo parametro per l'autenticazione della chiave del account di servizio.

Quota Project ID

Facoltativo.

L'ID progetto utilizzato per l'utilizzo e la fatturazione dell'API.

Questo parametro è obbligatorio quando si utilizza l'autenticazione Workload Identity.

Se non viene fornito alcun valore, l'integrazione recupera l'ID dalle credenziali dell'account di servizio.

Project ID

Facoltativo.

L'ID progetto da scegliere come target in Pub/Sub.

Se non viene fornito alcun valore, l'integrazione recupera l'ID dalle credenziali dell'account di servizio.

Verify SSL

Obbligatorio.

Convalida il certificato SSL per la connessione al server. Abilitato per impostazione predefinita.

Per istruzioni su come configurare un'integrazione in Google SecOps, consulta Configura le integrazioni.

Se necessario, puoi apportare modifiche in un secondo momento. Dopo aver configurato un'istanza di integrazione, puoi utilizzarla nei playbook. Per saperne di più su come configurare e supportare più istanze, consulta Supporto di più istanze.

Azioni

Per saperne di più sulle azioni, consulta Rispondi alle azioni in attesa dalla scrivania di lavoro ed Esegui un'azione manuale nel tuo caso.

Dindin

Utilizza l'azione Ping per testare la connettività a Pub/Sub.

Questa azione non viene eseguita sulle entità Google SecOps.

Input azione

Nessuno.

Output azione

L'azione Ping fornisce i seguenti output:

Tipo di output dell'azione Disponibilità
Allegato della bacheca richieste Non disponibile
Link alla bacheca casi Non disponibile
Tabella della bacheca casi Non disponibile
Tabella di arricchimento Non disponibile
Risultato JSON Non disponibile
Messaggi di output Disponibile
Risultato dello script Disponibile
Messaggi di output

L'azione Ping può restituire i seguenti messaggi di output:

Messaggio di output Descrizione del messaggio
Successfully connected to the Pub/Sub server with the provided connection parameters! L'azione è andata a buon fine.
Failed to connect to the Pub/Sub server! Error is ERROR_REASON

L'azione non è andata a buon fine.

Controlla la connessione al server, i parametri di input o le credenziali.

Risultato dello script

La tabella seguente elenca il valore per l'output del risultato dello script quando utilizzi l'azione Ping:

Nome del risultato dello script Valore
is_success True o False

Connettori

Per istruzioni dettagliate su come configurare un connettore in Google SecOps, consulta Importa i dati (connettori).

Pub/Sub – Connettore dei messaggi

Nella piattaforma Google SecOps, il connettore Pub/Sub - Messaggi è chiamato connettore Pub/Sub - Messaggi.

Utilizza il connettore Pub/Sub - Messaggi per recuperare i messaggi da Pub/Sub.

Mappatura della gravità JSON

Per mappare la gravità dell'avviso, devi specificare quale campo viene utilizzato dal connettore Pub/Sub – Messages per ottenere il valore della gravità nel parametro Severity Mapping JSON. La risposta del connettore può contenere tipi di valori, come integer, float e string.

Il connettore Pub/Sub - Messaggi legge i valori integer e float e li mappa in base alle impostazioni di Google SecOps. La tabella seguente mostra la mappatura dei valori integer alla gravità in Google SecOps:

Valore Integer Gravità mappata
100 Critical
Da 80 a 100 High
Da 60 a 80 Medium
Da 40 a 60 Low
Meno di 40 Informational

Se la risposta contiene il valore string, il connettore Pub/Sub - Messaggi richiede una configurazione aggiuntiva.

Inizialmente, il valore predefinito viene visualizzato come segue:

{
    "Default": 60
}

Se i valori richiesti per la mappatura si trovano nella chiave JSON event_severity, i valori possono essere i seguenti:

  • "Malicious"
  • "Benign"
  • "Unknown"

Per analizzare i valori delle chiavi JSON event_severity e assicurarti che l'oggetto JSON abbia un formato corretto, configura il parametro Severity Mapping JSON come segue:

{
    "event_severity": {
        "Malicious": 100,
        "Unknown": 60,
        "Benign": -1
    },
    "Default": 50
}

Il valore "Default" è obbligatorio.

Nel caso in cui siano presenti più corrispondenze per lo stesso oggetto JSON, il connettore Pub/Sub - Messaggi dà la priorità alla prima chiave dell'oggetto JSON.

Per utilizzare i campi che contengono valori integer o float, configura la chiave e una stringa vuota nel parametro Severity Mapping JSON:

{
  "Default":"60",
  "integer_field": "",
  "float_field": ""
}

Input del connettore

Il connettore Pub/Sub - Messaggi richiede i seguenti parametri:

Parametro Descrizione
Product Field Name Obbligatorio

Il nome del campo in cui è memorizzato il nome del prodotto.

Il valore predefinito è Product Name.

Event Field Name Obbligatorio

Il nome del campo utilizzato per determinare il nome evento (sottotipo).

Il valore predefinito è event_type.

Environment Field Name Optional

Il nome del campo in cui è memorizzato il nome dell'ambiente.

Se il campo dell'ambiente non viene trovato, l'ambiente viene impostato su quello predefinito.

Il valore predefinito è "".

Environment Regex Pattern Optional

Un pattern di espressione regolare da eseguire sul valore trovato nel campo Environment Field Name. Questo parametro consente di manipolare il campo dell'ambiente utilizzando la logica delle espressioni regolari.

Utilizza il valore predefinito .* per recuperare il valore Environment Field Name non elaborato richiesto.

Se il pattern dell'espressione regolare è null o vuoto o se il valore dell'ambiente è null, il risultato finale dell'ambiente è l'ambiente predefinito.

PythonProcessTimeout Obbligatorio

Il limite di timeout in secondi per il processo Python che esegue lo script corrente.

Il valore predefinito è 60.

Service Account JSON File Content Optional

Il contenuto del file JSON della chiave del account di servizio.

Puoi configurare questo parametro o il parametro Workload Identity Email.

Per configurare questo parametro, fornisci i contenuti completi del file JSON della chiave dell'account di servizio che hai scaricato durante la creazione di un account di servizio.

Per il connettore Pub/Sub – Messages, l'autenticazione con il file JSON della chiave del account di servizio ha la priorità sulla federazione delle identità per i workload.

Workload Identity Email Optional

L'indirizzo email client del tuo account di servizio.

Puoi configurare questo parametro o il parametro Service Account JSON File Content.

Per simulare l'identità dei service account con la federazione delle identità per i workload, concedi il ruolo Service Account Token Creator al tuo account di servizio.

Project ID Optional

L'ID progetto da utilizzare nel connettore.

Quota Project ID Optional

L'ID progetto Google Cloud che utilizzi per le API Google Cloud e la fatturazione. Questo parametro richiede di concedere il ruolo Service Usage Consumer al account di servizio. Per saperne di più sui ruoli IAM, consulta Controllo dell'accesso con IAM.

L'integrazione associa questo valore parametro a tutte le richieste API.

Subscription ID Obbligatorio

L'ID sottoscrizione Pub/Sub.

Case Name Template Optional

Un nome personalizzato per la richiesta.

Quando configuri questo parametro, il connettore aggiunge una nuova chiave denominata custom_case_name all'evento Google SecOps.

Puoi fornire segnaposto nel seguente formato: [name of the field].

Esempio: Phishing - [event_mailbox]

Per i segnaposto, il connettore utilizza il primo evento Google SecOps. Il connettore gestisce solo le chiavi contenenti il valore stringa. Per configurare questo parametro, specifica i campi evento senza prefissi.

Alert Name Template Obbligatorio

Un nome per l'avviso personalizzato.

Puoi fornire segnaposto nel seguente formato: [name of the field].

Esempio: Phishing - [event_mailbox].

Per i segnaposto, il connettore utilizza il primo evento Google SecOps. Il connettore gestisce solo le chiavi contenenti il valore della stringa. Se non fornisci alcun valore o utilizzi un modello non valido, il connettore utilizza un valore di riserva nel seguente formato: CONNECTOR_NAME - Alert. Per configurare questo parametro, specifica i campi evento senza prefissi.

Rule Generator Template Obbligatorio

Un generatore di regole personalizzate.

Puoi fornire segnaposto nel seguente formato: [name of the field].

Esempio: Phishing - [event_mailbox].

Per i segnaposto, il connettore utilizza il primo evento Google SecOps. Il connettore gestisce solo le chiavi contenenti il valore stringa. Se non fornisci alcun valore o utilizzi un modello non valido, il connettore utilizza un valore di riserva nel seguente formato: CONNECTOR_NAME - Rule Generator. Per configurare questo parametro, specifica i campi degli eventi senza prefissi.

Timestamp Field Obbligatorio

Il nome del campo per definire il timestamp dell'avviso di Google SecOps.

Se il timestamp non utilizza il formato dell'epoca di Unix, definisci il formato del timestamp nel parametro Timestamp Format.

Il valore predefinito è message_publishTime.

Timestamp Format Optional

Il formato del timestamp del messaggio.

Il connettore richiede il timestamp per elaborare correttamente il messaggio. Se il timestamp non utilizza il formato dell'epoca di Unix e non configuri un formato del timestamp, il connettore non funziona.

Il valore predefinito è %Y-%m-%dT%H:%M:%S.%fZ.

Severity Mapping JSON Obbligatorio

L'oggetto JSON che definisce il modo in cui il connettore estrae il livello di gravità dal messaggio.

Il valore predefinito è il seguente:

    {
      "Default": "60"
    }
    

Per saperne di più sulla mappatura della gravità, consulta Mappatura della gravità JSON.

Unique ID Field Optional

Il nome del campo per confermare che il messaggio è univoco. Puoi utilizzare la parola chiave riservata pubsub_message_id per estrarre l'ID messaggio Pub/Sub nativo. Se non imposti un valore o se il campo non viene trovato, il connettore genera un hash SHA-256 e lo utilizza come identificatore del messaggio.

Max Messages To Fetch Obbligatorio

Il numero massimo di messaggi da elaborare per ogni iterazione del connettore.

Il valore predefinito è 100.

Disable Overflow Optional

Se selezionata, il connettore ignora il meccanismo di overflow di Google SecOps durante la creazione degli avvisi.

Questo tipo di annuncio sarà selezionato per impostazione predefinita.

Verify SSL Obbligatorio

Se selezionata, l'integrazione verifica che il certificato SSL per la connessione a Pub/Sub sia valido.

Questo tipo di annuncio sarà selezionato per impostazione predefinita.

Proxy Server Address Optional

L'indirizzo del server proxy da utilizzare.

Proxy Username Optional

Il nome utente del proxy con cui eseguire l'autenticazione.

Proxy Password Optional

La password del proxy con cui eseguire l'autenticazione.

Regole del connettore

Il connettore Pub/Sub - Messaggi supporta i proxy.

Eventi del connettore

L'esempio seguente mostra l'output JSON di un evento Google SecOps generato dal connettore Pub/Sub - Messaggi:

{
   "notificationConfigName": "organizations/ORGANIZATION_ID/notificationConfigs/soar_connector_toxic_notifications_config",
   "finding": {
       "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID",
       "parent": "organizations/ORGANIZATION_ID/sources/SOURCE_ID",
       "resourceName": "//compute.googleapis.com/projects/PROJECT_ID/global/firewalls/FIREWALL_ID",
       "state": "ACTIVE",
       "category": "OPEN_NETBIOS_PORT",
       "externalUri": "https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
       "sourceProperties": {
           "Recommendation": "Restrict the firewall rules at: https://console.cloud.google.com/networking/firewalls/details/default-allow-rdp?project\u003dPROJECT_ID",
           "ExceptionInstructions": "Add the security mark \"allow_open_netbios_port\" to the asset with a value of \"true\" to prevent this finding from being activated again.",
           "Explanation": "Firewall rules that allow connections from all IP addresses on TCP ports 137-139 or UDP ports 137-139 may expose NetBIOS services to attackers.",
           "ScannerName": "FIREWALL_SCANNER",
           "ResourcePath": [
               "projects/PROJECT_ID/",
               "folders/FOLDER_ID/",
               "folders/FOLDER_ID/",
               "organizations/ORGANIZATION_ID/"
           ],
           "ExposedService": "NetBIOS",
           "OpenPorts": {
               "TCP": [
                   137.0,
                   138.0,
                   139.0
               ],
               "UDP": [
                   137.0,
                   138.0,
                   139.0
               ]
           },
           "compliance_standards": {
               "iso": [
                   {
                       "ids": [
                           "A.13.1.1"
                       ]
                   }
               ],
               "pci": [
                   {
                       "ids": [
                           "1.2.1"
                       ]
                   }
               ],
               "nist": [
                   {
                       "ids": [
                           "SC-7"
                       ]
                   }
               ]
           },
           "ReactivationCount": 4.0
       },
       "securityMarks": {
           "name": "organizations/ORGANIZATION_ID/sources/SOURCE_ID/findings/FINDING_ID/securityMarks",
           "marks": {
               "peter": "e2e1"
           }
       },
       "eventTime": "2024-08-30T14:44:37.973090Z",
       "createTime": "2024-06-24T07:08:54.777Z",
       "propertyDataTypes": {
           "ResourcePath": {
               "listValues": {
                   "propertyDataTypes": [
                       {
                           "primitiveDataType": "STRING"
                       }
                   ]
               }
           },
           "ReactivationCount": {
               "primitiveDataType": "NUMBER"
           },
           "Explanation": {
               "primitiveDataType": "STRING"
           },
           "ExposedService": {
               "primitiveDataType": "STRING"
           },
           "ScannerName": {
               "primitiveDataType": "STRING"
           }
       }
   }
}

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.