Raccogliere gli audit log di Azure Storage

Supportato in:

Questo documento spiega come esportare i log di controllo di Azure Storage in Google Security Operations utilizzando un account di archiviazione Azure. Il parser elabora i log in formato JSON, trasformandoli nel modello UDM (Unified Data Model). Estrae i campi dal log non elaborato, esegue conversioni di tipo di dati, arricchisce i dati con un contesto aggiuntivo (ad esempio l'analisi dello user agent e la suddivisione degli indirizzi IP) e mappa i campi estratti ai campi UDM corrispondenti.

Prima di iniziare

Assicurati di disporre dei seguenti prerequisiti:

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

Configura l'account di archiviazione Azure

  1. Nella console di Azure, cerca Account di archiviazione.
  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).
    • Redundanza: seleziona la ridondanza (GRS o LRS consigliata).
    • Nome account di archiviazione: inserisci un nome per il nuovo account di archiviazione.
  4. Fai clic su Review + create (Rivedi e crea).
  5. Esamina la panoramica dell'account e fai clic su Crea.
  6. Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Chiavi di accesso in Sicurezza + reti.
  7. Fai clic su Mostra accanto a chiave1 o chiave2.
  8. Fai clic su Copia negli appunti per copiare la chiave.
  9. Salva la chiave in un luogo sicuro 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 del servizio Blob, 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 gli audit log di Azure Storage

  1. Accedi al portale di Azure utilizzando il tuo account con privilegi.
  2. Vai a Account di archiviazione > Impostazioni di diagnostica.
  3. Fai clic su + Aggiungi impostazione di diagnostica.
  4. Seleziona le impostazioni di diagnostica per blob, queue, table e file.
    • Seleziona l'opzione allLogs in Gruppi di categorie per ogni impostazione di diagnostica.
    • Inserisci un nome descrittivo per ogni impostazione di diagnostica.
  5. Seleziona la casella di controllo Archivia in un account di archiviazione come destinazione.
    • Specifica l'abbonamento e l'account di archiviazione.
  6. Fai clic su Salva.

Configurare i feed

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

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

Configura i feed da Impostazioni SIEM > Feed

Per configurare più feed per tipi di log diversi 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 di controllo di Azure Storage.
  5. Seleziona Microsoft Azure Blob Storage come Tipo di origine.
  6. Seleziona Controllo dell'archiviazione di Azure 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 del 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)
    • L'URI è un: seleziona il TIPO DI URI in base alla configurazione dello stream di log (File singolo | 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. Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.

Configurare i feed da Content Hub

Specifica i valori per i seguenti campi:

  • URI di Azure: l'URL dell'endpoint del 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)
  • L'URI è un: seleziona il TIPO DI URI in base alla configurazione dello stream di log (File singolo | 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: le etichette applicate a tutti gli eventi di questo feed.

Tabella di mappatura UDM

