Raccogliere i log di Cloud Run
Questa guida spiega come esportare i log di Cloud Run in Google Security Operations utilizzando Cloud Storage. L'analizzatore sintattico estrae i campi dai log JSON, trasformandoli nel modello di dati unificato (UDM). Gestisce vari formati di log, inclusi i dati delle richieste HTTP e i log di controllo di sistema, mappando i campi pertinenti a UDM e arricchendo al contempo i dati con etichette e metadati specifici di Cloud Run.
Prima di iniziare
- Assicurati di avere un'istanza Google SecOps.
- Assicurati che Cloud Run 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 cloudrun-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.
Configurare l'esportazione dei log in Cloud Run
- Nella pagina Google Cloud Ti diamo il benvenuto, fai clic sull'icona Cloud Run.
- Cerca Logging nella barra di ricerca in alto e fai clic su Invio.
- In Esplora log, filtra i log scegliendo Cloud Run in Nome log e fai clic su Applica.
- Nel menu, fai clic su Altre azioni > Crea sink.
- Fornisci le seguenti configurazioni:
- Dettagli della destinazione: inserisci un nome e una descrizione.
- Fai clic su Avanti.
- Destinazione della destinazione: seleziona Bucket Cloud Storage.
- Bucket Cloud Storage: seleziona il bucket creato in precedenza o creane uno nuovo.
- Fai clic su Avanti.
- Scegli i log da includere nel sink: un log predefinito viene compilato quando selezioni un'opzione nel bucket Cloud Storage.
- Fai clic su Avanti.
- (Facoltativo) Scegli i log da escludere dal sink: seleziona i log che non vuoi includere nel sink.
- Fai clic su Crea sink.
Configura un feed in Google SecOps per importare i log di Cloud Run
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed, ad esempio Log di Cloud Run.
- Seleziona Google Cloud Storage come Tipo di origine.
- Seleziona Google Cloud Run 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 |
---|---|---|
httpRequest.latency |
target.resource.attribute.labels.[] |
Il valore di httpRequest.latency dal log non elaborato viene utilizzato come valore per un'etichetta con chiave http_request_latency in target.resource.attribute.labels . |
httpRequest.protocol |
network.application_protocol |
Se httpRequest.protocol contiene HTTP , il campo UDM viene impostato su HTTP . |
httpRequest.remoteIp |
principal.asset.ip |
Viene utilizzato il valore httpRequest.remoteIp del log non elaborato. |
httpRequest.remoteIp |
principal.ip |
Viene utilizzato il valore httpRequest.remoteIp del log non elaborato. |
httpRequest.requestMethod |
network.http.method |
Viene utilizzato il valore httpRequest.requestMethod del log non elaborato. |
httpRequest.requestSize |
network.sent_bytes |
Il valore di httpRequest.requestSize dal log non elaborato viene convertito in un numero intero non firmato e utilizzato. |
httpRequest.requestUrl |
target.url |
Viene utilizzato il valore httpRequest.requestUrl del log non elaborato. |
httpRequest.responseSize |
network.received_bytes |
Il valore di httpRequest.responseSize dal log non elaborato viene convertito in un numero intero non firmato e utilizzato. |
httpRequest.serverIp |
target.asset.ip |
Viene utilizzato il valore httpRequest.serverIp del log non elaborato. |
httpRequest.serverIp |
target.ip |
Viene utilizzato il valore httpRequest.serverIp del log non elaborato. |
httpRequest.status |
network.http.response_code |
Il valore di httpRequest.status dal log non elaborato viene convertito in un numero intero e utilizzato. |
httpRequest.userAgent |
network.http.parsed_user_agent |
Il valore di httpRequest.userAgent dal log non elaborato viene analizzato come stringa user agent. |
httpRequest.userAgent |
network.http.user_agent |
Viene utilizzato il valore httpRequest.userAgent del log non elaborato. |
insertId |
metadata.product_log_id |
Viene utilizzato il valore insertId del log non elaborato. |
labels.instanceId |
additional.fields.[] |
Il valore di labels.instanceId viene utilizzato come valore per un'etichetta con chiave instanceId in additional.fields . |
labels.run.googleapis.com_execution_name |
additional.fields.[] |
Il valore di labels.run.googleapis.com_execution_name viene utilizzato come valore per un'etichetta con chiave execution_name in additional.fields . |
labels.run.googleapis.com_task_attempt |
additional.fields.[] |
Il valore di labels.run.googleapis.com_task_attempt viene utilizzato come valore per un'etichetta con chiave task_attempt in additional.fields . |
labels.run.googleapis.com_task_index |
additional.fields.[] |
Il valore di labels.run.googleapis.com_task_index viene utilizzato come valore per un'etichetta con chiave task_index in additional.fields . |
logName |
metadata.product_event_type |
Viene utilizzato il valore logName del log non elaborato. |
resource.labels.configuration_name |
target.resource.attribute.labels.[] |
Il valore di resource.labels.configuration_name viene utilizzato come valore per un'etichetta con chiave configuration_name in target.resource.attribute.labels . |
resource.labels.job_name |
additional.fields.[] |
Il valore di resource.labels.job_name viene utilizzato come valore per un'etichetta con chiave job_name in additional.fields . |
resource.labels.location |
target.location.name |
Viene utilizzato il valore resource.labels.location del log non elaborato. |
resource.labels.project_id |
target.resource.attribute.labels.[] |
Il valore di resource.labels.project_id viene utilizzato come valore per un'etichetta con chiave project_id in target.resource.attribute.labels . |
resource.labels.revision_name |
target.resource.attribute.labels.[] |
Il valore di resource.labels.revision_name viene utilizzato come valore per un'etichetta con chiave revision_name in target.resource.attribute.labels . |
resource.labels.service_name |
target.resource.attribute.labels.[] |
Il valore di resource.labels.service_name viene utilizzato come valore per un'etichetta con chiave service_name in target.resource.attribute.labels . |
resource.type |
target.resource.resource_subtype |
Viene utilizzato il valore resource.type del log non elaborato. |
severity |
security_result.severity |
Se il valore di severity corrisponde a Info (senza distinzione tra maiuscole e minuscole), il campo UDM viene impostato su INFORMATIONAL . |
textPayload |
additional.fields.[] |
Il valore di textPayload viene utilizzato come valore per un'etichetta con chiave Textpayload in additional.fields . |
timestamp |
metadata.event_timestamp |
Il valore di timestamp dal log non elaborato viene analizzato come timestamp. |
timestamp |
timestamp |
Il valore di timestamp dal log non elaborato viene analizzato come timestamp. Determinato dalla logica del parser in base alla presenza di determinati campi. Il valore predefinito è GENERIC_EVENT . Se has_principal_ip , has_target_ip e httpRequest.protocol corrispondono a HTTP , viene impostato su NETWORK_HTTP . Hardcoded a GCP_RUN . Hardcoded a GCP_RUN . Hardcoded a Google Cloud Platform . Hardcoded a GOOGLE_CLOUD_PLATFORM . |
Modifiche
2024-01-22
Miglioramento:
- È stata aggiunta la mappatura per i log in cui logName è
projects/1234/logs/run.googleapis.com%2Fstderr
,projects/1234/logs/run.googleapis.com%2Fstdout
,projects/1234/logs/run.googleapis.com%2Frequests
eprojects/1234/logs/run.googleapis.com%2Fvarlog%2Fsystem
. httpRequest.latency
è stato mappato atarget.resource.attribute.labels
.resource.labels.configuration_name
è stato mappato atarget.resource.attribute.labels
.resource.labels.revision_name
è stato mappato atarget.resource.attribute.labels
.resource.labels.service_name
è stato mappato atarget.resource.attribute.labels
.httpRequest.protocol
è stato mappato anetwork.application_protocol
.httpRequest.requestMethod
è stato mappato anetwork.http.method
.httpRequest.requestSize
è stato mappato anetwork.sent_bytes
.httpRequest.requestUrl
è stato mappato atarget.url
.httpRequest.responseSize
è stato mappato anetwork.received_bytes
.httpRequest.remoteIp
è stato mappato aprincipal.ip
eprincipal.asset.ip
.httpRequest.serverIp
è stato mappato a target.ipand
target.asset.ip.httpRequest.status
è stato mappato anetwork.http.response_code
.httpRequest.userAgent
è stato mappato anetwork.http.user_agent
.logName
è stato mappato ametadata.product_event_type
.textPayload
è stato mappato aadditional.fields
.labels.run.googleapis.com_execution_name
è stato mappato aadditional.fields
.labels.run.googleapis.com_task_attempt
è stato mappato aadditional.fields
.labels.run.googleapis.com_task_index
è stato mappato aadditional.fields
.labels.instanceId
è stato mappato aadditional.fields
.resource.labels.job_name
è stato mappato aadditional.fields
.
2023-04-13
Miglioramento:
- Imposta
target.resource.attribute.cloud.environment
suGOOGLE_CLOUD_PLATFORM
. - Imposta
target.resource.name
sul valore del nome completo della risorsa.
2022-07-13
- Analizzatore sintattico appena creato.
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.