Raccogliere i log di Google Cloud Secure Web Proxy

Supportato in:

Questo documento spiega come importare i log di Google Cloud Secure Web Proxy in Google Security Operations utilizzando Google Cloud Storage V2.

Secure Web Proxy è un servizio cloud-first che ti aiuta a proteggere il traffico web in uscita (HTTP e HTTPS). Fornisce una soluzione proxy gestita che consente policy flessibili e granulari basate su identità cloud-first e applicazioni web. Secure Web Proxy identifica il traffico non conforme ai criteri e lo registra in Cloud Logging, consentendoti di monitorare l'utilizzo di internet, scoprire le minacce alla tua rete e rispondere agli incidenti di sicurezza.

Prima di iniziare

Assicurati di disporre dei seguenti prerequisiti:

  • Un'istanza Google SecOps
  • Un progetto Google Cloud con l'API Cloud Storage abilitata
  • Autorizzazioni per creare e gestire bucket GCS
  • Autorizzazioni per gestire le policy IAM nei bucket GCS
  • Secure Web Proxy è attivo e configurato nel tuo ambiente Google Cloud
  • Accesso privilegiato a Google Cloud e autorizzazioni appropriate per accedere ai log di Secure Web Proxy
  • Autorizzazioni per creare e gestire i sink di Cloud Logging

Creazione di un bucket Google Cloud Storage

Utilizzo di Google Cloud Console

  1. Vai alla console Google Cloud.
  2. Seleziona il tuo progetto o creane uno nuovo.
  3. Nel menu di navigazione, vai a Cloud Storage > Bucket.
  4. Fai clic su Crea bucket.
  5. Fornisci i seguenti dettagli di configurazione:

    Impostazione Valore
    Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio Google Cloud-swp-logs).
    Tipo di località Scegli in base alle tue esigenze (regione singola, doppia regione, più regioni)
    Località Seleziona la posizione (ad esempio, us-central1).
    Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente)
    Controllo dell'accesso Uniforme (consigliato)
    Strumenti di protezione (Facoltativo) Attiva il controllo delle versioni degli oggetti o la policy di conservazione
  6. Fai clic su Crea.

Utilizzo dello strumento a riga di comando gcloud

  • In alternativa, crea un bucket utilizzando il comando gcloud:

    gcloud storage buckets create gs://gcp-swp-logs \
        --location=us-central1 \
        --default-storage-class=STANDARD
    
    • Sostituisci:
      • gcp-swp-logs: il nome del bucket che preferisci (univoco a livello globale).
      • us-central1: la regione che preferisci (ad esempio, us-central1, europe-west1).

Configura Cloud Logging per esportare i log di Secure Web Proxy in GCS

Secure Web Proxy registra automaticamente i log delle transazioni proxy in Cloud Logging. Per esportare questi log in Cloud Storage, devi creare un sink Cloud Logging.

Utilizzo di Google Cloud Console

  1. Nella console Google Cloud, vai a Logging > Log Router.
  2. Fai clic su Crea sink.
  3. Fornisci i seguenti dettagli di configurazione:
    • Nome sink: inserisci un nome descrittivo, ad esempio swp-export-sink.
    • Descrizione sink: descrizione facoltativa.
  4. Fai clic su Avanti.
  5. Nella sezione Seleziona il servizio sink:
    • Servizio sink: seleziona Bucket Cloud Storage.
    • Seleziona bucket Cloud Storage: seleziona gcp-swp-logs dal menu a discesa.
  6. Fai clic su Avanti.
  7. Nella sezione Scegli i log da includere nel sink, inserisci la seguente query di filtro:

    logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"
    
    • Sostituisci <YOUR_PROJECT_ID> con l'ID del tuo progetto Google Cloud.
  8. Fai clic su Avanti.

  9. Rivedi la configurazione e fai clic su Crea sink.

Dopo aver creato il sink, Cloud Logging mostrerà l'identità del writer del sink (un indirizzo email dell'account di servizio). Copia l'indirizzo email di questo account di servizio per il passaggio successivo.

