Condividi tramite


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

Informazioni dettagliate archiviazione è una dashboard sulle metriche e i log di Archiviazione di Azure. È possibile usare Informazioni dettagliate su archiviazione 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 Informazioni dettagliate archiviazione, vedere Monitoraggio del servizio di archiviazione con Informazioni dettagliate archiviazione di Monitoraggio di Azure.

Analizzare il volume delle transazioni

Dalla Visualizzazione Informazioni dettagliate archiviazione 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.

volume della transazione in Informazioni dettagliate archiviazione

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

transazione per tipo di servizio

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

API transazioni di archiviazione

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 indurre a credere che l'account non venga usato in maniera appropriata.

Analizzare la capacità usata

Nella scheda Capacità della vista Informazioni dettagliate archiviazione in Monitoraggio di Azuredisporre 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.

Capacità di archiviazione usata

Per esaminare i BLOB associati a questa capacità usata, è possibile usare Storage 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 l'inventario BLOB di Archiviazione di Azure 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 contenitore usando l'inventario di Archiviazione di Azure.

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

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 di Archiviazione BLOB di Azure o Prezzi di Azure Data Lake Storage.

Controllo dell'attività dell'account

In molti casi è necessario effettuare un controllo di sicurezza e conformità delle attività degli account di archiviazione. 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 API di Archiviazione di Azure.

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

Controllo sulle operazioni del piano 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à.

Log attività

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

JSON del log attività

La disponibilità delle informazioni"who" ("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 di 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.

Cerca Microsoft Entra ID

Controllo delle operazioni del piano dati

Le operazioni del piano dati vengono acquisite nei log delle risorse di Azure per l'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" ("quando", "chi", "cosa" e "come") in un elenco di voci di log.

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

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

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

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

Suggerimento

Ad esempio se si sospetta che un BLOB o un contenitore sia stato eliminato per errore, aggiungere una clausola where che restituisce solo le voci di log in cui OperationName è impostato su Elimina BLOB o su Elimina contenitore. Per la parte "who" ("chi") del controllo, AuthenticationType indica il tipo di autenticazione usato per effettuare una richiesta. Questo campo può mostrare uno qualsiasi dei tipi di autenticazione supportati da 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 campo RequestObjectId per identificare il "chi" ("who"). L'autenticazione con chiave condivisa e firma di accesso condiviso non consente di controllare le singole identità. In questi casi, i campi callerIPAddress 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 è stato eseguito il mapping dei 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 campo RequesterObjectId fornisce il modo più affidabile per identificare l'entità di sicurezza. È possibile trovare il nome descrittivo dell'entità di sicurezza prendendo il valore del campo RequesterObjectId 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.

Cerca 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 di 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 della firma del token di firma di accesso condiviso verrà visualizzato nel campo AuthenticationHash 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 la porzione di firma di ognuno dei token di firma di accesso condiviso in un hash SHA-256 e quindi confrontarlo con il valore hash visualizzato nei log.

Decodificare innanzitutto ogni stringa di token di firma di accesso condiviso. L'esempio seguente decodifica una porzione di firma della stringa del token di firma di accesso condiviso usando PowerShell.

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

È possibile usare qualsiasi strumento o SDK per convertire la firma decodificata a SHA-256 di tale firma. Ad esempio, su un sistema Linux, è possibile usare il comando seguente:

echo -n "<Decoded SAS signature>" | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()), end='');"  | sha256sum

Un altro modo per convertire la firma decodificata consiste nel passare la stringa decodificata alla funzione hash_sha256() come parte di una query quando si usa Esplora dati di Azure.

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 per 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 Log Analytics di Azure. Se si prevede di eseguire query sui log solo occasionalmente, ad esempio sui log di query per il controllo della conformità, è possibile considerare la possibilità di ridurre il costo totale esportando i log nell'account di archiviazione per poi usare una soluzione di query serverless sui dati di log, ad esempio Azure Synapse.

Con Azure Synapse è possibile creare un pool SQL serverless 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 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