Raccogliere i log di F5 Shape
Questo documento spiega come importare i log F5 Shape in Google Security Operations utilizzando Google Cloud Storage V2.
F5 Distributed Cloud Bot Defense (in precedenza Shape Security) protegge le applicazioni da attacchi automatizzati identificando e mitigando i bot dannosi. Bot Defense utilizza JavaScript e gli SDK per dispositivi mobili nativi per raccogliere dati di telemetria dai browser client e dai dispositivi mobili, esaminandoli prima che le richieste raggiungano l'applicazione. Il servizio fornisce dashboard e report integrati per visualizzare informazioni dettagliate sul traffico analizzato, inclusi eventi di sicurezza, log di accesso e log di controllo.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Un progetto GCP con l'API Cloud Storage abilitata
- Autorizzazioni per creare e gestire bucket GCS
- Autorizzazioni per gestire le policy IAM nei bucket GCS
- Accesso privilegiato alla console F5 Distributed Cloud
- Un account F5 Distributed Cloud con accesso al servizio Multi-Cloud Network Connect o Shared Configuration
Creazione di 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 univoco globale (ad esempio f5-xc-logs).Tipo di località Scegli in base alle tue esigenze (regione singola, due regioni, più regioni). Località Seleziona la posizione (ad esempio, us-central1).Classe di archiviazione Standard (consigliato per i log ad accesso frequente). Controllo dell'accesso Uniforme (consigliato). Strumenti di protezione (Facoltativo) Abilita il controllo delle versioni degli oggetti o la policy di conservazione. Fai clic su Crea.
Genera credenziali API F5 Shape
F5 Distributed Cloud utilizza certificati API (mTLS) o token API per l'autenticazione. I certificati API sono consigliati per una maggiore sicurezza.
Crea certificato API
- Accedi alla console F5 Distributed Cloud.
- Nella home page della console, seleziona Amministrazione.
- Nel menu di navigazione a sinistra, vai a Gestione personale > Credenziali.
- Fai clic su Aggiungi credenziali.
- Nella sezione Metadati, inserisci un Nome per il certificato (ad esempio,
secops-integration). - Dall'elenco Tipo di credenziale, seleziona Certificato API.
- Inserisci una password e confermala nel campo Conferma password.
Seleziona una data di scadenza dall'elenco del calendario.
Fai clic su Scarica per generare e scaricare il certificato nel formato di file
.p12.Salva in modo sicuro il file del certificato scaricato e la password per utilizzarli in un secondo momento.
Crea credenziali Google Cloud in F5 Distributed Cloud
F5 Distributed Cloud richiede le credenziali del service account per scrivere i log nel bucket GCS. Google Cloud
Crea un service account Google Cloud
- Nella console Google Cloud, vai a IAM e amministrazione > Service Accounts.
- Fai clic su Crea account di servizio.
- Fornisci i seguenti dettagli di configurazione:
- Nome service account: inserisci
f5-xc-log-writer(o il nome che preferisci). - Descrizione service account: inserisci
Service account for F5 Distributed Cloud to write logs to GCS.
- Nome service account: 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 Amministratore oggetti di archiviazione.
- Fai clic su Continua.
- Fai clic su Fine.
Concedi autorizzazioni IAM sul bucket GCS
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
f5-xc-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: inserisci l'email del account di servizio (ad es.
f5-xc-log-writer@PROJECT_ID.iam.gserviceaccount.com). - Assegna i ruoli: seleziona Storage Object Admin.
- Aggiungi entità: inserisci l'email del account di servizio (ad es.
- Fai clic su Salva.
Crea la chiave dell'account di servizio
- Nella console Google Cloud, vai a IAM e amministrazione > Service Accounts.
- Trova il account di servizio (ad esempio
f5-xc-log-writer) e fai clic. - 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 verrà scaricato automaticamente. Salva questo file in modo sicuro.
Aggiungi Google Cloud credenziali cloud a F5 Distributed Cloud
- Nella console F5 Distributed Cloud, dalla home page, seleziona Multi-Cloud Network Connect o Shared Configuration.
- Nel menu di navigazione a sinistra, vai a Gestisci > Gestione sito > Credenziali cloud.
- Fai clic su Aggiungi credenziali cloud.
- Nella sezione Metadati, inserisci un Nome (ad esempio,
gcp-secops-logs). - Dall'elenco Cloud Credentials Type (Tipo di credenziali cloud), seleziona GCP Credentials (Credenziali GCP).
- Nella sezione Credenziali GCP, fai clic su Configura.
- Nella sezione Chiave account di servizio:
- Nell'elenco Tipo di segreto, seleziona Segreto bendato.
- Dall'elenco Azione, seleziona Blindfold New Secret.
- Dall'elenco Tipo di policy, seleziona Integrata.
- Nel campo Secret to Blindfold (Segreto da oscurare), incolla l'intero contenuto del file della chiave JSON che hai scaricato.
- Fai clic su Applica.
- Fai clic su Salva ed esci.
Configurare il ricevitore di log globale per GCS
F5 Distributed Cloud Global Log Receiver trasmette i log a GCS ogni 5 minuti in formato NDJSON (JSON delimitato da nuova riga).
Crea un ricevitore di log globale
- Nella console F5 Distributed Cloud, dalla home page, seleziona Multi-Cloud Network Connect o Shared Configuration.
- Per Multi-Cloud Network Connect: vai a Gestisci > Gestione log > Ricevitore log globale.
- Per la configurazione condivisa: vai a Gestisci > Ricevitore log globale.
- Fai clic su Aggiungi destinatario log globale.
- Nella sezione Metadati, inserisci un Nome (ad esempio,
secops-gcs-receiver). - Se vuoi, aggiungi Etichette e una Descrizione.
Dall'elenco Tipo di log, seleziona i tipi di log che vuoi raccogliere:
- Log delle richieste: log di accesso HTTP dai bilanciatori del carico
- Eventi di sicurezza: eventi di sicurezza di Bot Defense e WAF
- Audit log: audit log amministrativi e di configurazione
- Log delle richieste DNS: log delle query DNS
Dall'elenco Log Message Selection (Selezione messaggio di log):
- Se utilizzi il servizio Multi-Cloud Network Connect, seleziona Seleziona i log dallo spazio dei nomi corrente (spazio dei nomi di sistema).
- Se utilizzi il servizio Configurazione condivisa, scegli una delle seguenti opzioni:
- Seleziona log dallo spazio dei nomi corrente: invia i log solo dallo spazio dei nomi condiviso.
- Seleziona i log di tutti gli spazi dei nomi: invia i log di tutti gli spazi dei nomi.
- Seleziona i log in spazi dei nomi specifici: inserisci nomi di spazi dei nomi specifici e fai clic su Aggiungi elemento per aggiungerne altri.
Dall'elenco Configurazione ricevitore, seleziona Bucket GCP.
Nella sezione Bucket GCP, fornisci la seguente configurazione:
- Nome bucket GCP: inserisci il nome del bucket GCS (ad esempio
f5-xc-logs). - Credenziali cloud Google Cloud: seleziona dall'elenco le credenziali cloud che hai creato (ad esempio,
gcp-secops-logs).
- Nome bucket GCP: inserisci il nome del bucket GCS (ad esempio
Configurare le impostazioni avanzate (facoltativo)
- Fai clic sul pulsante di attivazione/disattivazione Mostra campi avanzati.
Nella sezione Opzioni batch, configura le seguenti opzioni (facoltative):
- Opzioni di timeout batch: seleziona Timeout in secondi e inserisci un valore (valore predefinito:
300secondi). - Batch Max Events: seleziona Max Events e inserisci un valore compreso tra 32 e 2000 (facoltativo).
- Byte batch: seleziona Byte max e inserisci un valore compreso tra 4096 e 1048576 (valore predefinito:
10485760byte / 10 MB).
- Opzioni di timeout batch: seleziona Timeout in secondi e inserisci un valore (valore predefinito:
Completare e testare la configurazione
- Fai clic su Salva ed esci per creare il ricevitore di log globale.
- Nell'elenco Global Log Receiver, individua il ricevitore (ad esempio
secops-gcs-receiver). - Nella colonna Azioni, fai clic sui tre puntini … e seleziona Testa connessione.
Attendi il completamento del test. Un messaggio di operazione riuscita indica che la connessione funziona.
Verifica che i log vengano scritti in GCS:
- Vai a Cloud Storage > Bucket nella console di GCP.
- Fai clic sul nome del bucket (ad esempio
f5-xc-logs). - Entro 5-10 minuti, dovresti visualizzare le cartelle create con la seguente struttura:
- Cartella giornaliera:
YYYY-MM-DD/ - Sottocartella oraria:
YYYY-MM-DD/HH/ - File di log:
YYYY-MM-DD/HH/logs_YYYYMMDDHHMMSS.ndjson.gz
- Cartella giornaliera:
Configurare la lista consentita del firewall
F5 Distributed Cloud richiede che intervalli IP specifici siano consentiti nel firewall per la distribuzione dei log.
Aggiungi i seguenti intervalli di indirizzi IP alla lista consentita del firewall:
193.16.236.64/29185.160.8.152/29
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.
Recuperare l'email del account di servizio
- Vai a Impostazioni SIEM > 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 esempio,
F5 Distributed Cloud Bot Defense). - Seleziona Google Cloud Storage V2 come Tipo di origine.
- Seleziona F5_SHAPE come Tipo di log.
Fai clic su Ottieni service account. Verrà visualizzata un'email univoca del account di servizio, ad esempio:
secops-12345678@secops-gcp-prod.iam.gserviceaccount.comCopia l'indirizzo email da utilizzare nel passaggio successivo.
Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
URL del bucket di archiviazione: inserisci l'URI del bucket GCS con il percorso del prefisso:
gs://f5-xc-logs/- Sostituisci
f5-xc-logscon il nome effettivo del bucket GCS. - Se hai configurato un prefisso specifico nel ricevitore di log globale, includilo nel percorso (ad esempio,
gs://f5-xc-logs/bot-defense/).
- Sostituisci
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 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.
Fai clic su Avanti.
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.
- Vai a Cloud Storage > Bucket.
- Fai clic sul nome del bucket (ad esempio
f5-xc-logs). - Vai alla scheda Autorizzazioni.
- Fai clic su Concedi l'accesso.
- Fornisci i seguenti dettagli di configurazione:
- Aggiungi entità: incolla l'email del account di servizio Google SecOps
- Assegna i ruoli: seleziona Visualizzatore oggetti Storage
- Fai clic su Salva.
Tabella di mappatura UDM
| Campo log | Mappatura UDM | Logic |
|---|---|---|
| msg.requestHeaders.Proxy-Client-IP, msg.requestHeaders.WF-Forwarded-For, msg.requestHeaders.X-Forwarded-For, msg.requestHeaders.wl-proxy-client-ip, msg.hashedUserAgent, msg.transactionId, msg.hashedUsername, msg.dcgShapeFailedOn, ShapeShifterId, eventType, eventId, latRequest, latResponse, latTotal, latRspWait, count, latEccWait | additional.fields | Unite dalle etichette create da vari campi |
| intermediario | intermediario | Valore copiato direttamente se non è vuoto |
| descrizione | metadata.description | Valore copiato direttamente |
| target, has_principal_machine | metadata.event_type | Impostato su NETWORK_HTTP se target != "", altrimenti STATUS_UPDATE se has_principal_machine == true, altrimenti GENERIC_EVENT |
| app | network.application_protocol | Valore in maiuscolo |
| requestMethod, msg.method | network.http.method | Valore di requestMethod se non è vuoto, altrimenti msg.method |
| requestClientApplication, msg.requestHeaders.User-Agent | network.http.parsed_user_agent | Valore di requestClientApplication se non è vuoto, altrimenti msg.requestHeaders.User-Agent, convertito in user agent analizzato |
| requestContext, msg.requestHeaders.Referer | network.http.referral_url | Valore di requestContext se non è vuoto, altrimenti msg.requestHeaders.Referer |
| msg.sseResponseCode, prCode | network.http.response_code | Valore di msg.sseResponseCode se non è vuoto, altrimenti prCode, convertito in numero intero |
| requestClientApplication, msg.requestHeaders.User-Agent | network.http.user_agent | Valore di requestClientApplication se non è vuoto, altrimenti msg.requestHeaders.User-Agent |
| requestHeader.x-shape-src-virtual | observer.ip | Valore copiato direttamente |
| entità | entità | Valore copiato direttamente |
| msg.host | principal.asset.hostname | Valore copiato direttamente |
| src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For | principal.asset.ip | Valore di src se non è vuoto, altrimenti msg.src, altrimenti msg.trueClientIP, altrimenti il primo IP di X-Forwarded-For se != src |
| msg.host | principal.hostname | Valore copiato direttamente |
| src, msg.src, msg.trueClientIP, requestHeader.X-Forwarded-For | principal.ip | Valore di src se non è vuoto, altrimenti msg.src, altrimenti msg.trueClientIP, altrimenti il primo IP di X-Forwarded-For se != src |
| msg.requestHeaders | principal.resource.attribute.labels | Unite dalle coppie chiave-valore in msg.requestHeaders |
| msg.uri | principal.url | Valore copiato direttamente |
| security_result | security_result | Valore copiato direttamente |
| deviceExternalId | security_result.about.asset_id | Valore copiato direttamente |
| flowLabel, agentLabel, requestHeader.Content-Length, requestHeader.Content-Type, requestHeader.Accept, requestHeader.Accept-Encoding, browserType, accountInfo, requestHeader.Via, asn, tid, ctag, requestHeader.Cache-Control, transactionResult | security_result.about.labels | Unite dalle etichette create da vari campi |
| act, msg.transactionResult | security_result.action | Impostato su ALLOW se act corrisponde a PASS e isAttack, altrimenti UNKNOWN_ACTION; oppure ALLOW se msg.transactionResult == Success, BLOCK se Failure |
| act, msg.transactionResult | security_result.action_details | Valore di act se non è vuoto, altrimenti msg.transactionResult |
| gravità | security_result.severity | Imposta su HIGH se in Error, error, warning; CRITICAL se corrisponde a critical; MEDIUM se notice; LOW se in information, info, INFO |
| gravità | security_result.severity_details | Valore copiato direttamente |
| attackCause | security_result.threat_name | Valore copiato direttamente |
| target | target | Valore copiato direttamente |
| appName | target.application | Valore copiato direttamente |
| dst, msg.dst | target.asset.ip | Valore di dst se non è vuoto, altrimenti msg.dst |
| dhost | target.hostname | Valore copiato direttamente |
| dst, msg.dst | target.ip | Valore di dst se non è vuoto, altrimenti msg.dst |
| countryName | target.location.country_or_region | Valore copiato direttamente |
| dpt | target.port | Convertito in numero intero |
| msg.responseHeaders | target.resource.attribute.labels | Unite dalle coppie chiave-valore in msg.responseHeaders |
| richiesta | target.url | Valore copiato direttamente |
| requestHeader.X-Forwarded-For | intermediary.ip | Impostato sugli IP successivi dell'array X-Forwarded-For |
| metadata.product_name | Imposta su "Forma" | |
| metadata.vendor_name | Impostato su "F5" |
Hai bisogno di ulteriore assistenza? Ricevi risposte dai membri della community e dai professionisti di Google SecOps.