Raccogliere gli audit log di Azure Storage
Questo documento spiega come esportare i log di controllo di Azure Storage in Google Security Operations utilizzando un account di archiviazione Azure. L'analizzatore sintattico elabora i log in formato JSON, trasformandoli nel modello di dati unificato (UDM). 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 avere un'istanza Google SecOps.
- Assicurati di avere un tenant Azure attivo.
- Assicurati di disporre dell'accesso privilegiato ad Azure.
Configura l'account di archiviazione Azure
- Nella console di Azure, cerca Account di archiviazione.
- Fai clic su Crea.
- 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.
- Prestazioni: seleziona il rendimento (consigliato standard).
- Redundanza: seleziona la ridondanza (consigliata GRS o LRS).
- Nome account di archiviazione: inserisci un nome per il nuovo account di archiviazione.
- Fai clic su Review + create (Rivedi e crea).
- Esamina la panoramica dell'account e fai clic su Crea.
- Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Chiavi di accesso in Sicurezza + reti.
- Fai clic su Mostra accanto a chiave1 o chiave2.
- Fai clic su Copia negli appunti per copiare la chiave.
- Salva la chiave in un luogo sicuro per utilizzarla in un secondo momento.
- Nella pagina Panoramica dell'account di archiviazione, seleziona il sottomenu Endpoint in Impostazioni.
- Fai clic su Copia negli appunti per copiare l'URL dell'endpoint del servizio Blob, ad esempio
https://<storageaccountname>.blob.core.windows.net
. - Salva l'URL dell'endpoint in un luogo sicuro per utilizzarlo in un secondo momento.
Configurare l'esportazione dei log per gli audit log di Azure Storage
- Accedi al portale di Azure utilizzando il tuo account con privilegi.
- Vai a Account di archiviazione > Impostazioni di diagnostica.
- Fai clic su + Aggiungi impostazione di diagnostica.
- Seleziona le impostazioni di diagnostica per
blob
,queue
,table
efile
.- Seleziona l'opzione allLogs in Gruppi di categorie per ogni impostazione di diagnostica.
- Inserisci un nome descrittivo per ogni impostazione di diagnostica.
- Seleziona la casella di controllo Archivia in un account di archiviazione come destinazione.
- Specifica l'abbonamento e l'account di archiviazione.
- Fai clic su Salva.
Configura un feed in Google SecOps per importare gli audit log di Azure Storage
- Vai a Impostazioni SIEM > Feed.
- Fai clic su Aggiungi nuovo.
- Nel campo Nome feed, inserisci un nome per il feed, ad esempio Log di controllo di Azure Storage.
- Seleziona Microsoft Azure Blob Storage come Tipo di origine.
- Seleziona Controllo dell'archiviazione di Azure come Tipo di log.
- Fai clic su Avanti.
Specifica i valori per i seguenti parametri di input:
- URI 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
)
- Sostituisci quanto segue:
- 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.
Chiave condivisa: la chiave di accesso ad Azure Blob Storage.
Spazio dei nomi degli asset: lo spazio dei nomi degli asset.
Etichette di importazione: l'etichetta da applicare agli eventi di questo feed.
- URI Azure: l'URL dell'endpoint del blob.
Fai clic su Avanti.
Rivedi la configurazione del nuovo feed nella schermata Concludi e poi fai clic su Invia.
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
eauth.roleDefinitionId
aadditional.fields
. identity.requester.upn
è stato mappato asrc.user.userid
.identity.requester.objectId
è stato mappato asrc.user.product_object_id
.
2024-12-06
smbCommandMinor
è stato mappato asecurity_result.action_details
.
2024-07-31
statusText
ecorrelationId
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.