Procedure consigliate per il monitoraggio di Archivio BLOB di Azure

Questo articolo include una raccolta di scenari comuni di monitoraggio dell'archiviazione e fornisce linee guida sulle procedure consigliate per eseguirle.

Identificazione degli account di archiviazione con utilizzo ridotto o nullo

Archiviazione Insights è un dashboard su Archiviazione di Azure metriche e log. È possibile usare Archiviazione Insights per esaminare il volume delle transazioni e la capacità usata di tutti gli account. Queste informazioni possono essere utili per decidere quali account si desidera ritirare. Per configurare Archiviazione Insights, vedere Monitoraggio del servizio di archiviazione con Monitoraggio di Azure Archiviazione informazioni dettagliate.

Analizzare il volume delle transazioni

Dalla visualizzazione Archiviazione Insights in Monitoraggio di Azure ordinare gli account in ordine crescente usando la colonna Transazioni. L'immagine seguente mostra un account con un volume di transazioni basso nel periodo specificato.

transaction volume in Storage Insights

Fare clic sul collegamento account per altre informazioni su queste transazioni. In questo esempio, la maggior parte delle richieste viene effettuata al servizio BLOB Archiviazione.

transaction by service type

Per determinare quali tipi di richieste vengono effettuate, esaminare il grafico Transazioni per nome API.

Storage transaction APIs

In questo esempio tutte le richieste sono operazioni di presentazione o richieste di informazioni sulle proprietà dell'account. Non sono presenti transazioni di lettura e scrittura. Ciò potrebbe portare a credere che l'account non venga usato in modo significativo.

Analizzare la capacità usata

Nella scheda Capacità della visualizzazione Archiviazione Insights in Monitoraggio di Azure ordinare gli account in ordine crescente usando la colonna Capacità usata dall'account. L'immagine seguente mostra un account con un volume di capacità inferiore rispetto ad altri account.

Used storage capacity

Per esaminare i BLOB associati a questa capacità usata, è possibile usare Archiviazione Explorer. Per un numero elevato di BLOB, valutare la possibilità di generare un report usando criteri di inventario BLOB.

Monitorare l'uso di un contenitore

Se si partizionano i dati del cliente in base al contenitore, è possibile monitorare la capacità usata da ogni cliente. È possibile usare Archiviazione di Azure inventario BLOB per eseguire un inventario dei BLOB con informazioni sulle dimensioni. È quindi possibile aggregare le dimensioni e il conteggio a livello di contenitore. Per un esempio, vedere Calcolare il numero di BLOB e le dimensioni totali per ogni contenitore usando Archiviazione di Azure inventario.

È anche possibile valutare il traffico a livello di contenitore eseguendo query sui log. Per altre informazioni sulla scrittura di query di Log Analytics, vedere Log Analytics. Per altre informazioni sullo schema dei log di archiviazione, vedere Archiviazione BLOB di Azure riferimento ai dati di monitoraggio.

Ecco una query per ottenere il numero di transazioni di lettura e il numero di byte letti in ogni contenitore.

StorageBlobLogs
| where OperationName  == "GetBlob"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize ReadSize = sum(ResponseBodySize), ReadCount = count() by tostring(ContainerName)

La query seguente usa una query simile per ottenere informazioni sulle operazioni di scrittura.

StorageBlobLogs
| where OperationName == "PutBlob" or
  OperationName == "PutBlock" or
  OperationName == "PutBlockList" or
  OperationName == "AppendBlock" or
  OperationName == "SnapshotBlob" or
  OperationName == "CopyBlob" or
  OperationName == "SetBlobTier"
| extend ContainerName = split(parse_url(Uri).Path, "/")[1]
| summarize WriteSize = sum(RequestBodySize), WriteCount = count() by tostring(ContainerName)

La query precedente fa riferimento ai nomi di più operazioni perché più tipi di operazione possono essere conteggiati come operazione di scrittura. Per altre informazioni sulle operazioni di lettura e scrittura, vedere prezzi Archiviazione BLOB di Azure o Prezzi di Azure Data Lake Archiviazione.

Controllo dell'attività dell'account

In molti casi, è necessario controllare le attività degli account di archiviazione per la sicurezza e la conformità. Le operazioni sugli account di archiviazione rientrano in due categorie: Piano di controllo e Piano dati.

Un'operazione del piano di controllo è qualsiasi richiesta di Azure Resource Manager per creare un account di archiviazione o per aggiornare una proprietà di un account di archiviazione esistente. Per altre informazioni, vedere Azure Resource Manager.

Un'operazione del piano dati è un'operazione sui dati in un account di archiviazione risultante da una richiesta all'endpoint del servizio di archiviazione. Ad esempio, un'operazione del piano dati viene eseguita quando si carica un BLOB in un account di archiviazione o si scarica un BLOB da un account di archiviazione. Per altre informazioni, vedere ARCHIVIAZIONE DI AZURE API.

