Raccogliere i log di F5 Distributed Cloud Services

Supportato in:

Questo documento spiega come importare i log di F5 Distributed Cloud Services in Google Security Operations utilizzando Google Cloud Storage V2.

F5 Distributed Cloud Services è una piattaforma di gestione di sicurezza, networking e applicazioni basata su SaaS che fornisce infrastruttura cloud distribuita, distribuzione di 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 Google Cloud con l'API Cloud Storage abilitata
  • Autorizzazioni per creare e gestire bucket GCS
  • Autorizzazioni per gestire le policy IAM nei bucket GCS
  • Accesso con privilegi alla console F5 Distributed Cloud
  • Autorizzazioni per creare oggetti Global Log Receiver in F5 Distributed Cloud

Creare un bucket Google Cloud Storage

  1. Vai alla console Google Cloud.
  2. Seleziona il tuo progetto o creane uno nuovo.
  3. Nel menu di navigazione, vai a Cloud Storage > Bucket.
  4. Fai clic su Crea bucket.
  5. Fornisci i seguenti dettagli di configurazione:

    Impostazione Valore
    Assegna un nome al bucket Inserisci un nome univoco globale (ad esempio f5-dcs-logs).
    Tipo di località Scegli in base alle tue esigenze (regione singola, doppia regione, più regioni)
    Località Seleziona la posizione (ad esempio, us-central1).
    Classe di archiviazione Standard (consigliato per i log a cui si accede di frequente)
    Controllo dell'accesso Uniforme (consigliato)
    Strumenti di protezione (Facoltativo) Attiva il controllo delle versioni degli oggetti o la policy di conservazione
  6. Fai clic su Crea.

Configura F5 Distributed Cloud per l'esportazione in GCS

Aggiungere il bucket GCS alla lista consentita del firewall

  1. F5 Distributed Cloud Global Log Receiver richiede l'aggiunta dei seguenti intervalli di indirizzi IP alla lista consentita del firewall:

    • 193.16.236.64/29
    • 185.160.8.152/29
  2. 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

  1. Nella console Google Cloud, vai a IAM e amministrazione > Service account.
  2. Fai clic su Crea account di servizio.
  3. Fornisci i seguenti dettagli di configurazione:

    • Nome service account: inserisci f5-dcs-log-writer (o un nome descrittivo)
    • Descrizione service account: inserisci Service account for F5 Distributed Cloud to write logs to GCS
  4. Fai clic su Crea e continua.

  5. Nella sezione Concedi a questo account di servizio l'accesso al progetto:

    1. Fai clic su Seleziona un ruolo.
    2. Cerca e seleziona Amministratore oggetti di archiviazione.
  6. Fai clic su Continua.

  7. Fai clic su Fine.

Crea una chiave dell'account di servizio

  1. Nell'elenco Service account, fai clic sul account di servizio che hai creato (ad esempio, f5-dcs-log-writer).
  2. Vai alla scheda Chiavi.
  3. Fai clic su Aggiungi chiave > Crea nuova chiave.
  4. Seleziona JSON come tipo di chiave.
  5. Fai clic su Crea.
  6. Il file della chiave JSON viene scaricato sul computer.
  7. Salva questo file in modo sicuro. Ti servirà nei passaggi successivi.

Concedi autorizzazioni IAM sul bucket GCS

  1. Vai a Cloud Storage > Bucket.
  2. Fai clic sul nome del bucket (ad esempio f5-dcs-logs).
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:
    • Aggiungi entità: inserisci l'email del account di servizio (ad esempio, f5-dcs-log-writer@PROJECT_ID.iam.gserviceaccount.com).
    • Assegna i ruoli: seleziona Storage Object Admin.
  6. Fai clic su Salva.

Crea le credenziali Google Cloud nella console F5 Distributed Cloud

  1. Accedi alla console F5 Distributed Cloud all'indirizzo https://<tenant>.console.ves.volterra.io.
  2. Seleziona il servizio Multi-Cloud Network Connect dalla home page.
  3. Vai a Gestisci > Gestione siti > Credenziali cloud.
  4. Fai clic su Aggiungi credenziali cloud.
  5. Nella sezione Metadati:
    • Nome: inserisci un nome descrittivo (ad esempio, gcp-chronicle-logs).
    • (Facoltativo) Descrizione: inserisci Cloud Storage credentials for Google SecOps log export
  6. Nella sezione Tipo di credenziali cloud, seleziona Credenziali GCP.
  7. Fai clic su Configura nel campo Credenziali GCP.
  8. Nel menu a discesa Tipo di credenziali, seleziona File delle credenziali del service account.
  9. Fai clic su Carica file e seleziona il file di chiave JSON che hai scaricato nei passaggi precedenti.
  10. Fai clic su Applica.
  11. Fai clic su Salva ed esci.