Utilizzo dello strumento a riga di comando gcloud

  • In alternativa, crea un sink utilizzando il comando gcloud:

    gcloud logging sinks create swp-export-sink \
        storage.googleapis.com/gcp-swp-logs \
        --log-filter='logName="projects/<YOUR_PROJECT_ID>/logs/networkservices.googleapis.com/gateway_requests"'
    
    • Sostituisci:
      • swp-export-sink: il nome del sink che preferisci.
      • gcp-swp-logs: il nome del bucket GCS.
      • <YOUR_PROJECT_ID>: l'ID del tuo progetto Google Cloud.

Concedi le autorizzazioni al account di servizio Cloud Logging

Il account di servizio dell'identità del writer sink di Cloud Logging deve disporre delle autorizzazioni per scrivere i log nel bucket GCS.

Utilizzo di Google Cloud Console

  1. Vai a Cloud Storage > Bucket.
  2. Fai clic sul nome del bucket (gcp-swp-logs).
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:
    • Aggiungi entità: incolla l'email del account di servizio dell'identità di scrittura del sink Cloud Logging (ad esempio, serviceAccount:service-123456789@gcp-sa-logging.iam.gserviceaccount.com).
    • Assegna i ruoli: seleziona Storage Object Admin.
  6. Fai clic su Salva.

Utilizzo dello strumento a riga di comando gcloud

  • In alternativa, concedi le autorizzazioni utilizzando il comando gcloud:

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectAdmin"
    
    • Sostituisci:
      • gcp-swp-logs: il nome del bucket.
      • <LOGGING_SERVICE_ACCOUNT_EMAIL>: l'indirizzo email del account di servizio dell'identità di scrittura del sink Cloud Logging.

Utilizzo dello strumento a riga di comando gsutil (legacy)

  • Assegna il ruolo Amministratore oggetti al tuo account di servizio Logging:

    gsutil iam ch serviceAccount:<LOGGING_SERVICE_ACCOUNT_EMAIL>:objectAdmin \
        gs://gcp-swp-logs
    

Verifica le autorizzazioni

  • Per verificare che le autorizzazioni siano state concesse correttamente:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectAdmin"
    

Nell'output dovrebbe essere visualizzato l'indirizzo email del account di servizio Cloud Logging.

Recuperare il account di servizio Google SecOps

Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo account di servizio l'accesso al tuo bucket.

Configura un feed in Google SecOps per importare i log di GCP Secure Web Proxy

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, GGoogle CloudCP Secure Web Proxy Logs).
  5. Seleziona Google Cloud Storage V2 come Tipo di origine.
  6. Seleziona GCP Secure Web Proxy come Tipo di log.

  7. Fai clic su Ottieni service account. Verrà visualizzata un'email univoca del account di servizio, ad esempio:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copia questo indirizzo email per utilizzarlo nel passaggio successivo.

  9. Fai clic su Avanti.

  10. Specifica i valori per i seguenti parametri di input:

    • URL del bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
    gs://gcp-swp-logs/
    
    • Sostituisci:
      • gcp-swp-logs: il nome del bucket GCS.
    • Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:

      • Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
      • Elimina file trasferiti: elimina i file dopo il trasferimento riuscito.
      • Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.

    • Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.

    • Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.

    • Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.

  11. Fai clic su Avanti.

  12. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Concedi le autorizzazioni IAM al account di servizio Google SecOps

Il account di servizio Google SecOps deve avere il ruolo Visualizzatore oggetti Storage nel bucket GCS.

Utilizzo di Google Cloud Console

  1. Vai a Cloud Storage > Bucket.
  2. Fai clic sul nome del bucket.
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:
    • Aggiungi entità: incolla l'email del account di servizio Google SecOps.
    • Assegna i ruoli: seleziona Visualizzatore oggetti Storage.
  6. Fai clic su Salva.

Utilizzo dello strumento a riga di comando gcloud

  • In alternativa, concedi le autorizzazioni utilizzando il comando gcloud:

    gcloud storage buckets add-iam-policy-binding gs://gcp-swp-logs \
        --member="serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>" \
        --role="roles/storage.objectViewer"
    
    • Sostituisci:
      • gcp-swp-logs: il nome del bucket.
      • <SECOPS_SERVICE_ACCOUNT_EMAIL>: l'email del account di servizio Google SecOps.

Utilizzo dello strumento a riga di comando gsutil (legacy)

  • Esegui questo comando per concedere all'account di servizio SecOps le autorizzazioni di visualizzatore oggetti:

    gsutil iam ch serviceAccount:<SECOPS_SERVICE_ACCOUNT_EMAIL>:objectViewer \
        gs://gcp-swp-logs
    

