Raccogliere i log di Cloud Compute
Questo documento spiega come configurare l' Google Cloud esportazione dei log di Compute Engine in Google Security Operations utilizzando Cloud Storage. L'analizzatore sintattico 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 avere un'istanza Google SecOps.
- Assicurati che l'ambiente Compute sia configurato e attivo nel tuo Google Cloud ambiente.
- Assicurati di disporre dell'accesso con privilegi a Google Cloud.
Crea un bucket Google Cloud Storage
- Accedi alla console Google Cloud.
Vai alla pagina Bucket Cloud Storage.
Fai clic su Crea.
Nella pagina Crea un bucket, inserisci le informazioni del bucket. Dopo ogni passaggio che segue, fai clic su Continua per passare al passaggio successivo:
Nella sezione Inizia:
- 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 i 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 verranno archiviati in modo permanente i dati degli oggetti all'interno del bucket.
- 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 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 la modalità di crittografia dei dati degli oggetti, fai clic sulla freccia di espansione etichettata Crittografia dei dati e seleziona un Metodo di crittografia dei dati.
Fai clic su Crea.
Configura Google Cloud l'esportazione dei log di calcolo
- Nella console Google Cloud, 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 del sink: seleziona Cloud Storage .
- Destinazione di destinazione: 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 calcolo Google Cloud come segue:
Nome e tipo di log:
logName="*compute*"
Campi relativi alla rete (ad esempio 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 > Account di servizio.
- Trova l'account di servizio Cloud Logging, ad esempio service-account@logging.iam.gserviceaccount.com.
- Assegna il ruolo roles/storage.admin al bucket.
Configura un feed in Google SecOps per importare i Google Cloud log di Compute
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed, ad esempio Google Cloud Log di Compute.
- Seleziona Google Cloud Storage come Tipo di origine.
- Seleziona Google Cloud Compute come Tipo di log.
- Fai clic su Ottieni account di servizio come Account di servizio Chronicle.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- URI bucket di archiviazione: Google Cloud URL del bucket di archiviazione in formato
gs://my-bucket/<value>
. - URI è: seleziona Directory che include sottodirectory.
Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
Etichette di importazione: l'etichetta applicata agli eventi di questo feed.
- URI bucket di archiviazione: Google Cloud URL del bucket di archiviazione in formato
Fai clic su Avanti.
Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.
Tabella di mappatura UDM
Campo log | Mappatura UDM | Logica |
---|---|---|
addr | read_only_udm.principal.ip | Unito all'elenco di indirizzi IP principale se il campo non è vuoto o "?". |
jsonPayload.connection.dest_ip | read_only_udm.target.ip | Unito 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 e poi in numero intero. Viene utilizzato per determinare il protocollo IP (TCP, UDP e così via) utilizzando una tabella di ricerca e viene mappato se non si verificano errori durante la conversione. |
jsonPayload.connection.src_ip | read_only_udm.principal.ip | Unito all'elenco di indirizzi IP principale, 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 a 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 (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 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 | Mappatura diretta. |
resource.labels.instance_id | read_only_udm.principal.resource.product_object_id, read_only_udm.principal.asset_id | Mappatura 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 | Mappatura diretta. |
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 "Riferimento". | |
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 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 "Account Domain" 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". |
Modifiche
2024-06-18
Miglioramento:
- "file" è stato mappato a "principal.file.names".
- "funzione" è stato mappato a "principal.resource.attribute.labels".
- "line" è stato mappato a "principal.resource.attribute.labels".
- "timestamp" è stato mappato a "event_timestamp".
2023-02-24
Correzione di bug:
- È stata aggiunta la mappatura per "asset_id" per facilitare la ricerca nell'interfaccia utente: "asset:resource.labels.instance_id" è mappato su "principal.asset_id"
2022-06-16
Miglioramento:
- È stata aggiunta la mappatura per i seguenti nuovi campi: jsonPayload.Message come syslog.
- Nome processo a principal.application.
- ID processo a principal.process.pid.
- Dominio account a principal.administrative_domain.
- Nome account a principal.user.user_display_name.
- Nome dell'oggetto da target.resource.name.
- Tipo di oggetto a target.resource.type.
- ID di sicurezza da assegnare a target.user.windows_sid.
- addr a principal.ip.
- auid a network.session_id.
- "LINUX - %{type}" per i log Linux e "Log eventi WINDOWS" per il log di Windows sono stati mappati a metadata.product_event_type.
- pid a target.process.pid.
- acct a target.user.userid.
- exe a target.process.command_line.
- file_path a principal.process.file.full_path.
- È stata modificata la mappatura di desc da metadata.description a security_result.description.
2022-05-23
Miglioramento:
- È stata aggiunta la mappatura per i seguenti nuovi campi:
- jsonPayload.message come syslog.
- resource.labels.zone a principal.resource.attribute.cloud.availability_zone.
- resource.labels.location a principal.location.name.
- resource.labels.project_id a metadata.product_deployment_id.
- resource.labels.instance_id a principal.resource.product_object_id.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.