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.
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.
Om du vill ta reda på vilka typer av begäranden som görs går du till diagrammet Transaktioner efter API-namn .
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.
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.
Ö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:
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.
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.
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-tokensignaturen 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 signaturdelen av var och en av dina SAS-token till en SHA-256-hash och sedan jämföra hash-värdet med hashvärdet som visas i loggarna.
Avkoda först varje SAS-tokensträng. I följande exempel avkodas signaturdelen av SAS-tokensträngen med hjälp av PowerShell.
[uri]::UnescapeDataString("<SAS signature here>")
Du kan använda valfritt verktyg eller SDK för att konvertera den avkodade signaturen till DEN SHA-256 som har signaturen. I ett Linux-system kan du till exempel använda följande kommando:
echo -n "<Decoded SAS signature>" | python3 -c "import sys; from urllib.parse import unquote; print(unquote(sys.stdin.read()), end='');" | sha256sum
Ett annat sätt att konvertera den avkodade signaturen är att 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.
Exportera loggar till lagringskontot. Mer information finns i Skapa en diagnostikinställning.
Skapa och konfigurera en Synapse-arbetsyta. Mer information finns i Snabbstart: Skapa en Synapse-arbetsyta.
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