Raccogliere i log di AWS WAF

Supportato in:

Questo documento spiega come raccogliere i log di AWS Web Application Firewall (WAF) configurando un feed di Google Security Operations. Il parser trasforma i log non elaborati in formato JSON in un formato strutturato conforme a UDM di Google SecOps. Estrae campi come indirizzi IP, URL, user agent e dettagli delle regole di sicurezza, mappandoli ai campi UDM corrispondenti per una rappresentazione e un'analisi coerenti.

Prima di iniziare

*Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Accesso privilegiato ad AWS

Configura il bucket Amazon S3

  1. Crea un bucket Amazon S3 seguendo questa guida utente: Creazione di un bucket
  2. Salva il nome e la regione del bucket per utilizzarli in un secondo momento.
  3. Crea un utente seguendo questa guida: Creazione di un utente IAM.
  4. Seleziona l'utente creato.
  5. Seleziona la scheda Credenziali di sicurezza.
  6. Fai clic su Crea chiave di accesso nella sezione Chiavi di accesso.
  7. Seleziona Servizio di terze parti come Caso d'uso.
  8. Fai clic su Avanti.
  9. (Facoltativo) Aggiungi il tag della 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 un utilizzo successivo.
  12. Fai clic su Fine.
  13. Seleziona la scheda Autorizzazioni.
  14. Fai clic su Aggiungi autorizzazioni nella sezione Criteri per le autorizzazioni.
  15. Seleziona Aggiungi autorizzazioni.
  16. Seleziona Allega direttamente i criteri.
  17. Cerca e seleziona il criterio AmazonS3FullAccess.
  18. Fai clic su Avanti.
  19. Fai clic su Aggiungi autorizzazioni.

