Osvědčené postupy pro monitorování služby Azure Blob Storage

Tento článek obsahuje kolekci běžných scénářů monitorování úložiště a poskytuje osvědčené postupy pro jejich dosažení.

Identifikace účtů úložiště s žádným nebo nízkým využitím

Přehledy úložiště je řídicí panel nad metrikami a protokoly Azure Storage. Pomocí služby Storage Přehledy můžete prozkoumat objem transakcí a využitou kapacitu všech vašich účtů. Tato informace vám můžou pomoct rozhodnout, které účty budete chtít vyřadit z důchodu. Pokud chcete nakonfigurovat Přehledy úložiště, přečtěte si téma Monitorování služby úložiště pomocí přehledů služby Azure Monitor Storage.

Analýza objemu transakcí

V zobrazení Přehledy úložiště ve službě Azure Monitor seřaďte účty vzestupně podle sloupce Transakce. Následující obrázek ukazuje účet s nízkým objemem transakcí za zadané období.

transaction volume in Storage Insights

Další informace o těchto transakcích získáte kliknutím na odkaz na účet. V tomto příkladu se většina požadavků provádí ve službě Blob Storage.

transaction by service type

Pokud chcete zjistit, jaké druhy požadavků se provádějí, přejděte k podrobnostem o transakcích podle grafu názvů rozhraní API.

Storage transaction APIs

V tomto příkladu všechny požadavky uvádějí operace nebo žádosti o informace o vlastnosti účtu. Neexistují žádné transakce čtení a zápisu. To vás může vést k přesvědčení, že se účet nepoužívá významným způsobem.

Analýza využité kapacity

Na kartě Kapacita v zobrazení Přehledy úložiště ve službě Azure Monitor seřaďte účty vzestupně podle sloupce Využitá kapacita účtu. Následující obrázek ukazuje účet s nižším objemem kapacity než jiné účty.

Used storage capacity

K prozkoumání objektů blob přidružených k této využité kapacitě můžete použít Průzkumník služby Storage. U velkého počtu objektů blob zvažte generování sestavy pomocí zásad inventáře objektů blob.

Monitorování použití kontejneru

Pokud rozdělíte data zákazníka podle kontejneru, můžete monitorovat, kolik kapacity každý zákazník využívá. Inventář objektů blob služby Azure Storage můžete použít k inventarizaci objektů blob s informacemi o velikosti. Potom můžete agregovat velikost a počet na úrovni kontejneru. Příklad najdete v tématu Výpočet počtu objektů blob a celkové velikosti jednotlivých kontejnerů pomocí inventáře služby Azure Storage.

Provoz můžete také vyhodnotit na úrovni kontejneru dotazováním protokolů. Další informace o psaní dotazů Log Analytics najdete v tématu Log Analytics. Další informace o schématu protokolů úložiště najdete v referenčních informacích k datům monitorování služby Azure Blob Storage.

Tady je dotaz, který získá počet transakcí čtení a počet bajtů přečtených v každém kontejneru.

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

Následující dotaz používá podobný dotaz k získání informací o operacích zápisu.

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)

Výše uvedený dotaz odkazuje na názvy více operací, protože více než jeden typ operace se může spočítat jako operace zápisu. Další informace o tom, které operace se považují za operace čtení a zápisu, najdete v cenách služby Azure Blob Storage nebo cenách služby Azure Data Lake Storage.

Auditování aktivit účtů

V mnoha případech budete muset auditovat aktivity účtů úložiště za účelem zabezpečení a dodržovánípředpisůch Operace s účty úložiště spadají do dvou kategorií: rovina řízení a rovina dat.

Operace řídicí roviny je jakákoli žádost Azure Resource Manageru o vytvoření účtu úložiště nebo aktualizaci vlastnosti existujícího účtu úložiště. Další informace najdete v tématu Azure Resource Manager.

Operace roviny dat je operace s daty v účtu úložiště, která je výsledkem požadavku na koncový bod služby úložiště. Operace roviny dat se například spustí při nahrání objektu blob do účtu úložiště nebo stažení objektu blob z účtu úložiště. Další informace najdete v tématu Rozhraní API služby Azure Storage.