Campo log Mappatura UDM Logica
callerIpAddress principal.asset.ip L'indirizzo IP viene estratto dal campo callerIpAddress utilizzando un pattern Grok e assegnato a principal.asset.ip.
callerIpAddress principal.ip L'indirizzo IP viene estratto dal campo callerIpAddress utilizzando un pattern Grok e assegnato a principal.ip.
callerIpAddress principal.port Il numero di porta viene estratto dal campo callerIpAddress utilizzando un pattern Grok e assegnato a principal.port.
category security_result.category_details Il valore del campo category viene assegnato a security_result.category_details.
correlationId security_result.detection_fields[0].key La stringa letterale correlationId viene assegnata al campo della chiave.
correlationId security_result.detection_fields[0].value Il valore del campo correlationId viene assegnato a security_result.detection_fields[0].value. Il valore del campo time viene analizzato come timestamp e assegnato a event.idm.read_only_udm.metadata.event_timestamp. Se category è StorageWrite ed esiste principal.user.userid (derivato da properties.accountName), il valore viene impostato su USER_RESOURCE_UPDATE_CONTENT. Se category è StorageDelete ed esiste principal.user.userid, il valore viene impostato su USER_RESOURCE_DELETION. In caso contrario, il valore viene impostato su USER_RESOURCE_ACCESS. La stringa letterale AZURE_STORAGE_AUDIT è assegnata a event.idm.read_only_udm.metadata.log_type. La stringa letterale AZURE_STORAGE_AUDIT è assegnata a event.idm.read_only_udm.metadata.product_name. Il valore del campo schemaVersion viene assegnato a event.idm.read_only_udm.metadata.product_version. La stringa letterale AZURE_STORAGE_AUDIT è assegnata a event.idm.read_only_udm.metadata.vendor_name.
location target.location.name Il valore del campo location viene assegnato a target.location.name.
operationName additional.fields[x].key La stringa letterale operationName viene assegnata al campo della chiave.
operationName additional.fields[x].value.string_value Il valore del campo operationName viene assegnato a additional.fields[x].value.string_value.
operationVersion additional.fields[x].key La stringa letterale operationVersion viene assegnata al campo della chiave.
operationVersion additional.fields[x].value.string_value Il valore del campo operationVersion viene assegnato a additional.fields[x].value.string_value.
properties.accountName principal.user.userid Il valore del campo properties.accountName viene assegnato a principal.user.userid.
properties.clientRequestId additional.fields[x].key La stringa letterale clientRequestId viene assegnata al campo della chiave.
properties.clientRequestId additional.fields[x].value.string_value Il valore del campo properties.clientRequestId viene assegnato a additional.fields[x].value.string_value.
properties.etag additional.fields[x].key La stringa letterale etag viene assegnata al campo della chiave.
properties.etag additional.fields[x].value.string_value Il valore del campo properties.etag viene assegnato a additional.fields[x].value.string_value.
properties.objectKey additional.fields[x].key La stringa letterale objectKey viene assegnata al campo della chiave.
properties.objectKey additional.fields[x].value.string_value Il valore del campo properties.objectKey viene assegnato a additional.fields[x].value.string_value.
properties.requestMd5 additional.fields[x].key La stringa letterale requestMd5 viene assegnata al campo della chiave.
properties.requestMd5 additional.fields[x].value.string_value Il valore del campo properties.requestMd5 viene assegnato a additional.fields[x].value.string_value.
properties.responseMd5 additional.fields[x].key La stringa letterale responseMd5 viene assegnata al campo della chiave.
properties.responseMd5 additional.fields[x].value.string_value Il valore del campo properties.responseMd5 viene assegnato a additional.fields[x].value.string_value.
properties.serviceType additional.fields[x].key La stringa letterale serviceType viene assegnata al campo della chiave.
properties.serviceType additional.fields[x].value.string_value Il valore del campo properties.serviceType viene assegnato a additional.fields[x].value.string_value.
properties.tlsVersion network.tls.version Il valore del campo properties.tlsVersion viene assegnato a network.tls.version.
properties.userAgentHeader network.http.parsed_user_agent Il valore del campo properties.userAgentHeader viene analizzato come stringa user agent e assegnato a network.http.parsed_user_agent.
properties.userAgentHeader network.http.user_agent Il valore del campo properties.userAgentHeader viene assegnato a network.http.user_agent.
protocol network.application_protocol Il valore del campo protocol viene assegnato a network.application_protocol.
resourceId target.resource.id Il valore del campo resourceId viene assegnato a target.resource.id.
resourceId target.resource.product_object_id Il valore del campo resourceId viene assegnato a target.resource.product_object_id. La stringa letterale DATABASE è assegnata a target.resource.resource_type.
resourceType additional.fields[x].key La stringa letterale resourceType viene assegnata al campo della chiave.
resourceType additional.fields[x].value.string_value Il valore del campo resourceType viene assegnato a additional.fields[x].value.string_value. Se statusText è Success, il valore viene impostato su ALLOW.
statusCode network.http.response_code Il valore del campo statusCode viene convertito in un numero intero e assegnato a network.http.response_code. La stringa letterale MICROSOFT_AZURE è assegnata a target.cloud.environment.
time timestamp Il valore del campo time viene analizzato come timestamp e assegnato a timestamp.
uri network.http.referral_url Il valore del campo uri viene assegnato a network.http.referral_url.

Modifiche

2024-12-12

  • Sono stati mappati identity.tokenHash, identity.type, identity.requester.appId, identity.requester.tenantId, identity.requester.tokenIssuer, properties.sourceAccessTier, principal.type, auth.action, auth.roleAssignmentId e auth.roleDefinitionId a additional.fields.
  • identity.requester.upn è stato mappato a src.user.userid.
  • identity.requester.objectId è stato mappato a src.user.product_object_id.

2024-12-06

  • smbCommandMinor è stato mappato a security_result.action_details.

2024-07-31

  • statusText e correlationId sono stati inizializzati a null.

2024-04-08

  • Parser appena creato.

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