Metodtips för övervakning av Azure Blob Storage

Den här artikeln innehåller en samling vanliga scenarier för lagringsövervakning och ger dig riktlinjer för bästa praxis för att åstadkomma dem.

Identifiera lagringskonton utan eller med låg användning

Storage Insights är en instrumentpanel ovanpå Azure Storage-mått och -loggar. Du kan använda Storage Insights för att undersöka transaktionsvolymen och använda kapaciteten för alla dina konton. Den informationen kan hjälpa dig att avgöra vilka konton som du kanske vill dra tillbaka. Information om hur du konfigurerar Storage Insights finns i Övervaka din lagringstjänst med Azure Monitor Storage-insikter.

Analysera transaktionsvolym

I vyn Storage Insights i Azure Monitor sorterar du dina konton i stigande ordning med hjälp av kolumnen Transaktioner. Följande bild visar ett konto med låg transaktionsvolym under den angivna perioden.

transaction volume in Storage Insights

Klicka på kontolänken om du vill veta mer om dessa transaktioner. I det här exemplet görs de flesta begäranden till Blob Storage-tjänsten.

transaction by service type

Om du vill ta reda på vilka typer av begäranden som görs går du till diagrammet Transaktioner efter API-namn .

Storage transaction APIs

I det här exemplet visar alla begäranden åtgärder eller begäranden om kontoegenskapsinformation. Det finns inga läs- och skrivtransaktioner. Detta kan leda till att du tror att kontot inte används på ett betydande sätt.

Analysera använd kapacitet

På fliken Kapacitet i vyn Storage Insights i Azure Monitor sorterar du dina konton i stigande ordning med hjälp av kolumnen Kontoanvänd kapacitet. Följande bild visar ett konto med lägre kapacitetsvolym än andra konton.

Used storage capacity

Om du vill undersöka de blobar som är associerade med den här använda kapaciteten kan du använda Storage Explorer. För ett stort antal blobar bör du överväga att generera en rapport med hjälp av en blobinventeringsprincip.

Övervaka användningen av en container

Om du partitionera kundens data efter container kan du övervaka hur mycket kapacitet som används av varje kund. Du kan använda Azure Storage-blobinventering för att göra en inventering av blobar med storleksinformation. Sedan kan du aggregera storleken och antalet på containernivå. Ett exempel finns i Beräkna antal blobar och total storlek per container med hjälp av Azure Storage-inventering.

Du kan också utvärdera trafik på containernivå genom att köra frågor mot loggar. Mer information om hur du skriver Log Analys-frågor finns i Log Analytics. Mer information om schemat för lagringsloggar finns i Referens för Övervakningsdata för Azure Blob Storage.

Här är en fråga för att hämta antalet lästransaktioner och antalet byte som lästs på varje container.

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

Följande fråga använder en liknande fråga för att hämta information om skrivåtgärder.

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)

Ovanstående fråga refererar till namnen på flera åtgärder eftersom mer än en typ av åtgärd kan räknas som en skrivåtgärd. Mer information om vilka åtgärder som anses vara läs- och skrivåtgärder finns i prissättningen för Azure Blob Storage eller Azure Data Lake Storage.

Granska kontoaktivitet

I många fall måste du granska aktiviteterna för dina lagringskonton för säkerhet och efterlevnad. Åtgärder på lagringskonton finns i två kategorier: Kontrollplan och dataplan.

En kontrollplansåtgärd är en Azure Resource Manager-begäran om att skapa ett lagringskonto eller uppdatera en egenskap för ett befintligt lagringskonto. Mer information finns i Azure Resource Manager.

En dataplansåtgärd är en åtgärd på data i ett lagringskonto som är resultatet av en begäran till lagringstjänstens slutpunkt. Till exempel körs en dataplansåtgärd när du laddar upp en blob till ett lagringskonto eller laddar ned en blob från ett lagringskonto. Mer information finns i Azure Storage API.

Avsnittet visar hur du identifierar "när", "vem", "vad" och "hur" information om kontroll- och dataplansåtgärder.

Granska kontrollplansåtgärder

Resource Manager-åtgärder samlas in i Azure-aktivitetsloggen. Om du vill visa aktivitetsloggen öppnar du ditt lagringskonto i Azure-portalen och väljer sedan Aktivitetslogg.

Activity Log

Öppna alla loggposter för att visa JSON som beskriver aktiviteten. Följande JSON visar informationen "when", "what" och "how" för en kontrollplansåtgärd:

Activity Log JSON