V této části se dozvíte, jak identifikovat informace o operacích řídicí roviny a roviny dat "when", "who", "what" a "how".

Auditování operací řídicí roviny

Operace Resource Manageru se zaznamenávají v protokolu aktivit Azure. Pokud chcete zobrazit protokol aktivit, otevřete svůj účet úložiště na webu Azure Portal a pak vyberte Protokol aktivit.

Activity Log

Otevřete libovolnou položku protokolu a zobrazte JSON, který popisuje aktivitu. Následující KÓD JSON ukazuje informace "when", "what" a "how" operace řídicí roviny:

Activity Log JSON

Dostupnost informací "kdo" závisí na metodě ověřování, která byla použita k provedení operace řídicí roviny. Pokud autorizaci provedl objekt zabezpečení Microsoft Entra, zobrazí se v tomto výstupu JSON také identifikátor objektu tohoto objektu zabezpečení (například: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Vzhledem k tomu, že se nemusí vždy zobrazovat další informace související s identitou, jako je e-mailová adresa nebo název, je identifikátor objektu vždy nejlepším způsobem, jak objekt zabezpečení jednoznačně identifikovat.

Popisný název tohoto objektu zabezpečení najdete tak, že vezmete hodnotu identifikátoru objektu a vyhledáte objekt zabezpečení na stránce ID Microsoft Entra na webu Azure Portal. Následující snímek obrazovky ukazuje výsledek hledání v MICROSOFT Entra ID.

Search Microsoft Entra ID

Auditování operací roviny dat

Operace roviny dat se zaznamenávají v protokolech prostředků Azure pro službu Storage. Můžete nakonfigurovat nastavení diagnostiky pro export protokolů do pracovního prostoru služby Log Analytics pro nativní prostředí dotazů.

Tady je dotaz Log Analytics, který v seznamu položek protokolu načte informace "when", "who", "what" a "how".

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

U části auditování "kdy" se TimeGenerated v poli zobrazí, kdy byla zaznamenána položka protokolu.

U části auditování "what" (co) se Uri v poli zobrazuje, že položka byla změněna nebo přečtená.

V části "how" (jak) auditování zobrazuje pole, OperationName která operace byla provedena.

Tip

Pokud máte například podezření, že objekt blob nebo kontejner byl omylem odstraněn, přidejte where klauzuli, která vrací pouze položky protokolu, ve kterých OperationName je nastavena možnost Odstranit objekt blob nebo Odstranit kontejner. U části "kdo" vašeho auditu ukazuje, AuthenticationType jaký typ ověřování se použil k provedení žádosti. Toto pole může zobrazit libovolný z typů ověřování, které Azure Storage podporuje, včetně použití klíče účtu, tokenu SAS nebo ověřování Microsoft Entra.

Pokud je žádost autorizována pomocí ID Microsoft Entra, můžete pomocí RequestObjectId pole identifikovat "kdo". Sdílený klíč a ověřování SAS neposkytuje žádný způsob auditování jednotlivých identit. V těchto případech callerIPAddress vám můžou pole userAgentHeader pomoct identifikovat zdroj operace. Pokud se k autorizaci operace použil token SAS, můžete tento token identifikovat a pokud jste namapovali tokeny na příjemce tokenů na vaší straně, můžete zjistit, který uživatel, organizace nebo aplikace operaci provedl. Viz Identifikace tokenu SAS použitého k autorizaci požadavku.

Identifikace objektu zabezpečení použitého k autorizaci žádosti

Pokud se požadavek ověřil pomocí ID Microsoft Entra, RequesterObjectId poskytuje pole nejspolehlivější způsob identifikace objektu zabezpečení. Popisný název tohoto objektu zabezpečení najdete tak, že vezmete hodnotu RequesterObjectId pole a vyhledáte objekt zabezpečení na stránce ID Microsoft Entra na webu Azure Portal. Následující snímek obrazovky ukazuje výsledek hledání v MICROSOFT Entra ID.

Search Microsoft Entra ID

V některých případech se v protokolech může zobrazovat hlavní název uživatele nebo hlavní název uživatele (UPN ). Pokud je například objekt zabezpečení uživatelem Microsoft Entra, pravděpodobně se zobrazí hlavní název uživatele (UPN). U jiných typů objektů zabezpečení, jako jsou spravované identity přiřazené uživatelem nebo v určitých scénářích, jako je například ověřování tenanta Microsoft Entra, se hlavní název uživatele (UPN) nezobrazí v protokolech.

Tento dotaz zobrazuje všechny operace čtení prováděné objekty zabezpečení OAuth.

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

Sdílený klíč a ověřování SAS neposkytuje žádný způsob auditování jednotlivých identit. Proto pokud chcete zlepšit možnost auditování na základě identity, doporučujeme přejít na ID Microsoft Entra a zabránit sdílenému klíči a ověřování SAS. Informace o tom, jak zabránit ověřování pomocí sdíleného klíče a SAS, najdete v tématu Zabránění autorizaci sdíleného klíče pro účet služby Azure Storage. Pokud chcete začít s ID Microsoft Entra, přečtěte si téma Autorizace přístupu k objektům blob pomocí Microsoft Entra ID.

Identifikace tokenu SAS použitého k autorizaci požadavku

Můžete se dotazovat na operace, které byly autorizované pomocí tokenu SAS. Tento dotaz například vrátí všechny operace zápisu, které byly autorizované pomocí tokenu SAS.

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

Z bezpečnostních důvodů se tokeny SAS nezobrazují v protokolech. Hodnota hash SHA-256 tokenu SAS se ale zobrazí v AuthenticationHash poli, které tento dotaz vrátí.

Pokud jste distribuovali několik tokenů SAS a chcete vědět, které tokeny SAS se používají, budete muset všechny tokeny SAS převést na hodnotu hash SHA-256 a pak tuto hodnotu hash porovnat s hodnotou hash, která se zobrazí v protokolech.

Nejprve dekódujte každý řetězec tokenu SAS. Následující příklad dekóduje řetězec tokenu SAS pomocí PowerShellu.

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

Tento řetězec pak můžete předat rutině PowerShellu Get-FileHash . Příklad: Příklad 4: Výpočet hodnoty hash řetězce.

Případně můžete dekódovaný řetězec předat funkci hash_sha256() jako součást dotazu při použití Azure Data Exploreru.

Tokeny SAS neobsahují informace o identitě. Jedním ze způsobů, jak sledovat aktivity uživatelů nebo organizací, je udržovat mapování uživatelů nebo organizací na různé hodnoty hash tokenů SAS.

Optimalizace nákladů na občasné dotazy

Protokoly můžete exportovat do Log Analytics a zajistit tak bohaté nativní možnosti dotazů. Pokud máte ve svém účtu úložiště obrovské transakce, můžou být vysoké náklady na používání protokolů s Log Analytics. Další informace najdete v tématu Ceny služby Azure Log Analytics. Pokud plánujete dotazovat pouze protokoly příležitostně (například protokoly dotazů pro auditování dodržování předpisů), můžete zvážit snížení celkových nákladů exportem protokolů do účtu úložiště a následným použitím řešení dotazů bez serveru nad daty protokolů, například Azure Synapse.

Pomocí Azure Synapse můžete vytvořit fond SQL bez serveru, který bude dotazovat data protokolu, když potřebujete. To by mohlo výrazně ušetřit náklady.

  1. Export protokolů do účtu úložiště Další informace naleznete v tématu Vytvoření nastavení diagnostiky.

  2. Vytvoření a konfigurace pracovního prostoru Synapse Další informace najdete v tématu Rychlý start: Vytvoření pracovního prostoru Synapse.

  3. Dotazování protokolů Další informace najdete v tématu Dotazování souborů JSON pomocí bezserverového fondu SQL ve službě Azure Synapse Analytics.

    Tady je příklad:

     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
    
    

Viz také