Verifica le autorizzazioni

  • Per verificare che le autorizzazioni siano state concesse correttamente:

    gcloud storage buckets get-iam-policy gs://gcp-swp-logs \
        --flatten="bindings[].members" \
        --filter="bindings.role:roles/storage.objectViewer"
    

Nell'output dovrebbe essere visualizzato l'indirizzo email del account di servizio Google SecOps.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
httpRequest.latency, jsonPayload.@type, logName additional.fields Unito a latency_label (chiave "HTTPRequest Latency", valore da latency), type_label (chiave "Log Type", valore da @type), logname (chiave "Log Name", valore da logName)
receiveTimestamp metadata.collected_timestamp Analizzato come timestamp RFC3339
metadata.event_type Impostato su NETWORK_HTTP se has_principal è true, has_target è true, il protocollo corrisponde a (?i)http; NETWORK_CONNECTION se has_principal è true, has_target è true, network != ""; USER_LOGIN se has_principal è true, has_target è true, has_principal_user è true; STATUS_UPDATE se has_principal è true; GENERIC_EVENT altrimenti
insertId metadata.product_log_id Valore copiato direttamente
httpRequest.protocol network.application_protocol Protocollo estratto utilizzando il pattern grok %{DATA:protocol}/%{INT:http_version}, impostato se in ["HTTP","HTTPS"]
httpRequest.protocol network.application_protocol_version Estratta http_version utilizzando il pattern grok %{DATA:protocol}/%{INT:http_version}
httpRequest.requestMethod network.http.method Valore copiato direttamente
httpRequest.userAgent network.http.parsed_user_agent Valore copiato direttamente, convertito in parseduseragent
httpRequest.status network.http.response_code Convertito in stringa, poi in numero intero
httpRequest.userAgent network.http.user_agent Valore copiato direttamente
httpRequest.responseSize network.received_bytes Valore copiato direttamente, convertito in uinteger
httpRequest.requestSize network.sent_bytes Valore copiato direttamente, convertito in uinteger
httpRequest.serverIp principal.asset.ip IP estratto utilizzando il pattern grok %{IP:server_ip}, impostato se non è vuoto
httpRequest.serverIp principal.ip IP estratto utilizzando il pattern grok %{IP:server_ip}, impostato se non è vuoto
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action Imposta su ALLOW se rule.action == ALLOW, BLOCK se rule.action == DENIED
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].action security_result.action_details Valore copiato direttamente da rule.action
jsonPayload.enforcedGatewaySecurityPolicy.requestWasTlsIntercepted, resource.labels.gateway_name, resource.labels.resource_container, resource.labels.gateway_type security_result.detection_fields Unito a tls_intercepted_label (chiave "requestWasTlsIntercepted", valore da requestWasTlsIntercepted), gateway_name_label (chiave "gateway-name", valore da gateway_name), resource_container_label (chiave "resource_container", valore da resource_container), gateway_type_label (chiave "gateway-type", valore da gateway_type)
jsonPayload.enforcedGatewaySecurityPolicy.matchedRules[].name security_result.rule_name Valore copiato direttamente
gravità security_result.severity Imposta su CRITICAL se severity == CRITICAL; ERROR se severity == ERROR; HIGH se severity in [ALERT, EMERGENCY]; INFORMATIONAL se severity in [INFO, NOTICE]; LOW se severity == DEBUG; MEDIUM se severity == WARNING; UNKNOWN_SEVERITY altrimenti
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.asset.hostname Valore copiato direttamente
httpRequest.remoteIp target.asset.ip IP estratto utilizzando il pattern grok %{IP:remote_ip}, impostato se non è vuoto
jsonPayload.enforcedGatewaySecurityPolicy.hostname target.hostname Valore copiato direttamente
httpRequest.remoteIp target.ip IP estratto utilizzando il pattern grok %{IP:remote_ip}, impostato se non è vuoto
resource.labels.location target.resource.attribute.cloud.availability_zone Valore copiato direttamente
resource.labels.network_name, resource.type target.resource.attribute.labels Unito a rc_network_name_label (chiave "rc_network_name", valore da network_name), resource_type (chiave "Resource Type", valore da resource.type)
httpRequest.requestUrl target.url Valore copiato direttamente

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