Raccogli i log di Google Cloud Compute
Versione parser: 2.0
Questo documento spiega come configurare l'esportazione dei log di Google Cloud Compute in Google Security Operations utilizzando Cloud Storage. Il parser estrae i campi, normalizza il campo del messaggio e mappa i dati estratti allo schema Unified Data Model (UDM) per una rappresentazione coerente degli eventi di sicurezza. Gestisce vari formati di log, tra cui messaggi simili a syslog e coppie chiave-valore, e classifica gli eventi in base ai campi estratti, come type e action.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Istanza Google SecOps.
- Compute è configurato e attivo nel tuo ambiente Google Cloud .
- Accesso privilegiato a Google Cloud.
Crea un bucket Google Cloud Storage
- Accedi alla consoleGoogle Cloud .
Vai alla pagina Bucket Cloud Storage.
Fai clic su Crea.
Nella pagina Crea un bucket, inserisci le informazioni del bucket. Dopo ciascuno dei seguenti passaggi, fai clic su Continua per procedere con il passaggio successivo:
Nella sezione Inizia, segui questi passaggi:
- Inserisci un nome univoco che soddisfi i requisiti per i nomi dei bucket, ad esempio compute-logs.
Per abilitare lo spazio dei nomi gerarchico, fai clic sulla freccia di espansione per espandere la sezione Ottimizza per workload orientati ai file e con uso intensivo dei dati, quindi seleziona Abilita uno spazio dei nomi gerarchico in questo bucket.
- Per aggiungere un'etichetta del bucket, fai clic sulla freccia di espansione per espandere la sezione Etichette.
- Fai clic su Aggiungi etichetta e specifica una chiave e un valore per l'etichetta.
Nella sezione Scegli dove archiviare i tuoi dati, segui questi passaggi:
Seleziona un Tipo di località.
- Utilizza il menu Tipo di località per selezionare una Località in cui i dati degli oggetti all'interno del bucket verranno archiviati in modo permanente.
- Per configurare la replica tra bucket, espandi la sezione Configura la replica tra bucket.
Nella sezione Scegli una classe di archiviazione per i tuoi dati, seleziona una classe di archiviazione predefinita per il bucket o seleziona Autoclass per la gestione automatica della classe di archiviazione dei dati del bucket.
Nella sezione Scegli come controllare l'accesso agli oggetti, seleziona non per applicare la prevenzione dell'accesso pubblico e seleziona un modello di controllo degli accessi per gli oggetti del bucket.
Nella sezione Scegli come proteggere i dati degli oggetti, segui questi passaggi:
- Seleziona una delle opzioni in Protezione dei dati che vuoi impostare per il bucket.
- Per scegliere come criptare i dati degli oggetti, fai clic sulla freccia di espansione con l'etichetta Crittografia dei dati e seleziona un Metodo di crittografia dei dati.
Fai clic su Crea.
Configura l'esportazione dei log di Google Cloud Compute
- Nella console Google Cloud, vai a Logging > Router dei log.
- Fai clic su Crea sink.
- Fornisci i seguenti dettagli di configurazione:
- Nome sink: inserisci un nome significativo (ad esempio
Compute-Logs-Sink). - Destinazione sink: seleziona Cloud Storage.
- Bucket Cloud Storage: inserisci l'URI del bucket (ad esempio
gs://compute-logs/compute-logs/).
- Nome sink: inserisci un nome significativo (ad esempio
Nella sezione Crea filtro di inclusione, configura il filtro di log per acquisire i log di Google Cloud Compute utilizzando uno o più dei seguenti pattern:
Filtro per tipo di risorsa (obbligatorio, scegline uno):
Solo per i log delle istanze VM :
resource.type="gce_instance"Per tutte le risorse relative a GCE (istanze VM, subnet, firewall):
resource.type=("gce_instance" OR "gce_subnetwork" OR "gce_network" OR "gce_firewall_rule")
Tipi di log specifici (facoltativo, aggiungi se necessario):
Per gli audit log (operazioni dell'istanza, modifiche alla configurazione):
resource.type="gce_instance" logName:"cloudaudit.googleapis.com/activity"Per i log di flusso VPC (traffico di rete):
resource.type="gce_subnetwork" logName:"vpc_flows"Per i log del firewall (connessioni consentite/negate):
resource.type="gce_subnetwork" logName:"compute.googleapis.com/firewall"Per i log della console seriale:
resource.type="gce_instance" logName:"serialconsole.googleapis.com"
Filtri relativi alla rete (facoltativi, aggiungili in base alle esigenze):
Filtra in base ai dettagli della connessione (IP di origine/destinazione, porte):
jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:*Filtra per dettagli istanza:
jsonPayload.dest_instance.project_id:* OR jsonPayload.src_instance.project_id:*Filtra per azioni di sicurezza:
jsonPayload.rule_details.action=("ALLOW" OR "BLOCK")
Esempio: filtro completo per il logging completo di Compute:
(resource.type="gce_instance" OR resource.type="gce_subnetwork") AND ( logName:"cloudaudit.googleapis.com/activity" OR logName:"vpc_flows" OR logName:"compute.googleapis.com/firewall" OR jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:* )Fai clic su Crea sink.
Configura le autorizzazioni per Cloud Storage
- Vai a IAM > IAM e amministrazione > Service account.
- Trova il account di servizio Cloud Logging, ad esempio service-account@logging.iam.gserviceaccount.com.
- Assegnagli il ruolo roles/storage.admin nel bucket.
Configura i feed
Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:
- Impostazioni > Gestione dei dati > Feed > Aggiungi nuovo feed (sulla piattaforma solo SIEM, Impostazioni > Feed > Aggiungi nuovo feed)
- Hub dei contenuti > Pacchetti di contenuti > Inizia
Come configurare il feed di calcolo Google Cloud
- Fai clic sul pacchetto Google Cloud Compute platform.
- Individua il tipo di log GCP Compute Feed e fai clic su Aggiungi nuovo feed.
Specifica i valori per i seguenti campi:
- Source Type (Tipo di origine): Google Cloud Storage V2.
- URI bucket di archiviazione: URL del bucket Cloud Storage, ad esempio
gs://compute-context-logs/. Questo URL deve terminare con una barra (/). Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
Età massima del file: includi i file modificati negli ultimi giorni. Il valore predefinito è 180 giorni.
Service account Chronicle: copia il service account. Ti servirà per aggiungere autorizzazioni nel bucket per questo service account, in modo da consentire a Google SecOps di leggere o eliminare i dati nel bucket.
Opzioni avanzate
- Nome del feed: un valore precompilato che identifica il feed.
- Spazio dei nomi degli asset: lo spazio dei nomi associato al feed.
- Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.
Fai clic su Crea feed.
Per ulteriori informazioni sulla configurazione di più feed per diversi tipi di log all'interno di questa famiglia di prodotti, consulta Configura i feed per prodotto.
Tabella di mappatura UDM
| Campo del log | mappatura UDM | Logica |
|---|---|---|
| addr | read_only_udm.principal.ip | Unito all'elenco di indirizzi IP principali se il campo non è vuoto o "?". |
| jsonPayload.connection.dest_ip | read_only_udm.target.ip | Uniti all'elenco di indirizzi IP di destinazione, se il campo esiste. |
| jsonPayload.connection.dest_port | read_only_udm.target.port | Convertito in stringa, poi in numero intero e mappato se non si verificano errori durante la conversione. |
| jsonPayload.connection.protocol | read_only_udm.network.ip_protocol | Convertito in stringa, poi in numero intero. Utilizzato per determinare il protocollo IP (TCP, UDP e così via) utilizzando una tabella di ricerca e mappato se non si verificano errori durante la conversione. |
| jsonPayload.connection.src_ip | read_only_udm.principal.ip | Unito all'elenco di indirizzi IP principali se il campo esiste. |
| jsonPayload.connection.src_port | read_only_udm.principal.port | Convertito in stringa, poi in numero intero e mappato se non si verificano errori durante la conversione. |
| jsonPayload.dest_instance.project_id | read_only_udm.target.resource.product_object_id | Mappato in modo condizionale se jsonPayload.dest_vpc.project_id esiste. |
| jsonPayload.dest_instance.region | read_only_udm.target.location.name | Mappato in modo condizionale se jsonPayload.dest_vpc.project_id esiste. |
| jsonPayload.dest_instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | Mappato in modo condizionale se jsonPayload.dest_vpc.project_id esiste. |
| jsonPayload.dest_instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | Mappato in modo condizionale se jsonPayload.dest_vpc.project_id esiste. |
| jsonPayload.dest_vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | Utilizzato come condizione per mappare i campi correlati. |
| jsonPayload.dest_vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | Mappato in modo condizionale se jsonPayload.dest_vpc.project_id esiste. |
| jsonPayload.instance.project_id | read_only_udm.target.resource.product_object_id | Mappato in modo condizionale se esiste jsonPayload.instance.project_id. |
| jsonPayload.instance.region | read_only_udm.target.location.name | Mappato in modo condizionale se esiste jsonPayload.instance.project_id. |
| jsonPayload.instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | Mappato in modo condizionale se esiste jsonPayload.instance.project_id. |
| jsonPayload.instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | Mappato in modo condizionale se esiste jsonPayload.instance.project_id. |
| jsonPayload.message | read_only_udm.metadata.product_event_type, read_only_udm.principal.application, read_only_udm.target.process.pid, read_only_udm.target.user.userid, read_only_udm.principal.hostname, read_only_udm.target.process.command_line, read_only_udm.security_result.description, read_only_udm.principal.process.file.full_path | Analizzati e mappati in campi diversi in base ai pattern grok e alla logica condizionale. |
| jsonPayload.rule_details.action | read_only_udm.security_result.action | Utilizzato per determinare l'azione del risultato di sicurezza (ALLOW/BLOCK) e mappato. |
| jsonPayload.rule_details.direction | read_only_udm.network.direction | Utilizzato per determinare la direzione della rete (INBOUND/OUTBOUND/UNKNOWN_DIRECTION) e mappato. |
| jsonPayload.rule_details.priority | read_only_udm.security_result.priority_details | Convertito in stringa e mappato se non si verificano errori durante la conversione. |
| jsonPayload.rule_details.reference | read_only_udm.security_result.rule_labels.value | Mappato al valore dell'etichetta della regola. |
| jsonPayload.src_instance.project_id | read_only_udm.principal.resource.product_object_id | Mappato in modo condizionale se jsonPayload.src_vpc.project_id esiste. |
| jsonPayload.src_instance.region | read_only_udm.principal.location.name | Mappato in modo condizionale se jsonPayload.src_vpc.project_id esiste. |
| jsonPayload.src_instance.vm_name | read_only_udm.principal.resource.attribute.cloud.project.name | Mappato in modo condizionale se jsonPayload.src_vpc.project_id esiste. |
| jsonPayload.src_instance.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | Mappato in modo condizionale se jsonPayload.src_vpc.project_id esiste. |
| jsonPayload.src_vpc.project_id | read_only_udm.principal.cloud.vpc.product_object_id | Utilizzato come condizione per mappare i campi correlati. |
| jsonPayload.src_vpc.subnetwork_name | read_only_udm.principal.cloud.vpc.name | Mappato in modo condizionale se jsonPayload.src_vpc.project_id esiste. |
| jsonPayload.vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | Mappato in modo condizionale se jsonPayload.vpc.project_id esiste. |
| jsonPayload.vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | Mappato in modo condizionale se jsonPayload.vpc.project_id esiste. |
| logName | read_only_udm.security_result.category_details | Mappata direttamente. |
| resource.labels.instance_id | read_only_udm.principal.resource.product_object_id, read_only_udm.principal.asset_id | Mappato in modo condizionale. Se il tipo è "PROCTITLE", viene utilizzato per creare l'ID risorsa. |
| resource.labels.location | read_only_udm.principal.location.name | Mappato in modo condizionale se il campo esiste. |
| resource.labels.project_id | read_only_udm.metadata.product_deployment_id | Mappato in modo condizionale se il campo esiste. |
| resource.labels.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | Mappato in modo condizionale se il campo esiste. |
| resource.type | read_only_udm.metadata.event_type | Utilizzato per determinare il tipo di evento e mappato. |
| timestamp | read_only_udm.metadata.event_timestamp | Mappata direttamente. |
| tipo | read_only_udm.metadata.product_event_type, read_only_udm.metadata.event_type, read_only_udm.extensions.auth.type | Utilizzato per determinare il tipo di evento, il tipo di evento del prodotto e il tipo di autenticazione e mappato di conseguenza. |
| read_only_udm.metadata.event_type | La logica imposta il tipo di evento in base al campo "type" e ad altre condizioni. Se non viene trovata alcuna corrispondenza specifica, il valore predefinito è "GENERIC_EVENT". | |
| read_only_udm.metadata.log_type | Valore costante "GCP_COMPUTE". | |
| read_only_udm.metadata.vendor_name | Valore costante "Google Cloud Platform". | |
| read_only_udm.metadata.product_name | Valore costante "Google Cloud Platform". | |
| read_only_udm.security_result.rule_labels.key | Valore costante "Reference". | |
| read_only_udm.target.cloud.vpc.resource_type | Impostato in modo condizionale su "VPC_NETWORK" se esiste jsonPayload.instance.project_id o jsonPayload.dest_vpc.project_id. | |
| read_only_udm.target.resource.attribute.cloud.environment | Impostato in modo condizionale su "GOOGLE_CLOUD_PLATFORM" se esiste jsonPayload.instance.project_id, jsonPayload.dest_vpc.project_id o jsonPayload.src_vpc.project_id. | |
| read_only_udm.principal.administrative_domain | Mappato dal campo "Account Domain" (Dominio account) estratto dal campo "kv_data". | |
| read_only_udm.principal.user.user_display_name | Mappato dal campo "Account Name" (Nome account) estratto dal campo "kv_data". | |
| read_only_udm.target.resource.name | Mappato dal campo "Object Name" (Nome oggetto) estratto dal campo "kv_data". | |
| read_only_udm.target.resource.type | Mappato dal campo "Object Type" (Tipo di oggetto) estratto dal campo "kv_data". | |
| read_only_udm.principal.process.pid | Mappato dal campo "ID di processo" estratto dal campo "kv_data". | |
| read_only_udm.target.user.windows_sid | Mappato dal campo "ID sicurezza" estratto dal campo "kv_data". | |
| read_only_udm.network.session_id | Mappato dal campo "auid". |
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.