La sezione illustra come identificare le informazioni "when", "who", "what" e "how" delle operazioni del controllo e del piano dati.

Operazioni del piano di controllo di controllo

Le operazioni di Resource Manager vengono acquisite nel log attività di Azure. Per visualizzare il log attività, aprire l'account di archiviazione nel portale di Azure e quindi selezionare Log attività.

Activity Log

Aprire qualsiasi voce di log per visualizzare JSON che descrive l'attività. Il codice JSON seguente mostra le informazioni "when", "what" e "how" di un'operazione del piano di controllo:

Activity Log JSON

La disponibilità delle informazioni "chi" dipende dal metodo di autenticazione usato per eseguire l'operazione del piano di controllo. Se l'autorizzazione è stata eseguita da un'entità di sicurezza Microsoft Entra, l'identificatore dell'oggetto dell'entità di sicurezza verrà visualizzato anche in questo output JSON (ad esempio: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Poiché è possibile che non vengano sempre visualizzate altre informazioni correlate all'identità, ad esempio un indirizzo di posta elettronica o un nome, l'identificatore dell'oggetto è sempre il modo migliore per identificare in modo univoco l'entità di sicurezza.

È possibile trovare il nome descrittivo dell'entità di sicurezza prendendo il valore dell'identificatore dell'oggetto e cercando l'entità di sicurezza nella pagina ID di Microsoft Entra del portale di Azure. Lo screenshot seguente mostra un risultato della ricerca in Microsoft Entra ID.

Search Microsoft Entra ID

Controllo delle operazioni del piano dati

Le operazioni del piano dati vengono acquisite nei log delle risorse di Azure per Archiviazione. È possibile configurare l'impostazione di diagnostica per esportare i log nell'area di lavoro Log Analytics per un'esperienza di query nativa.

Ecco una query di Log Analytics che recupera le informazioni "when", "who", "what" e "how" in un elenco di voci di log.

StorageBlobLogs
| where TimeGenerated > ago(3d)
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

Per la parte "when" del controllo, il TimeGenerated campo viene visualizzato quando è stata registrata la voce di log.

Per la parte "what" del controllo, il Uri campo mostra che l'elemento è stato modificato o letto.

Per la parte "how" del controllo, il OperationName campo mostra quale operazione è stata eseguita.

Suggerimento

Ad esempio, se si sospetta che un BLOB o un contenitore sia stato eliminato per errore, aggiungere una where clausola che restituisce solo le voci di log in cui OperationName è impostato su Elimina BLOB o Elimina contenitore. Per la parte "chi" del controllo, AuthenticationType indica il tipo di autenticazione usato per effettuare una richiesta. Questo campo può visualizzare uno dei tipi di autenticazione supportati Archiviazione di Azure, tra cui l'uso di una chiave dell'account, un token di firma di accesso condiviso o l'autenticazione di Microsoft Entra.

Se la richiesta è autorizzata tramite Microsoft Entra ID, è possibile usare il RequestObjectId campo per identificare il "chi". L'autenticazione con chiave condivisa e firma di accesso condiviso non consente di controllare le singole identità. In questi casi, i callerIPAddress campi e userAgentHeader possono essere utili per identificare l'origine dell'operazione. Se è stato usato un token di firma di accesso condiviso per autorizzare un'operazione, è possibile identificare tale token e, se sono stati mappati i token ai destinatari del token, è possibile identificare l'utente, l'organizzazione o l'applicazione che ha eseguito l'operazione. Vedere Identificazione del token di firma di accesso condiviso usato per autorizzare una richiesta.

Identificazione dell'entità di sicurezza usata per autorizzare una richiesta

Se una richiesta è stata autenticata tramite Microsoft Entra ID, il RequesterObjectId campo fornisce il modo più affidabile per identificare l'entità di sicurezza. È possibile trovare il nome descrittivo dell'entità di sicurezza prendendo il valore del RequesterObjectId campo e cercando l'entità di sicurezza nella pagina ID di Microsoft Entra del portale di Azure. Lo screenshot seguente mostra un risultato della ricerca in Microsoft Entra ID.

Search Microsoft Entra ID

In alcuni casi, nei log potrebbe essere visualizzato un nome dell'entità utente o un UPN . Ad esempio, se l'entità di sicurezza è un utente di Microsoft Entra, verrà probabilmente visualizzato l'UPN. Per altri tipi di entità di sicurezza, ad esempio identità gestite assegnate dall'utente o in determinati scenari, ad esempio l'autenticazione tra tenant di Microsoft Entra, l'UPN non verrà visualizzato nei log.

Questa query mostra tutte le operazioni di lettura eseguite dalle entità di sicurezza OAuth.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "GetBlob"
  and AuthenticationType == "OAuth"
| project TimeGenerated, AuthenticationType, RequesterObjectId, OperationName, Uri

L'autenticazione con chiave condivisa e firma di accesso condiviso non consente di controllare le singole identità. Pertanto, se si vuole migliorare la possibilità di controllare in base all'identità, è consigliabile passare a Microsoft Entra ID e impedire l'autenticazione con chiave condivisa e firma di accesso condiviso. Per informazioni su come impedire l'autenticazione con chiave condivisa e firma di accesso condiviso, vedere Impedire l'autorizzazione con chiave condivisa per un account Archiviazione di Azure. Per iniziare a usare Microsoft Entra ID, vedere Autorizzare l'accesso ai BLOB tramite Microsoft Entra ID.

Identificazione del token di firma di accesso condiviso usato per autorizzare una richiesta

È possibile eseguire query per le operazioni autorizzate usando un token di firma di accesso condiviso. Ad esempio, questa query restituisce tutte le operazioni di scrittura autorizzate usando un token di firma di accesso condiviso.

StorageBlobLogs
| where TimeGenerated > ago(3d)
  and OperationName == "PutBlob"
  and AuthenticationType == "SAS"
| project TimeGenerated, AuthenticationType, AuthenticationHash, OperationName, Uri

Per motivi di sicurezza, i token di firma di accesso condiviso non vengono visualizzati nei log. Tuttavia, l'hash SHA-256 del token di firma di accesso condiviso verrà visualizzato nel AuthenticationHash campo restituito da questa query.

Se sono stati distribuiti diversi token di firma di accesso condiviso e si vuole sapere quali token di firma di accesso condiviso vengono usati, è necessario convertire ognuno dei token di firma di accesso condiviso in un hash SHA-256 e quindi confrontarlo con il valore hash visualizzato nei log.

Decodifica innanzitutto ogni stringa di token di firma di accesso condiviso. L'esempio seguente decodifica una stringa di token di firma di accesso condiviso usando PowerShell.

[uri]::UnescapeDataString("<SAS token goes here>")

È quindi possibile passare tale stringa al cmdlet Di PowerShell Get-FileHash . Per un esempio, vedere Esempio 4: Calcolare l'hash di una stringa.

In alternativa, è possibile passare la stringa decodificata alla funzione hash_sha256() come parte di una query quando si usa Azure Esplora dati.

I token di firma di accesso condiviso non contengono informazioni sull'identità. Un modo per tenere traccia delle attività degli utenti o delle organizzazioni consiste nel mantenere un mapping di utenti o organizzazioni a diversi hash dei token di firma di accesso condiviso.

Ottimizzare i costi per le query poco frequenti

È possibile esportare i log in Log Analytics per funzionalità di query native avanzate. Quando si hanno transazioni di grandi dimensioni nell'account di archiviazione, il costo dell'uso dei log con Log Analytics potrebbe essere elevato. Per altre informazioni, vedere Prezzi di Azure Log Analytics. Se si prevede di eseguire query sui log solo occasionalmente ,ad esempio i log di query per il controllo della conformità, è possibile valutare la possibilità di ridurre il costo totale esportando i log nell'account di archiviazione e quindi usando una soluzione di query serverless sui dati di log, ad esempio Azure Synapse.

Con Azure Synapse è possibile creare un pool SQL senza server per eseguire query sui dati di log quando necessario. Ciò potrebbe ridurre significativamente i costi.

  1. Esportare i log nell'account di archiviazione. Per altre informazioni, vedere Creazione di un'impostazione di diagnostica.

  2. Creare e configurare un'area di lavoro di Synapse. Per altre informazioni, vedere Avvio rapido: Creare un'area di lavoro di Synapse.

  3. Log di query. Per altre informazioni, vedere Eseguire query su file JSON usando un pool SQL serverless in Azure Synapse Analytics.

    Ecco un esempio:

     select
         JSON_VALUE(doc, '$.time') AS time,
         JSON_VALUE(doc, '$.properties.accountName') AS accountName,
         JSON_VALUE(doc, '$.identity.type') AS identityType,
         JSON_VALUE(doc, '$.identity.requester.objectId') AS requesterObjectId,
         JSON_VALUE(doc, '$.operationName') AS operationName,
         JSON_VALUE(doc, '$.callerIpAddress') AS callerIpAddress,
         JSON_VALUE(doc, '$.uri') AS uri
         doc
     from openrowset(
             bulk 'https://demo2uswest4log.blob.core.windows.net/insights-logs-storageread/resourceId=/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/mytestrp/providers/Microsoft.Storage/storageAccounts/demo2uswest/blobServices/default/y=2021/m=03/d=19/h=*/m=*/PT1H.json',
             format = 'csv', fieldterminator ='0x0b', fieldquote = '0x0b'
         ) with (doc nvarchar(max)) as rows
     order by JSON_VALUE(doc, '$.time') desc
    
    

Vedi anche