Raccogli i log dei servizi F5 Distributed Cloud
Versione parser: 6.0
Questo documento spiega come acquisire i log dei servizi F5 Distributed Cloud in Google Security Operations utilizzando Google Cloud Storage V2.
F5 Distributed Cloud Services è una piattaforma di sicurezza, networking e gestione delle applicazioni basata su SaaS che fornisce infrastruttura cloud distribuita, distribuzione delle applicazioni, sicurezza delle API e funzionalità di web application firewall in più cloud e località perimetrali.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto cloud Google Cloud con l'API Storage Cloud Storage abilitata
- Autorizzazioni per creare e gestire i bucket GCS
- Autorizzazioni per gestire le policy IAM sui bucket GCS
- Accesso con privilegi alla console F5 Distributed Cloud
- Autorizzazioni per creare oggetti Global Log Receiver in F5 Distributed Cloud
Crea un bucket Google Cloud Storage
- Vai alla console Google Cloud.
- Seleziona il tuo progetto o creane uno nuovo.
- Nel menu di navigazione, vai a Cloud Storage > Bucket.
- Fai clic su Crea bucket.
Fornisci i seguenti dettagli di configurazione:
Impostazione Valore Assegna un nome al bucket Inserisci un nome globalmente univoco (ad esempio f5-dcs-logs)Tipo di località Scegli in base alle tue esigenze (Regione, a due regioni, multiregionale) Località Seleziona la località (ad esempio us-central1)Classe di archiviazione Standard (consigliato per i log ad accesso frequente) Controllo degli accessi Uniforme (consigliato) Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o la policy di conservazione Fai clic su Crea.
Configura F5 Distributed Cloud per l'esportazione in GCS
Aggiungi il bucket GCS alla lista consentita del firewall
F5 Distributed Cloud Global Log Receiver richiede l'aggiunta dei seguenti intervalli di indirizzi IP alla lista consentita del firewall:
193.16.236.64/29185.160.8.152/29
Se il tuo bucket GCS utilizza i Controlli di servizio VPC o le regole firewall, aggiungi questi intervalli IP alla lista consentita.
Crea un account di servizio Google Cloud per F5 Distributed Cloud
- Nella console Google Cloud, vai a IAM e amministrazione > Service account.
- Fai clic su Crea account di servizio.
Fornisci i seguenti dettagli di configurazione:
- Nome account di servizio: inserisci
f5-dcs-log-writer(o un nome descrittivo) - Descrizione account di servizio: inserisci
Service account for F5 Distributed Cloud to write logs to GCS
- Nome account di servizio: inserisci
Fai clic su Crea e continua.
Nella sezione Concedi a questo account di servizio l'accesso al progetto:
- Fai clic su Seleziona un ruolo.
- Cerca e seleziona Storage Object Admin.
Fai clic su Continua.
Fai clic su Fine.
Crea una chiave dell'account di servizio
- Nell'elenco Service account, fai clic sul account di servizio che hai creato (ad esempio
f5-dcs-log-writer). - Vai alla scheda Chiavi.
- Fai clic su Aggiungi chiave > Crea nuova chiave.
- Seleziona JSON come tipo di chiave.
- Fai clic su Crea.
- Il file della chiave JSON viene scaricato sul computer.
- Salva questo file in modo sicuro. Ti servirà nei passaggi successivi.
Concedi le autorizzazioni IAM sul bucket GCS
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
f5-dcs-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: inserisci l'indirizzo email del account di servizio (ad esempio
f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com) - Assegna i ruoli: seleziona Storage Object Admin
- Aggiungi entità: inserisci l'indirizzo email del account di servizio (ad esempio
- Fai clic su Salva.
Crea le credenziali Google Cloud nella console F5 Distributed Cloud
- Accedi alla console F5 Distributed Cloud all'indirizzo
https://<tenant>.console.ves.volterra.io. - Seleziona il servizio Multi-Cloud Network Connect dalla home page.
- Vai a Gestisci > Gestione sito > Credenziali cloud.
- Fai clic su Aggiungi credenziali cloud.
- Nella sezione Metadati:
- Nome: inserisci un nome descrittivo (ad esempio
gcp-chronicle-logs) - (Facoltativo) Descrizione: inserisci
Cloud Storage credentials for Google SecOps log export
- Nome: inserisci un nome descrittivo (ad esempio
- Nella sezione Cloud Credentials Type (Tipo di credenziali cloud), seleziona GCP Credentials (Credenziali GCP).
- Fai clic su Configura nel campo Credenziali GCP.
- Nel menu a discesa Credential Type (Tipo di credenziali), seleziona Service Account Credentials File (File delle credenziali del service account).
- Fai clic su Carica file e seleziona il file della chiave JSON scaricato nei passaggi precedenti.
- Fai clic su Applica.
- Fai clic su Salva ed esci.
Crea un ricevitore di log globale
- Nella console F5 Distributed Cloud, assicurati di essere nel servizio Multi-Cloud Network Connect.
- Vai a Manage (Gestisci) > Log Management (Gestione dei log) > Global Log Receiver (Ricevitore di log globale).
- Fai clic su Aggiungi ricevitore di log globale.
Nella sezione Metadati:
- Nome: inserisci un nome descrittivo (ad esempio
chronicle-gcs-receiver) - (Facoltativo) Descrizione: inserisci
Global log receiver for Google SecOps SIEM
- Nome: inserisci un nome descrittivo (ad esempio
Nel menu a discesa Tipo di log, seleziona i tipi di log che vuoi esportare:
- Log delle richieste: log delle richieste/risposte HTTP con utente, percorso, metodo e codici di risposta
- Eventi di sicurezza: eventi WAF, DDoS, protezione API, eventi di difesa dai bot
- Audit log: modifiche alla configurazione tramite API pubbliche
- Log delle richieste DNS: log delle query DNS
Nel menu a discesa Selezione dei messaggi di log, seleziona una delle seguenti opzioni:
- Seleziona i log dallo spazio dei nomi corrente: invia i log solo dallo spazio dei nomi corrente
- Seleziona i log da tutti gli spazi dei nomi: invia i log da tutti gli spazi dei nomi (opzione consigliata per una visibilità completa)
- Seleziona i log in spazi dei nomi specifici: invia i log dagli spazi dei nomi specificati (fai clic su Aggiungi elemento per aggiungere i nomi degli spazi dei nomi)
Nel menu a discesa Receiver Configuration (Configurazione ricevitore), seleziona GCP Bucket Receiver (Ricevitore bucket GCP).
Nel campo Nome bucket GCP, inserisci il nome del bucket GCS (ad esempio
f5-dcs-logs).Nel menu a discesa Credenziali cloud GCP, seleziona le credenziali cloud create in precedenza (ad esempio
gcp-chronicle-logs).(Facoltativo) Espandi Mostra campi avanzati per configurare le opzioni di batch:
- Opzioni di timeout batch: seleziona Secondi di timeout e inserisci un valore (valore predefinito:
300secondi) - Numero massimo di eventi in batch: seleziona Numero massimo di eventi e inserisci un valore compreso tra 32 e 2000 (lascia vuoto per non impostare alcun limite).
- Byte batch: seleziona Byte massimi e inserisci un valore compreso tra 4096 e 1048576 (valore predefinito:
10485760byte/10 MB)
- Opzioni di timeout batch: seleziona Secondi di timeout e inserisci un valore (valore predefinito:
Fai clic su Salva ed esci.
Testa la connessione
- Nell'elenco Ricevitore di log globale, individua il ricevitore che hai creato (ad esempio,
chronicle-gcs-receiver). - Fai clic sui tre puntini (…) nella colonna Azioni.
- Seleziona Testa connessione.
- Attendi il completamento del test.
Dovrebbe essere visualizzato un messaggio che indica che la connessione è riuscita.
Verifica i log nel bucket GCS
- Vai a Cloud Storage > Bucket nella console Google Cloud.
- Fai clic sul nome del bucket (ad esempio
f5-dcs-logs). - Verifica che i file di log vengano creati nel bucket.
F5 Distributed Cloud organizza i log nella seguente struttura di cartelle:
YYYY/MM/DD/HH/- Viene creata una cartella per ogni giorno (AAAA/MM/GG)
- All'interno di ogni cartella giornaliera, viene creata una sottocartella per ogni ora (HH)
- Ogni 5 minuti, vengono scritti nuovi file gzip compressi nella sottocartella oraria
- I file sono in formato NDJSON (JSON delimitato da nuova riga)
Fai clic su un file gzip per scaricare e ispezionare il formato del log.
Recupera il account di servizio Google SecOps
Google SecOps utilizza un account di servizio univoco per leggere i dati dal tuo bucket GCS. Devi concedere a questo account di servizio l'accesso al tuo bucket.
Recupera l'indirizzo email del account di servizio
- Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Feed.
- Fai clic su Aggiungi nuovo feed.
- Fai clic su Configura un singolo feed.
- Nel campo Nome feed, inserisci un nome per il feed (ad es.
F5 DCS Logs). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona F5 Distributed Cloud Services come Tipo di log.
Fai clic su Ottieni service account. Verrà visualizzato un indirizzo email univoco del account di servizio, ad esempio:
chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.comCopia questo indirizzo email per utilizzarlo nel passaggio successivo.
Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL bucket di archiviazione: inserisci l'URI del bucket GCS:
gs://f5-dcs-logs/Sostituisci
f5-dcs-logscon il nome del tuo bucket GCS.Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze:
- Mai: non elimina mai i file dopo i trasferimenti (opzione consigliata per i test).
- Elimina i file trasferiti: elimina i file dopo il trasferimento riuscito.
Elimina i file trasferiti e le directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.
Età massima dei file: includi i file modificati negli ultimi giorni (il valore predefinito è 180 giorni)
Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset
Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
Fai clic su Avanti.
Controlla la nuova configurazione del feed di notizie nella schermata Finalizza e poi fai clic su Invia.
Concedi le autorizzazioni IAM al account di servizio Google SecOps
Il account di servizio Google SecOps deve avere il ruolo Storage Object Viewer nel bucket GCS.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
f5-dcs-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'indirizzo email del account di servizio Google SecOps
- Assegna i ruoli: seleziona Storage Object Viewer
Fai clic su Salva.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logica |
|---|---|---|
| _id | metadata.product_log_id | Valore copiato direttamente |
| src | principal.namespace | Valore copiato direttamente |
| kubernetes_labels_app | target.resource.attribute.labels | Unito da app_label (derivato da kubernetes_labels_app) |
| kubernetes_host | target.hostname | Valore copiato direttamente |
| kubernetes_container_name | target.resource.product_object_id | Valore copiato direttamente |
| bot_info.classification | security_result.detection_fields | Unito da bot_info_classification_label (derivato da bot_info.classification) |
| bot_info.name | security_result.detection_fields | Unito da bot_info_name_label (derivato da bot_info.name) |
| bot_info.type | security_result.detection_fields | Unito da bot_info_type_label (derivato da bot_info.type) |
| timestamp | @timestamp | Analizzato utilizzando il filtro della data con RFC 3339, UNIX, ISO8601 |
| visitor_id | security_result.detection_fields | Unito da visitor_id_label (derivato da visitor_id) |
| tag | security_result.detection_fields | Unito da tag_label (derivato da tag) |
| azione | security_result.action | Imposta su ALLOW se corrisponde a un'etichetta consentita, su BLOCK se corrisponde a un'etichetta negata |
| gravità | security_result.severity | Imposta su HIGH se è presente un errore/avviso; CRITICAL se è critico; MEDIUM se è una notifica; LOW se si tratta di informazioni/info |
| gravità | security_result.severity_details | Valore copiato direttamente |
| api_endpoint | target.labels | Unito da api_endpoint_label (derivato da api_endpoint) |
| app_firewall_name | principal.process.command_line | Valore copiato direttamente |
| app_type | security_result.detection_fields | Unito da about_app_type (derivato da app_type) |
| as_org | security_result.detection_fields | Unito da about_as_org (derivato da as_org) |
| asn | security_result.detection_fields | Unito da about_asn (derivato da asn) |
| kubernetes.pod_id | security_result.detection_fields | Unito da about_pod_id (derivato da kubernetes.pod_id) |
| kubernetes.pod_name | security_result.detection_fields | Unito da about_pod_name (derivato da kubernetes.pod_name) |
| latitude | principal.location.region_latitude | Convertito in float |
| longitude | principal.location.region_longitude | Convertito in float |
| req_params | additional.fields | Unito da about_req_params (derivato da req_params) |
| as_number | additional.fields | Unito da about_as_number (convertito in stringa da as_number) |
| x_forwarded_for | intermediary.ip | Unito se l'IP è valido |
| x_forwarded_for | security_result.about.resource.attribute.labels | Unito da x_forwarded_for_label se non è un IP |
| policy_hit.malicious_user_mitigate_action | security_result.detection_fields | Unito da malicious_user_label (derivato da policy_hit.malicious_user_mitigate_action) |
| policy_hit.policy | security_result.about.resource.attribute.labels | Unito da policy_label (derivato da policy_hit.policy) |
| policy_hit.policy_namespace | additional.fields | Unito da policy_namespace_label (derivato da policy_hit.policy_namespace) |
| policy_hit.policy_rule | security_result.rule_name | Valore copiato direttamente |
| policy_hit.policy_rule_description | security_result.description | Valore copiato direttamente |
| policy_hit.policy_set | target.resource.name | Valore copiato direttamente |
| policy_hit.result | additional.fields | Unito da result_label (derivato da policy_hit.result) |
| vhost_id | security_result.detection_fields | Unito da vhostlabel (derivato da vhost_id) |
| messageid | security_result.detection_fields | Unito da messageid_label (derivato da messageid) |
| sec_event_name | security_result.detection_fields | Unito da sec_event_name_label (derivato da sec_event_name) |
| sec_event_type | security_result.detection_fields | Unito da sec_event_type_label (derivato da sec_event_type) |
| vh_name | security_result.detection_fields | Unito da vhost_name_label (derivato da vh_name) |
| tls_fingerprint | security_result.detection_fields | Unito da tls_fingerprint_label (derivato da tls_fingerprint) |
| tempo | additional.fields | Unito da time_label (derivato da time) |
| kubernetes.namespace_name | additional.fields | Unito da namespace_name_label (derivato da kubernetes.namespace_name) |
| src_instance | additional.fields | Unito da src_instance_label (derivato da src_instance) |
| violation_rating | additional.fields | Unito da violation_rating_label (derivato da violation_rating) |
| req_size | additional.fields | Unito da req_size_label (convertito in stringa da req_size) |
| rsp_code | additional.fields | Unito da rsp_code_label (convertito in stringa da rsp_code) |
| rsp_code_class | additional.fields | Unito da rsp_code_class_label (convertito in stringa da rsp_code_class) |
| rsp_size | additional.fields | Unito da rsp_size_label (convertito in stringa da rsp_size) |
| original_path | additional.fields | Unito da original_path_label (derivato da original_path) |
| req_path | target.url | Valore copiato direttamente |
| req_headers_size | additional.fields | Unito da req_headers_size_label (derivato da req_headers_size) |
| recommended_action | additional.fields | Unito da recommended_action_label (derivato da recommended_action) |
| enforcement_mode | additional.fields | Unito da enforcement_mode_label (derivato da enforcement_mode) |
| src_ip | principal.ip, principal.asset.ip | Unito se corrisponde all'espressione regolare IPv4 |
| host | principal.ip, principal.asset.ip | Unito se corrisponde all'espressione regolare IPv4 |
| nome host | principal.hostname, principal.asset.hostname | Valore copiato direttamente se non vuoto o - |
| http_version | network.application_protocol_version | Valore copiato direttamente |
| http_version | network.application_protocol | Impostato su HTTP se contiene HTTP, su HTTPS se contiene HTTPS |
| rete | principal.nat_ip | Unito se corrisponde all'espressione regolare IPv4 |
| dst_ip | target.ip, target.asset.ip | Unito se corrisponde all'espressione regolare IPv4 |
| dst_port | target.port | Convertito in numero intero |
| src_port | principal.port | Convertito in numero intero |
| src_site | additional.fields | Unito da src_site_field (derivato da src_site) |
| sito | additional.fields | Unito da site_field (derivato da site) |
| cluster_name | additional.fields | Unito da cluster_name_field (derivato da cluster_name) |
| dominio | principal.administrative_domain | Valore copiato direttamente |
| metodo | network.http.method | Valore copiato direttamente se non vuoto o N/A |
| spazio dei nomi | target.namespace | Valore copiato direttamente |
| city | principal.location.city | Valore copiato direttamente |
| flusso | security_result.detection_fields | Unito da stream_label (derivato dallo stream) |
| regione | principal.location.country_or_region | Valore copiato direttamente |
| utente | principal.user.userid | Estratto dall'utente utilizzando il pattern grok per user_id |
| user_ip | target.ip, target.asset.ip | Unito da user_ip estratto |
| Cookie | additional.fields | Unito dal cookie (derivato dal cookie in req_headers) |
| X-F5-Request-Id | security_result.detection_fields | Unito da x_f5_request_id (derivato da X-F5-Request-Id in req_headers) |
| X-Request-Id | security_result.detection_fields | Unito da request_id (derivato da X-Request-Id in req_headers) |
| security_result | security_result | Unito direttamente |
| has_network, has_principal, has_target | metadata.event_type | Imposta su NETWORK_CONNECTION se tutti i valori sono true; STATUS_UPDATE se has_principal è true; altrimenti GENERIC_EVENT |
| metadata.vendor_name | Imposta su "F5_DCS" | |
| metadata.product_name | Impostato su "F5 DCS" | |
| intermediario | intermediario | Unito direttamente |
rsp_size |
event.idm.read_only_udm.network.received_bytes |
Mappato dal log delle modifiche |
dst |
event.idm.read_only_udm.target.ip e event.idm.read_only_udm.target.asset.ip |
Mappato dal log delle modifiche |
has_sec_event |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
app |
event.idm.read_only_udm.target.application |
Mappato dal log delle modifiche |
node_id |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
sample_rate |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
time_to_first_downstream_tx_byte |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
time_to_first_upstream_rx_byte |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
time_to_first_upstream_tx_byte |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
time_to_last_downstream_tx_byte |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
time_to_last_rx_byte |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
time_to_last_upstream_rx_byte |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
time_to_last_upstream_tx_byte |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
timeseries_enabled |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
sni |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
terminated_time |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
rtt_downstream_seconds |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
rtt_upstream_seconds |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
rsp_code_details |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
authority |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
connected_time |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
req_id |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
proxy_type |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
vh_type |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
dst_instance |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
lb_port |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
mtls |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
ja4_tls_fingerprint |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
duration_with_data_tx_delay |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
dst_site |
event.idm.read_only_udm.additional.fields |
Mappato dal log delle modifiche |
protocol and scheme |
event.idm.read_only_udm.network.application_protocol |
Mappato dal log delle modifiche |
referer |
event.idm.read_only_udm.network.http.referral_url |
Mappato dal log delle modifiche |
tls_cipher_suite |
event.idm.read_only_udm.network.tls.cipher |
Mappato dal log delle modifiche |
tls_version |
event.idm.read_only_udm.network.tls.version |
Mappato dal log delle modifiche |
user_agent |
event.idm.read_only_udm.network.http.user_agent |
Mappato dal log delle modifiche |
user_agent |
event.idm.read_only_udm.network.http.parsed_user_agent |
Mappato dal log delle modifiche |
browser_type |
event.idm.read_only_udm.principal.browser.browser_type |
Mappato dal log delle modifiche |
content-type |
event.idm.read_only_udm.principal.process.file.mime_type |
Mappato dal log delle modifiche |
response_flags |
security_result.detection_fields |
Mappato dal log delle modifiche |
original_authority |
event.idm.read_only_udm.target.administrative_domain |
Mappato dal log delle modifiche |
country |
event.idm.read_only_udm.principal.location.country_or_region |
Mappato dal log delle modifiche |
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.