Raccogli i log di Fastly CDN

Versione parser: 2.0

Supportata in:

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 global o global:read

Crea un token API Fastly

  1. Accedi al pannello di controllo di Fastly all'indirizzo https://manage.fastly.com.
  2. Fai clic sull'icona utente nell'angolo in alto a destra.
  3. Vai ad Account > Token API personali.
  4. Fai clic su Crea token.
  5. 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.
  6. Fai clic su Crea token.
  7. Copia e salva il token API in modo sicuro.

Configura il bucket AWS S3 e IAM per Google SecOps

  1. Crea un bucket Amazon S3 seguendo questa guida dell'utente: Creazione di un bucket.
  2. Salva il nome e la regione del bucket per riferimento futuro (ad esempio, fastly-cdn-logs).
  3. Crea un utente seguendo questa guida dell'utente: Creazione di un utente IAM.
  4. Seleziona l'utente creato.
  5. Seleziona la scheda Credenziali di sicurezza.
  6. Fai clic su Create Access Key (Crea chiave di accesso) nella sezione Access Keys (Chiavi di accesso).
  7. Seleziona Servizio di terze parti come Caso d'uso.
  8. Fai clic su Avanti.
  9. (Facoltativo) Aggiungi un tag di descrizione.
  10. Fai clic su Crea chiave di accesso.
  11. Fai clic su Scarica file .csv per salvare la chiave di accesso e la chiave di accesso segreta per riferimento futuro.
  12. Fai clic su Fine.
  13. Seleziona la scheda Autorizzazioni.
  14. Fai clic su Aggiungi autorizzazioni nella sezione Policy sulle autorizzazioni.
  15. Seleziona Aggiungi autorizzazioni.
  16. Seleziona Collega direttamente i criteri.
  17. Cerca la policy AmazonS3FullAccess.
  18. Seleziona la policy.
  19. Fai clic su Avanti.
  20. Fai clic su Aggiungi autorizzazioni.

Configura l'endpoint di logging di Fastly S3

Opzione A: configura tramite il pannello di controllo Fastly

  1. Accedi al pannello di controllo di Fastly all'indirizzo https://manage.fastly.com.
  2. Seleziona il servizio per cui vuoi configurare il logging.
  3. Fai clic su Modifica configurazione e seleziona Clona versione attiva per creare una nuova versione bozza.
  4. Fai clic su Logging nel menu di navigazione a sinistra.
  5. Nella sezione Amazon Web Services S3, fai clic su Crea endpoint.
  6. 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).

    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.com per 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).
  7. 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).
  8. Fai clic su Crea per creare l'endpoint di logging.

  9. Fai clic su Attiva nell'angolo in alto a destra.

  10. Seleziona Attiva in produzione per eseguire il deployment delle modifiche alla configurazione.

  11. 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:

  1. Recupera l'ID servizio Fastly dal pannello di controllo o elencando i servizi:

    curl -H "Fastly-Key: YOUR_FASTLY_TOKEN" https://api.fastly.com/service
    
  2. Clona 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"
    
  3. 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"}'
    
  4. 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

  1. Attendi circa un'ora (in base al periodo configurato) per la finalizzazione del primo file di log.
  2. Nella console AWS, vai a S3 > Bucket.
  3. Fai clic sul nome del bucket (ad esempio fastly-cdn-logs).
  4. Vai alla cartella con prefisso fastly-cdn/.
  5. 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.gz
    
  6. Scarica 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

  1. Vai a Impostazioni > Gestione dei dati > Feed. Se utilizzi una piattaforma solo SIEM, vai a Impostazioni > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Inserisci un nome univoco per il Nome feed.
  5. Seleziona Amazon S3 V2 come Tipo di origine.
  6. Seleziona Fastly CDN come Tipo di log.
  7. Fai clic su Avanti e poi su Invia.
  8. 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.
  9. 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.