Raccogliere i log di Cloud Compute

Supportato in:

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

  1. Accedi alla console Google Cloud.
  2. Vai alla pagina Bucket Cloud Storage.

    Vai a Bucket

  3. Fai clic su Crea.

  4. Nella pagina Crea un bucket, inserisci le informazioni del bucket. Dopo ogni passaggio che segue, fai clic su Continua per passare al passaggio successivo:

    1. Nella sezione Inizia:

      1. Inserisci un nome univoco che soddisfi i requisiti per i nomi dei bucket, ad esempio compute-logs.
      2. 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.

        1. Per aggiungere un'etichetta del bucket, fai clic sulla freccia di espansione per espandere la sezione Etichette.
        2. Fai clic su Aggiungi etichetta e specifica una chiave e un valore per l'etichetta.
    2. Nella sezione Scegli dove archiviare i tuoi dati, segui questi passaggi:

      1. Seleziona un Tipo di località.

        1. 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.
        1. Per configurare la replica tra bucket, espandi la sezione Configura la replica tra bucket.
    3. 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.

    4. 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.

    5. Nella sezione Scegli come proteggere i dati degli oggetti, segui questi passaggi:

      1. Seleziona una delle opzioni in Protezione dei dati che vuoi impostare per il bucket.
      2. 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.
  5. Fai clic su Crea.

Configura Google Cloud l'esportazione dei log di calcolo

  1. Nella console Google Cloud, vai a Logging > Router log.
  2. Fai clic su Crea sink.
  3. 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"
        
  4. Fai clic su Crea.

Configura le autorizzazioni per Cloud Storage

  1. Vai a IAM > IAM e amministrazione > Account di servizio.
  2. Trova l'account di servizio Cloud Logging, ad esempio service-account@logging.iam.gserviceaccount.com.
  3. Assegna il ruolo roles/storage.admin al bucket.

Configura un feed in Google SecOps per importare i Google Cloud log di Compute

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo.
  3. Nel campo Nome feed, inserisci un nome per il feed, ad esempio Google Cloud Log di Compute.
  4. Seleziona Google Cloud Storage come Tipo di origine.
  5. Seleziona Google Cloud Compute come Tipo di log.
  6. Fai clic su Ottieni account di servizio come Account di servizio Chronicle.
  7. Fai clic su Avanti.
  8. 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.

  9. Fai clic su Avanti.

  10. 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.