Raccogli i log di Fastly CDN
Versione parser: 2.0
Questo documento spiega come importare i log della CDN Fastly in Google Security Operations utilizzando Amazon S3.
Fastly è una rete CDN (Content Delivery Network) e una piattaforma cloud perimetrale che fornisce servizi di distribuzione dei contenuti, sicurezza ed edge computing in tempo reale. La funzionalità Real-Time Log Streaming di Fastly può inviare log di accesso CDN, eventi WAF e altri dati di telemetria a varie destinazioni, tra cui Amazon S3, per il monitoraggio e l'analisi della sicurezza.
Prima di iniziare
Assicurati di soddisfare i seguenti prerequisiti:
- Un'istanza Google SecOps
- Accesso con privilegi al pannello di controllo o all'API di Fastly
- Accesso privilegiato ad AWS (S3, IAM)
- Un token API Fastly con ambito
globaloglobal:read
Crea un token API Fastly
- Accedi al pannello di controllo di Fastly all'indirizzo https://manage.fastly.com.
- Fai clic sull'icona utente nell'angolo in alto a destra.
- Vai ad Account > Token API personali.
- Fai clic su Crea token.
- Nella finestra di dialogo Genera token API, fornisci quanto segue:
- Nome: inserisci un nome descrittivo (ad esempio
Google SecOps S3 Logging Configuration). - Tipo: seleziona Token utente.
- Ambito: seleziona Accesso globale (obbligatorio per configurare gli endpoint di logging).
- Scadenza: seleziona Nessuna scadenza o imposta una data di scadenza appropriata.
- Nome: inserisci un nome descrittivo (ad esempio
- Fai clic su Crea token.
- Copia e salva il token API in modo sicuro.
Configura il bucket AWS S3 e IAM per Google SecOps
- Crea un bucket Amazon S3 seguendo questa guida dell'utente: Creazione di un bucket.
- Salva il nome e la regione del bucket per riferimento futuro (ad esempio,
fastly-cdn-logs). - Crea un utente seguendo questa guida dell'utente: Creazione di un utente IAM.
- Seleziona l'utente creato.
- Seleziona la scheda Credenziali di sicurezza.
- Fai clic su Create Access Key (Crea chiave di accesso) nella sezione Access Keys (Chiavi di accesso).
- Seleziona Servizio di terze parti come Caso d'uso.
- Fai clic su Avanti.
- (Facoltativo) Aggiungi un tag di descrizione.
- Fai clic su Crea chiave di accesso.
- Fai clic su Scarica file .csv per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
- Fai clic su Fine.
- Seleziona la scheda Autorizzazioni.
- Fai clic su Aggiungi autorizzazioni nella sezione Policy sulle autorizzazioni.
- Seleziona Aggiungi autorizzazioni.
- Seleziona Collega direttamente i criteri.
- Cerca la policy AmazonS3FullAccess.
- Seleziona la policy.
- Fai clic su Avanti.
- Fai clic su Aggiungi autorizzazioni.
Configura l'endpoint di logging di Fastly S3
Opzione A: configura tramite il pannello di controllo Fastly
- Accedi al pannello di controllo di Fastly all'indirizzo https://manage.fastly.com.
- Seleziona il servizio per cui vuoi configurare il logging.
- Fai clic su Modifica configurazione e seleziona Clona versione attiva per creare una nuova versione bozza.
- Fai clic su Logging nel menu di navigazione a sinistra.
- Nella sezione Amazon Web Services S3, fai clic su Crea endpoint.
Nel modulo Crea un endpoint Amazon S3, fornisci i seguenti dettagli di configurazione:
Impostazioni di base:
- Nome: inserisci un nome descrittivo (ad esempio
secops-s3-logs). - Posizionamento: seleziona Predefinito per la versione del formato (consigliato).
Formato log: inserisci la seguente stringa di formato JSON:
{"timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t","client_ip":"%{req.http.Fastly-Client-IP}V","geo_country":"%{client.geo.country_name}V","geo_city":"%{client.geo.city}V","geo_region":"%{client.geo.region}V","datacenter":"%{server.datacenter}V","host":"%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V","url":"%{json.escape(req.url)}V","request_method":"%{json.escape(req.method)}V","request_protocol":"%{json.escape(req.proto)}V","request_referer":"%{json.escape(req.http.referer)}V","request_user_agent":"%{json.escape(req.http.User-Agent)}V","response_state":"%{json.escape(fastly_info.state)}V","response_status":%{resp.status}V,"response_reason":%{if(resp.response, "\"%22\"+json.escape(resp.response)+\"%22\", \"null\")}V,"response_body_size":%{resp.body_bytes_written}V,"response_header_size":%{resp.header_bytes_written}V,"request_body_size":%{req.body_bytes_read}V,"request_header_size":%{req.header_bytes_read}V,"cache_status":"%{fastly_info.state}V","is_tls":"%{if(req.is_ssl, \"true\", \"false\")}V","tls_protocol":"%{cstr_escape(tls.client.protocol)}V","tls_cipher":"%{cstr_escape(tls.client.cipher)}V","server_identity":"%{json.escape(server.identity)}V","is_edge":%{if(fastly.ff.visits_this_service == 0, "true", "false")}V,"time_elapsed_usec":%{time.elapsed.usec}V,"time_start_sec":%{time.start.sec}V}
- Formato timestamp: lascia il valore predefinito (stringa compatibile con strftime).
- Nome: inserisci un nome descrittivo (ad esempio
Configurazione del bucket S3:
- Nome bucket: inserisci il nome del bucket S3 (ad esempio
fastly-cdn-logs). - Dominio: lascia vuoto se il bucket si trova nella regione US Standard. Per altre regioni, inserisci l'endpoint S3 appropriato (ad esempio,
s3-us-west-2.amazonaws.comper la regione us-west-2). - Metodo di accesso: seleziona Credenziali utente
- Chiave di accesso: inserisci la chiave di accesso AWS del passaggio 11.
- Chiave segreta: inserisci la chiave di accesso segreta AWS del passaggio 11.
- Period (Periodo): inserisci
3600(i log vengono finalizzati ogni ora).
Fai clic su Opzioni avanzate per espandere le impostazioni aggiuntive:
Impostazioni avanzate:
- Percorso: inserisci
fastly-cdn/(prefisso facoltativo per organizzare i log all'interno del bucket). - Chiave pubblica PGP: lascia vuoto (la crittografia non è richiesta per questa integrazione).
- Seleziona un formato per la riga di log: seleziona Vuoto (utilizziamo il formato JSON personalizzato).
- Compressione: seleziona gzip (consigliato per ridurre i costi di archiviazione).
- Livello di ridondanza: seleziona Standard.
- ACL: seleziona private (consigliato).
- Crittografia lato server: seleziona Nessuna (o configura in base ai tuoi requisiti di sicurezza).
- Byte massimi: inserisci
0(nessun limite massimo per le dimensioni del file).
- Percorso: inserisci
Fai clic su Crea per creare l'endpoint di logging.
Fai clic su Attiva nell'angolo in alto a destra.
Seleziona Attiva in produzione per eseguire il deployment delle modifiche alla configurazione.
Nella finestra di dialogo di conferma, fai clic su Attiva per confermare.
Opzione B: configura tramite l'API Fastly
Se preferisci configurare il logging tramite API, utilizza il seguente approccio:
Recupera l'ID servizio Fastly dal pannello di controllo o elencando i servizi:
curl -H "Fastly-Key: YOUR_FASTLY_TOKEN" https://api.fastly.com/serviceClona la versione attiva per creare una nuova versione bozza:
curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \ "https://api.fastly.com/service/SERVICE_ID/version/ACTIVE_VERSION/clone"Crea l'endpoint di logging S3 nella nuova versione bozza:
curl -X POST -H "Fastly-Key: YOUR_FASTLY_TOKEN" \ -H "Content-Type: application/x-www-form-urlencoded" \ "https://api.fastly.com/service/SERVICE_ID/version/NEW_VERSION/logging/s3" \ --data-urlencode 'name=secops-s3-logs' \ --data-urlencode 'bucket_name=fastly-cdn-logs' \ --data-urlencode 'access_key=YOUR_AWS_ACCESS_KEY' \ --data-urlencode 'secret_key=YOUR_AWS_SECRET_KEY' \ --data-urlencode 'path=fastly-cdn/' \ --data-urlencode 'period=3600' \ --data-urlencode 'gzip_level=9' \ --data-urlencode 'format_version=2' \ --data-urlencode 'format={"timestamp":"%{begin:%Y-%m-%dT%H:%M:%S%z}t","client_ip":"%{req.http.Fastly-Client-IP}V","geo_country":"%{client.geo.country_name}V","geo_city":"%{client.geo.city}V","host":"%{if(req.http.Fastly-Orig-Host, req.http.Fastly-Orig-Host, req.http.Host)}V","url":"%{json.escape(req.url)}V","request_method":"%{json.escape(req.method)}V","response_status":%{resp.status}V,"cache_status":"%{fastly_info.state}V"}'Attiva la nuova versione:
curl -X PUT -H "Fastly-Key: YOUR_FASTLY_TOKEN" \ "https://api.fastly.com/service/SERVICE_ID/version/NEW_VERSION/activate"
Verifica la distribuzione dei log su S3
- Attendi circa un'ora (in base al periodo configurato) per la finalizzazione del primo file di log.
- Nella console AWS, vai a S3 > Bucket.
- Fai clic sul nome del bucket (ad esempio
fastly-cdn-logs). - Vai alla cartella con prefisso
fastly-cdn/. Verifica che i file di log vengano creati con un pattern di denominazione simile al seguente:
fastly-cdn/YYYY-MM-DD-HH-MM-SS-RANDOM_STRING.log.gzScarica un file di log di esempio e verifica che il formato JSON corrisponda alla tua configurazione.
Configura un feed in Google SecOps per importare i log di Fastly CDN
- Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Feed.
- Fai clic su Aggiungi nuovo feed.
- Nella pagina successiva, fai clic su Configura un singolo feed.
- Inserisci un nome univoco per il Nome feed.
- Seleziona Amazon S3 V2 come Tipo di origine.
- Seleziona Fastly CDN come Tipo di log.
- Fai clic su Avanti e poi su Invia.
Specifica i valori per i seguenti campi:
- URI S3:
s3://fastly-cdn-logs/fastly-cdn/. - Opzione di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze.
- Età massima del file: includi i file modificati negli ultimi giorni (il valore predefinito è 180 giorni).
- ID chiave di accesso: chiave di accesso utente con accesso al bucket S3.
- Chiave di accesso segreta: chiave segreta dell'utente con accesso al bucket S3.
- Spazio dei nomi dell'asset: lo spazio dei nomi dell'asset.
- Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
- URI S3:
Fai clic su Avanti e poi su Invia.
Tabella di mappatura UDM
| Campo del log | mappatura UDM | Logica |
|---|---|---|
| request_protocol, response_state, response_reason, response_body_size, fastly_server, fastly_is_edge | additional.fields | Unite alle etichette create da ogni campo, se non vuote |
| metadata.event_type | Impostato su "GENERIC_EVENT", poi su "STATUS_UPDATE" se principal_mid_present è true | |
| request_method | network.http.method | Valore copiato direttamente |
| request_user_agent | network.http.parsed_user_agent | Convertito in parseduseragent e poi rinominato |
| request_referer | network.http.referral_url | Valore copiato direttamente |
| response_status | network.http.response_code | Convertito in stringa e poi in numero intero |
| request_user_agent | network.http.user_agent | Valore copiato direttamente |
| host | principal.asset.hostname | Valore copiato direttamente |
| client_ip | principal.asset.ip | Valore copiato direttamente (dopo la convalida grok come IP) |
| host | principal.hostname | Valore copiato direttamente |
| client_ip | principal.ip | Valore copiato direttamente (dopo la convalida grok come IP) |
| geo_city | principal.location.city | Valore copiato direttamente |
| geo_country | principal.location.country_or_region | Valore copiato direttamente |
| security_result | security_result | Valore copiato direttamente |
| url | target.url | Valore copiato direttamente |
| metadata.product_name | Imposta su "FASTLY_CDN" | |
| metadata.vendor_name | Imposta su "FASTLY_CDN" |
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.