Raccogli i log di flusso VPC Google Cloud
Versione parser: 6.0
Questo documento spiega come importare i log di flusso VPC Google Cloud in Google Security Operations utilizzando Google Cloud Storage.
I log di flusso VPC registrano un campione di flussi di rete inviati e ricevuti dalle istanze VM, incluse quelle utilizzate come nodi Google Kubernetes Engine. Questi log possono essere utilizzati per monitoraggio della rete, analisi forense, analisi della sicurezza in tempo reale e ottimizzazione delle spese. I log di flusso vengono aggregati per connessione a intervalli configurabili ed esportati quasi in tempo reale tramite Cloud Logging. Un sink di Logging indirizza i log di flusso VPC a un bucket Cloud Storage, da cui Google SecOps li importa.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto Google Cloud con le seguenti API abilitate:
- API Cloud Storage
- API Cloud Logging
- API Compute Engine
- Autorizzazioni per:
- Abilita i log di flusso VPC sulle subnet
- Crea e gestisci i bucket Cloud Storage
- Gestisci le policy IAM sui bucket Cloud Storage
- Crea e gestisci i sink dell'API Cloud Logging
- Almeno una subnet VPC in cui vuoi abilitare i log di flusso VPC
Abilita i log di flusso VPC sulle subnet
Prima di configurare la pipeline di importazione, assicurati che i log di flusso VPC siano abilitati nelle subnet di destinazione. Google Cloud supporta due API per la gestione dei log di flusso VPC: l'API Network Management (consigliata) e l'API Compute Engine.
Utilizzo della console Google Cloud (API Network Management)
- Nella consoleGoogle Cloud , vai a Rete VPC > Reti VPC.
- Fai clic sulla scheda Subnet nel progetto attuale.
- Seleziona la subnet in cui vuoi abilitare i log di flusso.
- Fai clic su Gestisci log di flusso.
- Fai clic su Aggiungi nuova configurazione.
- Assegna un nome alla configurazione.
- Configura le seguenti impostazioni facoltative:
- Intervallo di aggregazione: seleziona l'intervallo di aggregazione (valore predefinito: 5 secondi). Intervalli più brevi forniscono dati più granulari, ma aumentano il volume dei log.
- Includi metadati: seleziona Includi tutti i metadati per includere i dettagli dell'istanza VM e del VPC.
- Frequenza di campionamento secondaria: imposta la frequenza di campionamento (valore predefinito: 100% per l'API di gestione della rete). Frequenze più elevate acquisiscono più flussi, ma aumentano il volume dei log.
- Espressione di filtro: espressione di filtro CEL facoltativa per includere o escludere flussi specifici (massimo 2048 caratteri).
- Fai clic su Salva.
Utilizzo dello strumento a riga di comando gcloud (API Network Management)
Utilizza la seguente sintassi:
gcloud network-management vpc-flow-logs-configs create <CONFIG_NAME> \ --location=global \ --subnet=projects/<PROJECT_ID>/regions/<REGION>/subnetworks/<SUBNET_NAME> \ --aggregation-interval=INTERVAL_5_SEC \ --metadata=INCLUDE_ALL_METADATA \ --flow-sampling=1.0
Sostituisci:
<CONFIG_NAME>: un nome descrittivo della configurazione (ad esempiovpc-flow-logs-config)<PROJECT_ID>: l'ID progetto Google Cloud<REGION>: la regione della subnet (ad esempious-central1)<SUBNET_NAME>: il nome della tua subnet
Utilizzo dello strumento a riga di comando gcloud (API Compute Engine)
Utilizza la seguente sintassi:
gcloud compute networks subnets update <SUBNET_NAME> \ --region=<REGION> \ --enable-flow-logs \ --logging-aggregation-interval=interval-5-sec \ --logging-metadata=include-all \ --logging-flow-sampling=0.5 \ --project=<PROJECT_ID>
Sostituisci:
<SUBNET_NAME>: il nome della tua subnet<REGION>: la regione della subnet (ad esempious-central1)<PROJECT_ID>: l'ID progetto Google Cloud
Crea un bucket Google Cloud Storage
- Vai alla consoleGoogle Cloud .
- Seleziona il progetto.
- 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 globalmente univoco (ad esempio vpc-flow-logs-bucket)Tipo di località Scegli in base alle tue esigenze (Regione, a due regioni, multiregionale) Località Seleziona la località (ad esempio us-central1)Classe di archiviazione Standard (consigliato per i log ad accesso frequente) Controllo degli accessi Uniforme (consigliato) Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o una policy di conservazione Fai clic su Crea.
Crea un sink di Logging per esportare i log di flusso VPC in GCS
Un sink di Logging instrada i log di flusso VPC da Logging al bucket Cloud Storage. Google SecOps importa quindi gli oggetti esportati dal bucket.
Crea il sink di log
- Nella consoleGoogle Cloud , vai a Logging > Router dei log.
- Fai clic su Crea sink.
- Fornisci i seguenti dettagli di configurazione:
- Nome sink: inserisci un nome descrittivo (ad esempio
vpc-flow-to-gcs). - Descrizione sink: inserisci
Route VPC Flow Logs to Cloud Storage for Google SecOps ingestion.
- 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 un bucket Cloud Storage: seleziona il bucket
vpc-flow-logs-bucket.
- Fai clic su Avanti.
Nella sezione Scegli i log da includere nel sink, inserisci il seguente filtro per acquisire i log di flusso VPC:
resource.type="gce_subnetwork" AND log_id("compute.googleapis.com/vpc_flows")resource.type="gce_subnetwork" AND log_id("compute.googleapis.com/vpc_flows") AND resource.labels.subnetwork_name="<SUBNET_NAME>"- Sostituisci
<SUBNET_NAME>con il nome della subnet di destinazione.
- Sostituisci
Fai clic su Avanti.
Rivedi la configurazione e fai clic su Crea sink.
Concedi al writer del sink l'autorizzazione in scrittura per il bucket
Dopo aver creato il sink, Logging gli assegna un account di servizio writer (l'identità writer). Concedi a questa identità l'autorizzazione per scrivere oggetti nel bucket.
- Vai a Logging > Router dei log.
- Individua il sink
vpc-flow-to-gcs, fai clic sul menu con tre puntini e seleziona Visualizza dettagli sink. - Copia il valore Identità writer (nel formato
serviceAccount:p<PROJECT_NUMBER>-<ID>@gcp-sa-logging.iam.gserviceaccount.com). - Vai a Cloud Storage > Bucket.
- Fai clic sul bucket
vpc-flow-logs-bucket. - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'identità writer del sink (senza il prefisso
serviceAccount:). - Assegna i ruoli: seleziona Storage Object Creator (
roles/storage.objectCreator).
- Aggiungi entità: incolla l'identità writer del sink (senza il prefisso
- Fai clic su Salva.
Verifica che i log vengano esportati
- Vai a Cloud Storage > Bucket.
- Fai clic sul bucket
vpc-flow-logs-bucket. - Attendi qualche minuto affinché il sink scriva i primi oggetti.
Verifica che sia stata creata una cartella denominata
compute.googleapis.com/vpc_flows/(o un percorso con data) e che contenga i file di log esportati.
Configura un feed in Google SecOps per importare i log di flusso VPC
- Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > 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 es.
GCP VPC Flow Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona GCP VPC Flow come Log type (Tipo di log).
Fai clic su Ottieni service account. Verrà visualizzato un indirizzo email univoco del account di servizio, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia l'indirizzo email. Lo utilizzerai nel prossimo passaggio.
Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URI bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://vpc-flow-logs-bucket/compute.googleapis.com/vpc_flows/- Sostituisci:
vpc-flow-logs-bucket: il nome del tuo bucket GCS.compute.googleapis.com/vpc_flows: prefisso/percorso della cartella facoltativo in cui il sink scrive i log (lascia vuoto per la directory principale).
- Sostituisci:
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 i file trasferiti: elimina i file dopo il trasferimento riuscito.
- Elimina i file trasferiti e le directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
Età massima del file (giorni): 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 di notizie 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 Storage Object Viewer nel bucket Cloud Storage.
- Vai a Cloud Storage > Bucket.
- Fai clic sul bucket
vpc-flow-logs-bucket. - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'indirizzo email del account di servizio Google SecOps.
- Assegna ruoli: seleziona Storage Object Viewer (
roles/storage.objectViewer).
Fai clic su Salva.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
_field |
additional.fields |
Unita |
textpayload_label |
additional.fields |
Unita |
tunnel_id_label |
additional.fields |
Unita |
description |
metadata.description |
Mappatura diretta |
timestamp |
metadata.event_timestamp |
Analizzato come ISO8601 |
ts |
metadata.event_timestamp |
Analizzato come ISO8601 |
event_type |
metadata.event_type |
Mappatura diretta |
product_event_type |
metadata.product_event_type |
Mappatura diretta |
product_log_id |
metadata.product_log_id |
Mappatura diretta |
product_name |
metadata.product_name |
Mappatura diretta |
product_version |
metadata.product_version |
Mappatura diretta |
vendor_name |
metadata.vendor_name |
Mappatura diretta |
ip_protocol_out |
network.ip_protocol |
Mappatura diretta |
jsonPayload.bytes_sent |
network.sent_bytes |
Rinominato/mappato |
jsonPayload.packets_sent |
network.sent_packets |
Rinominato/mappato |
principal.ip |
principal.asset.ip |
Unita |
target.ip |
principal.asset.ip |
Unita |
jsonPayload.src_instance.vm_name |
principal.hostname |
Mappatura diretta |
target.hostname |
principal.hostname |
Rinominato/mappato |
jsonPayload.connection.src_ip |
principal.ip |
Mappatura diretta |
target.ip |
principal.ip |
Unita |
jsonPayload.src_location.city |
principal.location.city |
Mappatura diretta |
target.location.city |
principal.location.city |
Rinominato/mappato |
jsonPayload.src_location.country |
principal.location.country_or_region |
Mappatura diretta |
target.location.country_or_region |
principal.location.country_or_region |
Rinominato/mappato |
jsonPayload.src_instance.region |
principal.location.name |
Mappatura diretta |
resource.labels.location |
principal.location.name |
Mappatura diretta |
target.location.name |
principal.location.name |
Rinominato/mappato |
jsonPayload.src_location.region |
principal.location.state |
Mappatura diretta |
target.location.state |
principal.location.state |
Rinominato/mappato |
jsonPayload.src_vpc.project_id |
principal.namespace |
Mappatura diretta |
jsonPayload.src_vpc.vpc_name |
principal.namespace |
Mappatura diretta |
target.namespace |
principal.namespace |
Rinominato/mappato |
jsonPayload.connection.src_port |
principal.port |
Mappatura diretta |
_field |
principal.resource.attribute.labels |
Unita |
key |
principal.resource.attribute.labels |
Mappatura: jsonPayload_src_google_service_type → _field |
src_gke_cluster_location |
principal.resource.attribute.labels |
Unita |
src_gke_cluster_name |
principal.resource.attribute.labels |
Unita |
src_gke_namespace |
principal.resource.attribute.labels |
Unita |
src_gke_pod_name |
principal.resource.attribute.labels |
Unita |
logName |
security_result.category_details |
Unita |
severity |
security_result.severity |
Mappatura: DEBUG → LOW |
principal.ip |
target.asset.ip |
Unita |
target.ip |
target.asset.ip |
Unita |
jsonPayload.dest_instance.vm_name |
target.hostname |
Mappatura diretta |
principal.hostname |
target.hostname |
Rinominato/mappato |
jsonPayload.connection.dest_ip |
target.ip |
Mappatura diretta |
principal.ip |
target.ip |
Unita |
jsonPayload.dest_location.city |
target.location.city |
Mappatura diretta |
principal.location.city |
target.location.city |
Rinominato/mappato |
jsonPayload.dest_location.country |
target.location.country_or_region |
Mappatura diretta |
principal.location.country_or_region |
target.location.country_or_region |
Rinominato/mappato |
jsonPayload.dest_instance.region |
target.location.name |
Mappatura diretta |
principal.location.name |
target.location.name |
Rinominato/mappato |
jsonPayload.dest_location.region |
target.location.state |
Mappatura diretta |
principal.location.state |
target.location.state |
Rinominato/mappato |
jsonPayload.dest_vpc.project_id |
target.namespace |
Mappatura diretta |
jsonPayload.dest_vpc.vpc_name |
target.namespace |
Mappatura diretta |
principal.namespace |
target.namespace |
Rinominato/mappato |
jsonPayload.connection.dest_port |
target.port |
Rinominato/mappato |
dest_gke_cluster_location |
target.resource.attribute.labels |
Unita |
dest_gke_cluster_name |
target.resource.attribute.labels |
Unita |
dest_gke_namespace |
target.resource.attribute.labels |
Unita |
dest_gke_pod_name |
target.resource.attribute.labels |
Unita |
service_name_label |
target.resource.attribute.labels |
Unita |
service_namespace_label |
target.resource.attribute.labels |
Unita |
subnetwork_id_field |
target.user.attribute.labels |
Unita |
| N/D | network.direction |
Costante: OUTBOUND |
| N/D | network.ip_protocol |
Costante: network.ip_protocol |
| N/D | network.sent_bytes |
Costante: network.sent_bytes |
| N/D | principal.hostname |
Costante: target.hostname |
| N/D | principal.location.city |
Costante: target.location.city |
| N/D | principal.location.country_or_region |
Costante: target.location.country_or_region |
| N/D | principal.location.name |
Costante: target.location.name |
| N/D | principal.location.state |
Costante: target.location.state |
| N/D | principal.namespace |
Costante: target.namespace |
| N/D | principal.port |
Costante: principal.port |
| N/D | security_result.severity |
Costante: LOW |
| N/D | target.hostname |
Costante: principal.hostname |
| N/D | target.location.city |
Costante: principal.location.city |
| N/D | target.location.country_or_region |
Costante: principal.location.country_or_re... |
| N/D | target.location.name |
Costante: principal.location.name |
| N/D | target.location.state |
Costante: principal.location.state |
| N/D | target.namespace |
Costante: principal.namespace |
| N/D | target.port |
Costante: -99 |
resource.labels.subnetwork_id |
target.user.attribute.labels |
Mappato dal log delle modifiche |
Log delle modifiche
Visualizza il log delle modifiche per questo parser
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.