Raccogliere i log di Google Cloud Secure Web Proxy
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
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
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 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).
- Sostituisci:
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
- Nella console Google Cloud, vai a Logging > Log Router.
- Fai clic su Crea sink.
- Fornisci i seguenti dettagli di configurazione:
- Nome sink: inserisci un nome descrittivo, ad esempio
swp-export-sink. - Descrizione sink: descrizione facoltativa.
- Nome sink: inserisci un nome descrittivo, ad esempio
- Fai clic su Avanti.
- Nella sezione Seleziona il servizio sink:
- Servizio sink: seleziona Bucket Cloud Storage.
- Seleziona bucket Cloud Storage: seleziona
gcp-swp-logsdal menu a discesa.
- Fai clic su Avanti.
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.
- Sostituisci
Fai clic su Avanti.
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.
- Sostituisci:
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
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (
gcp-swp-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- 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.
- Aggiungi entità: incolla l'email del account di servizio dell'identità di scrittura del sink Cloud Logging (ad esempio,
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.
- Sostituisci:
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
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad esempio,
GGoogle CloudCP Secure Web Proxy Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
Seleziona GCP Secure Web Proxy come Tipo di log.
Fai clic su Ottieni service account. Verrà visualizzata un'email univoca del account di servizio, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia questo indirizzo email per utilizzarlo nel passaggio successivo.
Fai clic su Avanti.
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.
Fai clic su Avanti.
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
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket.
- Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps.
- Assegna i ruoli: seleziona Visualizzatore oggetti Storage.
- 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.
- Sostituisci:
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.