Raccogliere i log WAF di Azure

Supportato in:

Questo documento spiega come esportare i log del web application firewall (WAF) di Azure in Google Security Operations utilizzando un account di archiviazione Azure. Il parser gestisce i log in formato JSON, trasformandoli in UDM. Elabora i log contenenti un array records iterando ogni record e mappando campi specifici alle proprietà UDM. Se l'array records è assente, il parser gestisce il log come un singolo evento, estraendo e mappando i campi di conseguenza.

Prima di iniziare

Assicurati di soddisfare i seguenti prerequisiti:

  • Istanza Google SecOps
  • Un tenant Azure attivo
  • Accesso con privilegi ad Azure

Configura l'account di archiviazione di Azure

  1. Nella console Azure, cerca Storage accounts.
  2. Fai clic su Crea.
  3. Specifica i valori per i seguenti parametri di input:
    • Abbonamento: seleziona l'abbonamento.
    • Gruppo di risorse: seleziona il gruppo di risorse.
    • Regione: seleziona la regione.
    • Rendimento: seleziona il rendimento (consigliato Standard).
    • Ridondanza: seleziona la ridondanza (consigliata GRS o LRS).
    • Nome account di archiviazione: inserisci un nome per il nuovo account di archiviazione.
  4. Fai clic su Review + create (Rivedi e crea).
  5. Controlla la panoramica dell'account e fai clic su Crea.
  6. Nella pagina Panoramica account di archiviazione, seleziona il sottomenu Chiavi di accesso in Sicurezza e networking.
  7. Fai clic su Mostra accanto a key1 o key2.
  8. Fai clic su Copia negli appunti per copiare la chiave.
  9. Salva la chiave in una posizione sicura per utilizzarla in un secondo momento.
  10. Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Endpoint in Impostazioni.
  11. Fai clic su Copia negli appunti per copiare l'URL dell'endpoint Blob service, ad esempio https://<storageaccountname>.blob.core.windows.net.
  12. Salva l'URL dell'endpoint in una posizione sicura per utilizzarlo in un secondo momento.

Come configurare l'esportazione dei log per i log WAF di Azure

  1. Accedi al portale di Azure utilizzando il tuo account con privilegi.
  2. Vai a Regole del web application firewall (WAF) e seleziona un WAF da monitorare.
  3. Seleziona Monitoraggio > Impostazioni di diagnostica.
  4. Fai clic su + Aggiungi impostazione di diagnostica.
    • Inserisci un nome descrittivo per l'impostazione di diagnostica.
  5. Seleziona allLogs.
  6. Seleziona la casella di controllo Archivia in un account di archiviazione come destinazione.
    • Specifica l'abbonamento e l'account di archiviazione.
  7. Fai clic su Salva.

Configurare i feed

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

  • Impostazioni SIEM > Feed
  • Hub dei contenuti > Pacchetti di contenuti

Configurare i feed da Impostazioni SIEM > Feed

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