Crea un ACL (elenco di controllo dell'accesso) web WAF

Se non hai ancora configurato AWS WAF, devi creare un ACL web WAF (elenco di controllo dell'accesso). Per le configurazioni esistenti, puoi passare alla procedura successiva.

  1. Nella console AWS, cerca e seleziona AWS WAF & Shield.
  2. Fai clic su Crea ACL web.
  3. Specifica le seguenti impostazioni:
    • Nome: assegna un nome all'ACL (ad esempio, my-waf-web-acl).
    • Regione: scegli la regione in cui vuoi applicare il WAF.
    • Metriche CloudWatch: abilita la raccolta delle metriche per monitorare l'attività e le regole attivate.
  4. Una volta creata, seleziona la web ACL per cui vuoi attivare la registrazione.

Come configurare la registrazione di AWS WAF

  1. Nella console AWS WAF, vai alla scheda Logging della tua ACL web.
  2. Fai clic su Abilita logging.
  3. Seleziona Amazon S3 come destinazione per i log.
  4. Scegli il bucket S3 creato in precedenza per archiviare i log.
  5. (Facoltativo) Configura un prefisso per organizzare i log (ad esempio, waf-logs/).
  6. Fai clic su Salva.

Verifica le autorizzazioni per il bucket S3

Assicurati che il bucket S3 disponga delle autorizzazioni appropriate per consentire ad AWS WAF di scrivere i log.

  1. Vai alla console S3.
  2. Seleziona il bucket in cui verranno archiviati i log.
  3. Nella scheda Autorizzazioni, aggiungi la seguente policy del bucket per consentire ad AWS WAF di scrivere i log:

    {
      "Version": "2012-10-17",
      "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
                "Service": "wafv2.amazonaws.com"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::your-log-bucket-name/*"
          }
      ]
    }
    
  1. Fai clic su Salva.

Configurare i feed

Esistono due diversi punti di accesso per configurare i feed nella piattaforma Google SecOps:

  • Impostazioni SIEM > Feed > Aggiungi nuovo feed
  • Hub dei contenuti > Pacchetti di contenuti > Inizia

Come configurare il feed AWS WAF

  1. Fai clic sul pacchetto Amazon Cloud Platform.
  2. Individua il tipo di log AWS WAF.
  3. Specifica i valori nei seguenti campi.

    • Tipo di origine: Amazon SQS V2
    • Nome coda: il nome della coda SQS da cui leggere
    • URI S3: l'URI del bucket.
      • s3://your-log-bucket-name/
        • Sostituisci your-log-bucket-name con il nome effettivo del bucket S3.
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze di importazione.

    • Età massima del file: includi i file modificati nell'ultimo numero di giorni. Il valore predefinito è 180 giorni.

    • ID chiave di accesso alla coda SQS: una chiave di accesso all'account che è una stringa alfanumerica di 20 caratteri.

    • Chiave di accesso segreta della coda SQS: una chiave di accesso all'account che è una stringa alfanumerica di 40 caratteri.

    Opzioni avanzate

    • Nome feed: un valore precompilato che identifica il feed.
    • Spazio dei nomi dell'asset: lo spazio dei nomi associato al feed.
    • Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.
  4. Fai clic su Crea feed.

Per ulteriori informazioni sulla configurazione di più feed per diversi tipi di log all'interno di questa famiglia di prodotti, consulta Configurare i feed per prodotto.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
azione security_result.action Se l'azione è ALLOW, imposta security_result.action su ALLOW e security_result.severity su INFORMATIONAL. Se l'azione è BLOCK, imposta security_result.action su BLOCK. Se l'azione è CAPTCHA e captchaResponse.responseCode è 405, imposta security_result.action su BLOCK e security_result.action_details su "CAPTCHA {captchaResponse.failureReason}".
captchaResponse.failureReason security_result.action_details Utilizzato in combinazione con action e captchaResponse.responseCode per determinare security_result.action_details.
captchaResponse.responseCode security_result.action_details Utilizzato in combinazione con action e captchaResponse.failureReason per determinare security_result.action_details.
httpRequest.clientIp principal.ip, principal.asset.ip Mappato direttamente su principal.ip e principal.asset.ip.
httpRequest.headers target.hostname, target.asset.hostname, network.http.user_agent, network.http.parsed_user_agent, network.http.referral_url, target.location.country_or_region, target.resource.attribute.labels, target.user.userid Itera ogni intestazione in httpRequest.headers. Se il nome dell'intestazione è "host" o "Host", il valore viene mappato su target.hostname e target.asset.hostname. Se il nome dell'intestazione è "User-Agent" o "user-agent", il valore viene mappato a network.http.user_agent e analizzato in network.http.parsed_user_agent. Se il nome dell'intestazione è "Referer" o "referer", il valore viene mappato su network.http.referral_url. Se il nome dell'intestazione è "(?i)time-zone", il valore viene mappato su target.location.country_or_region. Se il nome dell'intestazione è "authorization", il valore viene decodificato, il nome utente viene estratto e mappato a target.user.userid. Tutte le altre intestazioni vengono aggiunte come coppie chiave-valore a target.resource.attribute.labels.
httpRequest.httpMethod network.http.method Mappato direttamente a network.http.method.
httpRequest.requestId network.session_id Mappato direttamente a network.session_id.
httpRequest.uri target.url Mappato direttamente su target.url.
httpSourceId target.resource.name Mappato direttamente a target.resource.name.
httpSourceName metadata.product_event_type Mappato direttamente a metadata.product_event_type.
etichette security_result.rule_labels Esegue l'iterazione su ogni etichetta in labels. Se il nome dell'etichetta non è vuoto, viene aggiunto come coppia chiave-valore a security_result.rule_labels.
nonTerminatingMatchingRules security_result.action_details, security_result.rule_labels Esegue l'iterazione di ogni regola in nonTerminatingMatchingRules. Se l'azione è ALLOW e l'azione della regola è CAPTCHA, imposta security_result.action_details su "CAPTCHA SUCCESSFUL" e aggiungi l'ID regola a security_result.rule_labels con la chiave "nonTerminatingCaptchaRuleName". Se l'azione è BLOCK o ALLOW e l'azione della regola è COUNT, imposta security_result.action_details su "COUNT RULE" e aggiungi l'ID regola a security_result.rule_labels con la chiave "nonTerminatingCountRuleName". Se l'azione è BLOCK o ALLOW e l'azione della regola è CHALLENGE, imposta security_result.action_details su "COUNT RULE" e aggiungi l'ID regola a security_result.rule_labels con la chiave "nonTerminatingChallengeRuleName".
rateBasedRuleList security_result.rule_id, security_result.rule_name, security_result.description Se terminatingRuleType è "RATE_BASED", scorre ogni regola in rateBasedRuleList. Se terminatingRuleId corrisponde al nome della regola, l'ID regola, il nome della regola e la descrizione vengono mappati rispettivamente a security_result.rule_id, security_result.rule_name e security_result.description.
responseCodeSent network.http.response_code Mappato direttamente a network.http.response_code e convertito in un numero intero.
ruleGroupList intermediary.labels, security_result.rule_id, security_result.rule_name, security_result.description, security_result.detection_fields Itera ogni gruppo di regole in ruleGroupList. L'ID gruppo di regole viene aggiunto come coppia chiave-valore a intermediary.labels. Se terminatingRuleType è "MANAGED_RULE_GROUP" e terminatingRuleId corrisponde all'ID del gruppo di regole, l'ID regola, il nome della regola e la descrizione vengono mappati rispettivamente a security_result.rule_id, security_result.rule_name e security_result.description. Se terminatingRuleType è "GROUP", l'ID regola di terminazione viene estratto e mappato a security_result.rule_name e security_result.description. L'ID del gruppo di regole di terminazione viene aggiunto a security_result.rule_labels con la chiave "terminatingRuleGroupName". Se terminatingRuleType è "REGULAR", l'azione della regola di terminazione viene estratta e aggiunta ai campi security_result.detectioncon la chiave "terminatingRuleAction{index}".
terminatingRuleId security_result.rule_id, security_result.rule_name, security_result.description Se terminatingRuleType è "RATE_BASED", "MANAGED_RULE_GROUP" o "REGULAR", terminatingRuleId viene mappato a security_result.rule_id, security_result.rule_name e utilizzato per creare security_result.description.
terminatingRuleMatchDetails security_result.description, security_result.category_details, security_result.detection_fields Itera ogni corrispondenza in terminatingRuleMatchDetails. Imposta security_result.description su "Terminating Rule". Se il tipo di condizione non è vuoto, viene aggiunto a security_result.category_details. Se la posizione non è vuota, viene aggiunta a security_result.detection_fields con la chiave "location". Per ogni elemento di dati corrispondente, viene aggiunto a security_result.detection_fields con la chiave "matchedData".
terminatingRuleType security_result.rule_type Mappato direttamente su security_result.rule_type.
timestamp metadata.event_timestamp Convertito in un timestamp e mappato a metadata.event_timestamp.
webaclId intermediary.resource.name Mappato direttamente su intermediary.resource.name.
metadata.vendor_name Imposta il valore su "AMAZON".
metadata.product_name Imposta "AWS Web Application Firewall".
metadata.log_type Imposta il valore su "AWS_WAF".
network.application_protocol Imposta su "HTTP".
metadata.event_type Imposta su "NETWORK_HTTP" se httpRequest.headers contiene un'intestazione "host" o "Host". In caso contrario, imposta "STATUS_UPDATE".

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