Tillgängligheten för "vem"-informationen beror på vilken autentiseringsmetod som användes för att utföra kontrollplansåtgärden. Om auktoriseringen utfördes av ett Microsoft Entra-säkerhetsobjekt visas även objektidentifieraren för det säkerhetsobjektet i dessa JSON-utdata (till exempel: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Eftersom du kanske inte alltid ser annan identitetsrelaterad information, till exempel en e-postadress eller ett namn, är objektidentifieraren alltid det bästa sättet att unikt identifiera säkerhetsobjektet.

Du hittar det egna namnet på säkerhetsobjektet genom att ta värdet för objektidentifieraren och söka efter säkerhetsobjektet på Microsoft Entra-ID-sidan i Azure-portalen. Följande skärmbild visar ett sökresultat i Microsoft Entra-ID.

Search Microsoft Entra ID

Granska dataplansåtgärder

Dataplansåtgärder samlas in i Azure-resursloggar för Storage. Du kan konfigurera diagnostikinställningen för att exportera loggar till Log Analytics-arbetsytan för en intern frågeupplevelse.

Här är en Log Analytics-fråga som hämtar informationen "when", "who", "what" och "how" i en lista med loggposter.

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

För "när"-delen av granskningen visas fältet TimeGenerated när loggposten registrerades.

För "vad"-delen av granskningen Uri visar fältet att objektet har ändrats eller lästs.

För "hur"-delen av granskningen OperationName visar fältet vilken åtgärd som kördes.

Dricks

Om du till exempel misstänker att en blob eller container har tagits bort av misstag lägger du till en where sats som endast returnerar loggposter där OperationName är inställd på antingen Ta bort blob eller Ta bort container. För "vem"-delen av granskningen AuthenticationType visar vilken typ av autentisering som användes för att göra en begäran. Det här fältet kan visa alla typer av autentisering som Azure Storage stöder, inklusive användning av en kontonyckel, en SAS-token eller Microsoft Entra-autentisering.

Om begäran godkänns med hjälp av Microsoft Entra-ID kan du använda fältet RequestObjectId för att identifiera "vem". Delad nyckel och SAS-autentisering ger inget sätt att granska enskilda identiteter. I dessa fall kan fälten callerIPAddress och userAgentHeader hjälpa dig att identifiera källan till åtgärden. Om en SAS-token användes för att auktorisera en åtgärd kan du identifiera den token, och om du har mappat token till tokenmottagare i slutet kan du identifiera vilken användare, organisation eller program som har utfört åtgärden. Se Identifiera den SAS-token som används för att auktorisera en begäran.

Identifiera säkerhetsobjektet som används för att auktorisera en begäran

Om en begäran autentiserades RequesterObjectId med hjälp av Microsoft Entra-ID är fältet det mest tillförlitliga sättet att identifiera säkerhetsobjektet. Du hittar det egna namnet på säkerhetsobjektet genom att ta värdet RequesterObjectId för fältet och söka efter säkerhetsobjektet på Microsoft Entra-ID-sidan i Azure-portalen. Följande skärmbild visar ett sökresultat i Microsoft Entra-ID.

Search Microsoft Entra ID

I vissa fall kan ett användarhuvudnamn eller UPN visas i loggar. Om säkerhetsobjektet till exempel är en Microsoft Entra-användare visas UPN troligen. För andra typer av säkerhetsobjekt, till exempel användartilldelade hanterade identiteter eller i vissa scenarier, till exempel mellan Microsoft Entra-klientautentisering, visas inte UPN i loggarna.

Den här frågan visar alla läsåtgärder som utförs av OAuth-säkerhetsobjekt.

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

Delad nyckel och SAS-autentisering ger inget sätt att granska enskilda identiteter. Om du vill förbättra din möjlighet att granska baserat på identitet rekommenderar vi därför att du övergår till Microsoft Entra-ID och förhindrar delad nyckel och SAS-autentisering. Information om hur du förhindrar delad nyckel och SAS-autentisering finns i Förhindra auktorisering av delad nyckel för ett Azure Storage-konto. Information om hur du kommer igång med Microsoft Entra-ID finns i Auktorisera åtkomst till blobar med hjälp av Microsoft Entra-ID.

Identifiera den SAS-token som används för att auktorisera en begäran

Du kan fråga efter åtgärder som har auktoriserats med hjälp av en SAS-token. Den här frågan returnerar till exempel alla skrivåtgärder som har auktoriserats med hjälp av en SAS-token.

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

Av säkerhetsskäl visas INTE SAS-token i loggar. SHA-256-hashen för SAS-token visas dock i fältet AuthenticationHash som returneras av den här frågan.

Om du har distribuerat flera SAS-token och vill veta vilka SAS-token som används måste du konvertera var och en av dina SAS-token till en SHA-256-hash och sedan jämföra hashvärdet med hashvärdet som visas i loggarna.

Avkoda först varje SAS-tokensträng. I följande exempel avkodas en SAS-tokensträng med hjälp av PowerShell.

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

Sedan kan du skicka strängen till Cmdleten Get-FileHash PowerShell. Ett exempel finns i Exempel 4: Beräkna hashen för en sträng.

Du kan också skicka den avkodade strängen till funktionen hash_sha256() som en del av en fråga när du använder Azure Data Explorer.

SAS-token innehåller inte identitetsinformation. Ett sätt att spåra aktiviteter för användare eller organisationer är att hålla en mappning av användare eller organisationer till olika SAS-token-hashar.

Optimera kostnaden för ovanliga frågor

Du kan exportera loggar till Log Analytics för omfattande interna frågefunktioner. När du har stora transaktioner på ditt lagringskonto kan kostnaden för att använda loggar med Log Analytics vara hög. Mer information finns i Prissättning för Azure Log Analytics. Om du bara planerar att köra frågor mot loggar ibland (till exempel frågeloggar för efterlevnadsgranskning) kan du överväga att minska den totala kostnaden genom att exportera loggar till lagringskontot och sedan använda en serverlös frågelösning ovanpå loggdata, till exempel Azure Synapse.

Med Azure Synapse kan du skapa en serverlös SQL-pool för att köra frågor mot loggdata när du behöver det. Detta kan minska kostnaderna avsevärt.

  1. Exportera loggar till lagringskontot. Mer information finns i Skapa en diagnostikinställning.

  2. Skapa och konfigurera en Synapse-arbetsyta. Mer information finns i Snabbstart: Skapa en Synapse-arbetsyta.

  3. Frågeloggar. Mer information finns i Fråga JSON-filer med hjälp av en serverlös SQL-pool i Azure Synapse Analytics.

    Här är ett exempel:

     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
    
    

Se även