Per configurare un singolo feed:

  1. Vai a Impostazioni SIEM > Feed.
  2. Fai clic su Aggiungi nuovo feed.
  3. Nella pagina successiva, fai clic su Configura un singolo feed.
  4. Nel campo Nome feed, inserisci un nome per il feed, ad esempio Log WAF di Azure.
  5. Seleziona Microsoft Azure Blob Storage come Tipo di origine.
  6. Seleziona Azure WAF come Tipo di log.
  7. Fai clic su Avanti.
  8. Specifica i valori per i seguenti parametri di input:

    • URI di Azure: l'URL dell'endpoint blob.
      • ENDPOINT_URL/BLOB_NAME
        • Sostituisci quanto segue:
          • ENDPOINT_URL: l'URL dell'endpoint blob (https://<storageaccountname>.blob.core.windows.net)
          • BLOB_NAME: il nome del blob (ad esempio, <logname>-logs)
    • URI è un: seleziona il TIPO DI URI in base alla configurazione del flusso di log (Singolo file | Directory | Directory che include sottodirectory).
    • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze di importazione.

    • Chiave condivisa: la chiave di accesso ad Azure Blob Storage.

    • 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.

  10. Controlla la nuova configurazione del feed nella schermata Finalizza e poi fai clic su Invia.

Configurare i feed dall'hub dei contenuti

Specifica i valori per i seguenti campi:

  • URI di Azure: l'URL dell'endpoint blob.
    • ENDPOINT_URL/BLOB_NAME
      • Sostituisci quanto segue:
        • ENDPOINT_URL: l'URL dell'endpoint blob (https://<storageaccountname>.blob.core.windows.net)
        • BLOB_NAME: il nome del blob (ad esempio, <logname>-logs)
  • URI è un: seleziona il TIPO DI URI in base alla configurazione del flusso di log (Singolo file | Directory | Directory che include sottodirectory).
  • Opzioni di eliminazione dell'origine: seleziona l'opzione di eliminazione in base alle tue preferenze di importazione.
  • Chiave condivisa: la chiave di accesso ad Azure Blob Storage.

Opzioni avanzate

  • Nome feed: un valore precompilato che identifica il feed.
  • Tipo di origine: metodo utilizzato per raccogliere i log in Google SecOps.
  • Spazio dei nomi dell'asset: spazio dei nomi associato al feed.
  • Etichette di importazione: etichette applicate a tutti gli eventi di questo feed.

Tabella di mappatura UDM

Campo log Mappatura UDM Logic
backendPoolName additional.fields[?key=='backendPoolName'].value.string_value Il valore viene estratto dal campo backendPoolName nel log non elaborato.
backendSettingName additional.fields[?key=='backendSettingName'].value.string_value Il valore viene estratto dal campo backendSettingName nel log non elaborato.
category metadata.product_event_type Il valore viene estratto dal campo category nel log non elaborato.
EventEnqueuedUtcTime additional.fields[?key=='EventEnqueuedUtcTime'].value.string_value Il valore viene estratto dal campo EventEnqueuedUtcTime nel log non elaborato quando esiste il campo records.
EventProcessedUtcTime additional.fields[?key=='EventProcessedUtcTime'].value.string_value Il valore viene estratto dal campo EventProcessedUtcTime nel log non elaborato quando esiste il campo records.
operationName additional.fields[?key=='operationName'].value.string_value Il valore viene estratto dal campo operationName nel log non elaborato.
properties.action additional.fields[?key=='action'].value.string_value Il valore viene estratto dal campo properties.action nel log non elaborato quando esiste il campo records.
properties.action security_result.action_details Il valore viene estratto dal campo properties.action nel log non elaborato quando il campo records non esiste.
properties.clientIP, properties.clientIp principal.asset.ip, principal.ip Il valore viene estratto dal campo properties.clientIP o properties.clientIp nel log non elaborato, dando la priorità a clientIP.
properties.clientPort principal.port Il valore viene estratto dal campo properties.clientPort nel log non elaborato.
properties.clientResponseTime principal.resource.attribute.labels[?key=='Client Response Time'].value Il valore viene estratto dal campo properties.clientResponseTime nel log non elaborato quando il campo records non esiste.
properties.details.data additional.fields[?key=='Properties data'].value.string_value Il valore viene estratto dal campo properties.details.data nel log non elaborato quando esiste il campo records.
properties.details.file principal.process.file.full_path Il valore viene estratto dal campo properties.details.file nel log non elaborato quando il campo records non esiste.
properties.details.matches[].matchVariableName, properties.details.matches[].matchVariableValue additional.fields[?key.startsWith('%{idx} ')].value.string_value Il valore viene estratto dall'array properties.details.matches nel log non elaborato. key nell'UDM viene creato utilizzando l'indice (idx) e matchVariableName. L'importo value viene prelevato da matchVariableValue.
properties.details.message metadata.description Il valore viene estratto dal campo properties.details.message nel log non elaborato dopo aver rimosso le barre rovesciate e le virgolette.
properties.details.msg metadata.description Il valore viene estratto dal campo properties.details.msg nel log non elaborato quando esiste il campo records.
properties.httpMethod network.http.method Il valore viene estratto dal campo properties.httpMethod nel log non elaborato.
properties.httpStatus network.http.response_code Il valore viene estratto dal campo properties.httpStatus nel log non elaborato.
properties.httpVersion network.application_protocol Se il campo properties.httpVersion contiene HTTP, viene assegnato il valore HTTP.
properties.host, properties.hostname, properties.originalHost principal.asset.hostname, principal.hostname Il valore viene estratto da properties.originalHost, properties.host o properties.hostname, in ordine di priorità.
properties.policyId security_result.detection_fields[?key=='policyId'].value Il valore viene estratto dal campo properties.policyId nel log non elaborato.
properties.policyMode security_result.detection_fields[?key=='policyMode'].value Il valore viene estratto dal campo properties.policyMode nel log non elaborato quando esiste il campo records.
properties.policy additional.fields[?key=='Properties policy'].value.string_value Il valore viene estratto dal campo properties.policy nel log non elaborato quando esiste il campo records.
properties.receivedBytes network.received_bytes Il valore viene estratto dal campo properties.receivedBytes nel log non elaborato.
properties.requestUri target.url Il valore viene estratto dal campo properties.requestUri nel log non elaborato.
properties.ruleId security_result.rule_id Il valore viene estratto dal campo properties.ruleId nel log non elaborato.
properties.ruleName security_result.rule_name Il valore viene estratto dal campo properties.ruleName nel log non elaborato quando esiste il campo records.
properties.ruleName, ruleSetType security_result.rule_name Il valore viene estratto dal campo properties.ruleName o, se vuoto, dal campo ruleSetType nel log non elaborato quando il campo records non esiste.
properties.ruleSetVersion security_result.detection_fields[?key=='ruleSetVersion'].value Il valore viene estratto dal campo properties.ruleSetVersion nel log non elaborato.
properties.sentBytes network.sent_bytes Il valore viene estratto dal campo properties.sentBytes nel log non elaborato.
properties.serverResponseLatency additional.fields[?key=='Server Response Latency'].value.string_value Il valore viene estratto dal campo properties.serverResponseLatency nel log non elaborato quando il campo records non esiste.
properties.serverRouted target.asset.ip, target.ip, target.port L'IP e la porta vengono estratti dal campo properties.serverRouted.
properties.sslCipher network.tls.cipher Il valore viene estratto dal campo properties.sslCipher nel log non elaborato.
properties.sslClientCertificateIssuerName network.tls.server.certificate.issuer Il valore viene estratto dal campo properties.sslClientCertificateIssuerName nel log non elaborato.
properties.sslProtocol network.tls.version Il valore viene estratto dal campo properties.sslProtocol nel log non elaborato.
properties.timeTaken additional.fields[?key=='Properties Timetaken'].value.string_value Il valore viene estratto dal campo properties.timeTaken nel log non elaborato quando il campo records non esiste.
properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value Il valore viene estratto dal campo properties.trackingReference nel log non elaborato quando esiste il campo records.
properties.transactionId network.session_id Il valore viene estratto dal campo properties.transactionId nel log non elaborato.
properties.userAgent network.http.user_agent Il valore viene estratto dal campo properties.userAgent nel log non elaborato.
properties.WAFEvaluationTime additional.fields[?key=='Properties WAFEvaluationTime'].value.string_value Il valore viene estratto dal campo properties.WAFEvaluationTime nel log non elaborato quando il campo records non esiste.
properties.WAFMode additional.fields[?key=='Properties WAFMode'].value.string_value Il valore viene estratto dal campo properties.WAFMode nel log non elaborato quando il campo records non esiste.
rec.category metadata.product_event_type Il valore viene estratto dal campo rec.category nel log non elaborato quando esiste il campo records.
rec.operationName additional.fields[?key=='operationName'].value.string_value Il valore viene estratto dal campo rec.operationName nel log non elaborato quando esiste il campo records.
rec.properties.clientIP, rec.properties.clientIp principal.asset.ip, principal.ip Il valore viene estratto dal campo rec.properties.clientIP o rec.properties.clientIp nel log non elaborato, dando la priorità a clientIP quando esiste il campo records.
rec.properties.clientPort principal.port Il valore viene estratto dal campo rec.properties.clientPort nel log non elaborato quando esiste il campo records.
rec.properties.host principal.asset.hostname, principal.hostname Il valore viene estratto dal campo rec.properties.host nel log non elaborato quando esiste il campo records.
rec.properties.policy additional.fields[?key=='Properties policy'].value.string_value Il valore viene estratto dal campo rec.properties.policy nel log non elaborato quando esiste il campo records.
rec.properties.requestUri target.url Il valore viene estratto dal campo rec.properties.requestUri nel log non elaborato quando esiste il campo records.
rec.properties.ruleName security_result.rule_name Il valore viene estratto dal campo rec.properties.ruleName nel log non elaborato quando esiste il campo records.
rec.properties.trackingReference additional.fields[?key=='trackingReference'].value.string_value Il valore viene estratto dal campo rec.properties.trackingReference nel log non elaborato quando esiste il campo records.
rec.resourceId target.resource.id Il valore viene estratto dal campo rec.resourceId nel log non elaborato quando esiste il campo records.
rec.time metadata.event_timestamp Il valore viene estratto dal campo rec.time nel log non elaborato quando esiste il campo records.
resourceId target.resource.id Il valore viene estratto dal campo resourceId nel log non elaborato quando il campo records non esiste.
timeStamp metadata.event_timestamp Il valore viene estratto dal campo timeStamp nel log non elaborato quando il campo records non esiste.
N/D metadata.event_type Il valore è impostato su NETWORK_CONNECTION se sono presenti sia l'entità (nome host o IP client) sia l'IP di destinazione. È impostato su STATUS_UPDATE se è presente un'entità, ma manca l'IP di destinazione. In caso contrario, il valore predefinito è GENERIC_EVENT o il valore del campo event_type.
N/D metadata.log_type Il valore è codificato in modo permanente su AZURE_WAF.
N/D metadata.product_name Il valore è codificato in modo permanente su Azure WAF Logs.
N/D metadata.vendor_name Il valore è codificato in modo permanente su Microsoft.
N/D security_result.action Il valore è impostato su ALLOW se properties.action è Matched, BLOCK se properties.action è Block.

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