Crea un ricevitore di log globale

  1. Nella console F5 Distributed Cloud, assicurati di trovarti nel servizio Multi-Cloud Network Connect.
  2. Vai a Gestisci > Gestione log > Ricevitore log globale.
  3. Fai clic su Aggiungi destinatario log globale.
  4. Nella sezione Metadati:

    • Nome: inserisci un nome descrittivo (ad esempio, chronicle-gcs-receiver).
    • (Facoltativo) Descrizione: inserisci Global log receiver for Google SecOps SIEM
  5. Nel menu a discesa Tipo di log, seleziona i tipi di log che vuoi esportare:

    • Log delle richieste: log di richieste/risposte HTTP con utente, percorso, metodo e codici di risposta
    • Eventi di sicurezza: eventi WAF, DDoS, protezione API, Bot Defense
    • Audit log: modifiche alla configurazione tramite API pubbliche
    • Log delle richieste DNS: log delle query DNS
  6. Nel menu a discesa Selezione messaggio di log, seleziona una delle seguenti opzioni:

    • Seleziona log dallo spazio dei nomi corrente: invia i log solo dallo spazio dei nomi corrente
    • Seleziona i log di tutti gli spazi dei nomi: invia i log di 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)
  7. Nel menu a discesa Configurazione ricevitore, seleziona Ricevitore bucket GCP.

  8. Nel campo Nome bucket GCP, inserisci il nome del bucket GCS (ad esempio f5-dcs-logs).

  9. Nel menu a discesa Credenziali Google Cloud, seleziona le credenziali cloud che hai creato in precedenza (ad esempio, gcp-chronicle-logs).

  10. (Facoltativo) Espandi Mostra campi avanzati per configurare le opzioni batch:

    • Opzioni di timeout batch: seleziona Timeout in secondi e inserisci un valore (valore predefinito: 300 secondi)
    • Batch Max Events: seleziona Max Events e inserisci un valore compreso tra 32 e 2000 (lascia il campo vuoto per nessun limite)
    • Byte batch: seleziona Byte max e inserisci un valore compreso tra 4096 e 1048576 (valore predefinito: 10485760 byte / 10 MB)
  11. Fai clic su Salva ed esci.

Testa la connessione

  1. Nell'elenco Ricevitore di log globale, individua il ricevitore che hai creato (ad esempio, chronicle-gcs-receiver).
  2. Fai clic sui tre puntini () nella colonna Azioni.
  3. Seleziona Prova connessione.
  4. Attendi il completamento del test.
  5. Dovrebbe essere visualizzato un messaggio che indica che la connessione è stata stabilita correttamente.

Verifica i log nel bucket GCS

  1. Vai a Cloud Storage > Bucket nella console GCP.
  2. Fai clic sul nome del bucket (ad esempio f5-dcs-logs).
  3. Verifica che i file di log vengano creati nel bucket.
  4. 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 del giorno, viene creata una sottocartella per ogni ora (HH)
    • Ogni 5 minuti, nella sottocartella oraria vengono scritti nuovi file gzip compressi
    • I file sono in formato NDJSON (JSON delimitato da nuova riga)
  5. Fai clic su un file gzip per scaricarlo e ispezionare il formato del log.

Recuperare 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'email del account di servizio

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed (ad esempio, F5 DCS Logs).
  5. Seleziona Google Cloud Storage V2 come Tipo di origine.
  6. Seleziona F5 Distributed Cloud Services come Tipo di log.
  7. Fai clic su Ottieni service account. Verrà visualizzata un'email univoca del account di servizio, ad esempio:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. Copia questo indirizzo email per utilizzarlo nel passaggio successivo.

  9. Fai clic su Avanti.

  10. 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-logs con 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 file trasferiti: elimina i file dopo il trasferimento riuscito.
      • Elimina file trasferiti e directory vuote: elimina i file e le directory vuote dopo il trasferimento riuscito.

    • Età massima del file: includi i file modificati nell'ultimo numero di 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

  11. Fai clic su Avanti.

  12. Controlla la nuova configurazione del feed 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 Visualizzatore oggetti Storage nel bucket GCS.

  1. Vai a Cloud Storage > Bucket.
  2. Fai clic sul nome del bucket (ad esempio f5-dcs-logs).
  3. Vai alla scheda Autorizzazioni.
  4. Fai clic su Concedi l'accesso.
  5. Fornisci i seguenti dettagli di configurazione:

    • Aggiungi entità: incolla l'email del account di servizio Google SecOps
    • Assegna i ruoli: seleziona Visualizzatore oggetti Storage
  6. Fai clic su Salva.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
_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 per data con RFC3339, 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 dal tag)
azione security_result.action Imposta su ALLOW se le corrispondenze lo consentono, BLOCK se le corrispondenze lo negano
gravità security_result.severity Imposta su HIGH se è presente un errore/avviso; CRITICAL se è critico; MEDIUM se è una notifica; LOW se è un'informazione/nota
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 numero decimale
longitude principal.location.region_longitude Convertito in numero decimale
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 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 Imposta su HTTP se contiene HTTP, 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 da 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 NETWORK_CONNECTION se tutte le condizioni sono vere; STATUS_UPDATE se has_principal è true; altrimenti GENERIC_EVENT
metadata.vendor_name Imposta su "F5_DCS"
metadata.product_name Imposta su "F5 DCS"
intermediario intermediario Unito direttamente

Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.