Raccogli Google Cloud Log di Compute
Questo documento spiega come configurare l'esportazione dei log di Compute in Google Security Operations utilizzando Cloud Storage. Google Cloud 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, inclusi 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 disporre dei 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 ogni passaggio riportato di seguito, fai clic su Continua per passare al 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 attivare 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, poi 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 del 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 replica tra bucket.
Nella sezione Scegli una classe di archiviazione per i tuoi dati, seleziona una classe di archiviazione predefinita per il bucket oppure Autoclass per la gestione automatica della classe di archiviazione dei dati del bucket.
Nella sezione Scegli come controllare l'accesso agli oggetti, seleziona No per applicare la prevenzione dell'accesso pubblico e seleziona un modello di controllo dell'accesso 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 Google Cloud l'esportazione dei log di Compute
- Nella Google Cloud console, vai a Logging > Router log.
- Fai clic su Crea sink.
Fornisci i seguenti dettagli:
- Nome sink: fornisci un nome significativo, ad esempio Compute-Logs-Sink.
- Destinazione sink: seleziona Cloud Storage .
- Destinazione sink: seleziona Cloud Storage e inserisci l'URI del bucket, ad esempio
gs://<your-bucket-name>/compute-logs
. Filtro log: imposta i filtri per acquisire i log di Compute nel seguente modo: Google Cloud
Nome e tipo di log:
logName="*compute*"
Campi relativi alla rete (come indirizzi IP, porte):
jsonPayload.connection.dest_ip="*" OR jsonPayload.connection.src_ip="*"
Dettagli istanza:
jsonPayload.dest_instance.project_id="*" jsonPayload.src_instance.project_id="*"
Dettagli relativi alla sicurezza:
jsonPayload.rule_details.action="ALLOW" OR jsonPayload.rule_details.action="BLOCK"
Fai clic su Crea.
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.
- Fornisci il ruolo roles/storage.admin sul bucket.
Configurare i feed
Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:
- Impostazioni SIEM > Feed > Aggiungi nuovo
- Hub dei contenuti > Pacchetti di contenuti > Inizia
Come configurare il feed di Google Cloud compute
- 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:
- Tipo di origine: Google Cloud Storage V2.
- URI bucket di archiviazione: URL del bucket Cloud Storage, ad esempio
gs://compute-context-logs
. - Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
- Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.
- Service account Chronicle: copia il service account. Ti servirà per aggiungere le autorizzazioni nel bucket per consentire a Google SecOps di leggere o eliminare i dati nel bucket.
Opzioni avanzate
- Nome feed: un valore precompilato che identifica il feed.
- Spazio dei nomi dell'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 Configurare i feed per prodotto.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logic |
---|---|---|
addr | read_only_udm.principal.ip | Unito all'elenco degli indirizzi IP principali se il campo non è vuoto o non contiene "?". |
jsonPayload.connection.dest_ip | read_only_udm.target.ip | Unito all'elenco degli 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 dell'entità 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 esiste jsonPayload.dest_vpc.project_id. |
jsonPayload.dest_instance.region | read_only_udm.target.location.name | Mappato in modo condizionale se esiste jsonPayload.dest_vpc.project_id. |
jsonPayload.dest_instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | Mappato in modo condizionale se esiste jsonPayload.dest_vpc.project_id. |
jsonPayload.dest_instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | Mappato in modo condizionale se esiste jsonPayload.dest_vpc.project_id. |
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 esiste jsonPayload.dest_vpc.project_id. |
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 a pattern grok e logica condizionale. |
jsonPayload.rule_details.action | read_only_udm.security_result.action | Utilizzato per determinare l'azione del risultato di sicurezza (CONSENTI/BLOCCA) 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 esiste jsonPayload.src_vpc.project_id. |
jsonPayload.src_instance.region | read_only_udm.principal.location.name | Mappato in modo condizionale se esiste jsonPayload.src_vpc.project_id. |
jsonPayload.src_instance.vm_name | read_only_udm.principal.resource.attribute.cloud.project.name | Mappato in modo condizionale se esiste jsonPayload.src_vpc.project_id. |
jsonPayload.src_instance.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | Mappato in modo condizionale se esiste jsonPayload.src_vpc.project_id. |
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 esiste jsonPayload.src_vpc.project_id. |
jsonPayload.vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | Mappato in modo condizionale se esiste jsonPayload.vpc.project_id. |
jsonPayload.vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | Mappato in modo condizionale se esiste jsonPayload.vpc.project_id. |
logName | read_only_udm.security_result.category_details | Mappato 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 | Mappato 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 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 esistono 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 esistono jsonPayload.instance.project_id, jsonPayload.dest_vpc.project_id o jsonPayload.src_vpc.project_id. | |
read_only_udm.principal.administrative_domain | Mappato dal campo "Dominio account" estratto dal campo "kv_data". | |
read_only_udm.principal.user.user_display_name | Mappato dal campo "Nome account" estratto dal campo "kv_data". | |
read_only_udm.target.resource.name | Mappato dal campo "Nome oggetto" estratto dal campo "kv_data". | |
read_only_udm.target.resource.type | Mappato dal campo "Tipo di oggetto" estratto dal campo "kv_data". | |
read_only_udm.principal.process.pid | Mappato dal campo "ID 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". |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.