Udostępnij za pomocą


Najlepsze rozwiązania dotyczące monitorowania usługi Azure Blob Storage

Ten artykuł zawiera kolekcję typowych scenariuszy monitorowania magazynu i zawiera wskazówki dotyczące najlepszych rozwiązań, które można z nimi osiągnąć.

Identyfikowanie kont pamięci bez użycia lub o niskim wykorzystaniu

Usługa Storage Insights to pulpit nawigacyjny na podstawie metryk i dzienników usługi Azure Storage. Możesz użyć usługi Storage Insights, aby zbadać wolumen transakcji i używaną pojemność wszystkich kont. Te informacje mogą pomóc w podjęciu decyzji o tym, które konta mogą chcieć wycofać. Aby skonfigurować Storage Insights, zobacz Monitorowanie usługi Azure za pomocą Storage Insights.

Analizowanie woluminu transakcji

W widoku Usługi Storage Insights w usłudze Azure Monitor posortuj konta w kolejności rosnącej przy użyciu kolumny Transakcje. Na poniższej ilustracji przedstawiono konto z niskim wolumenem transakcji w określonym przedziale czasu.

wolumin transakcji w usłudze Storage Insights

Kliknij link konta, aby dowiedzieć się więcej o tych transakcjach. W tym przykładzie większość żądań jest wysyłana do usługi Blob Storage.

transakcja według typu usługi

Aby określić, jakie żądania są wykonywane, przejdź do szczegółów wykresu Transakcje według nazwy API.

Interfejsy API transakcji przechowywania

W tym przykładzie wszystkie żądania zawierają listę operacji lub żądań dotyczących informacji o właściwości konta. Brak transakcji odczytu i zapisu. Może to prowadzić do przekonania, że konto nie jest używane w znaczący sposób.

Analizowanie używanej pojemności

Na karcie Pojemność w widoku Szczegóły pojemności Storage w Azure Monitor posortuj konta w kolejności rosnącej przy użyciu kolumny Używana pojemność konta. Na poniższej ilustracji przedstawiono konto z niższym woluminem pojemności niż inne konta.

Użyta pojemność magazynu

Aby zbadać obiekty blob skojarzone z pojemnością, której używasz, możesz użyć Storage Explorer. W przypadku dużej liczby obiektów blob rozważ wygenerowanie raportu przy użyciu polityki spisu obiektów blob.

Monitorowanie użycia kontenera

Jeśli partycjonujesz dane klienta według kontenera, możesz monitorować ilość pojemności używanej przez każdego klienta. Spis obiektów blob usługi Azure Storage umożliwia utworzenie spisu obiektów blob z informacjami o rozmiarze. Następnie można agregować rozmiar i liczbę na poziomie kontenera. Aby zapoznać się z przykładem, zobacz Calculate blob count and total size per container using Azure Storage inventory (Obliczanie liczby obiektów blob i łączny rozmiar na kontener przy użyciu spisu usługi Azure Storage).

Możesz ocenić ruch na poziomie kontenera, również wykonując zapytania dotyczące dzienników. Aby dowiedzieć się więcej na temat pisania zapytań analitycznych dzienników, zapoznaj się z Log Analytics. Aby dowiedzieć się więcej na temat schematu dzienników magazynu, zobacz Referencje danych monitorowania usługi Azure Blob Storage.

Oto zapytanie, aby uzyskać liczbę transakcji odczytu i liczbę bajtów odczytanych w każdym kontenerze.

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

Poniższe zapytanie używa podobnego zapytania, aby uzyskać informacje o operacjach zapisu.

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)

Powyższe zapytanie odwołuje się do nazw wielu operacji, ponieważ więcej niż jeden typ operacji może być liczone jako operacja zapisu. Aby dowiedzieć się więcej o tym, które operacje są uznawane za operacje odczytu i zapisu, zobacz cennik usługi Azure Blob Storage lub cennik usługi Azure Data Lake Storage.

Inspekcja aktywności konta

W wielu przypadkach należy przeprowadzić inspekcję działań kont magazynu pod kątem zabezpieczeń i zgodności. Operacje na kontach magazynu należą do dwóch kategorii: Warstwa kontrolna i Warstwa danych.

Operacja płaszczyzny sterowania to dowolne żądanie usługi Azure Resource Manager dotyczące utworzenia konta magazynu lub zaktualizowania właściwości istniejącego konta magazynu. Aby uzyskać więcej informacji, zobacz Azure Resource Manager.

Operacja na planie danych to operacja dotycząca danych na koncie magazynowym, wynikająca z żądania do punktu końcowego usługi magazynu. Na przykład operacja na warstwie danych jest wykonywana podczas przesyłania obiektu blob na konto magazynowania lub pobierania obiektu blob z konta magazynowania. Aby uzyskać więcej informacji, zobacz Interfejs API usługi Azure Storage.

W sekcji pokazano, jak zidentyfikować informacje dotyczące "kiedy", "kto", "co" i "jak" w operacjach kontroli i płaszczyzny danych.

Inspekcja operacji płaszczyzny sterowania

Operacje usługi Resource Manager są przechwytywane w dzienniku aktywności platformy Azure. Aby wyświetlić dziennik aktywności, otwórz konto magazynu w portalu Azure, a następnie wybierz Dziennik aktywności.

Dziennik aktywności

Otwórz dowolny wpis dziennika, aby wyświetlić kod JSON opisujący działanie. Poniższy kod JSON przedstawia informacje o "kiedy", "co" i "jak" operacji na płaszczyźnie sterowania.

JSON rejestru aktywności

Dostępność informacji "kto" zależy od metody uwierzytelniania, która została użyta do wykonania operacji płaszczyzny sterowania. Jeśli autoryzacja została wykonana przez podmiot zabezpieczeń firmy Microsoft Entra, identyfikator obiektu tego podmiotu zabezpieczeń będzie również wyświetlany w tych danych wyjściowych JSON (na przykład: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Ponieważ nie zawsze widzisz inne informacje dotyczące tożsamości, takie jak adres e-mail lub nazwa, identyfikator obiektu jest zawsze najlepszym sposobem unikatowego identyfikowania podmiotu zabezpieczeń.

Przyjazną nazwę tego podmiotu zabezpieczeń można znaleźć, korzystając z wartości identyfikatora obiektu i wyszukując podmiot zabezpieczeń na stronie Microsoft Entra ID w portalu Azure. Poniższy zrzut ekranu przedstawia wynik wyszukiwania w identyfikatorze Entra firmy Microsoft.

Wyszukaj Microsoft Entra ID

Audyt operacji płaszczyzny danych

Operacje płaszczyzny danych są przechwytywane w dziennikach zasobów platformy Azure dla usługi Storage. Możesz skonfigurować ustawienia diagnostyczne, aby wyeksportować dzienniki do obszaru roboczego usługi Log Analytics na potrzeby natywnego środowiska zapytań.

Oto zapytanie usługi Log Analytics, które pobiera informacje „kiedy”, „kto”, „co” i „jak” z listy wpisów dziennika.

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

W przypadku części "when" inspekcji pole TimeGenerated pokazuje, kiedy zarejestrowano wpis dziennika.

Pole Uri dla części „co” inspekcji pokazuje, że element został zmodyfikowany lub odczytany.

W przypadku części "how" inspekcji pole OperationName pokazuje, która operacja została wykonana.

Napiwek

Jeśli na przykład podejrzewasz, że obiekt blob lub kontener został usunięty przez pomyłkę, dodaj klauzulę zwracającą where tylko wpisy dziennika, w których OperationName ustawiono opcję Usuń obiekt blob lub Usuń kontener. W części "kto" audytu AuthenticationType pokazuje, który typ uwierzytelniania został użyty do wykonania żądania. To pole może wyświetlać dowolne typy uwierzytelniania obsługiwane przez usługę Azure Storage, w tym użycie klucza konta, tokenu SAS lub uwierzytelniania entra firmy Microsoft.

Jeśli żądanie jest autoryzowane przy użyciu identyfikatora Entra firmy Microsoft, możesz użyć RequestObjectId pola , aby zidentyfikować "kto". Uwierzytelnianie za pomocą klucza współdzielonego i sygnatury dostępu współdzielonego nie zapewnia możliwości audytu poszczególnych tożsamości. W takich przypadkach pola callerIPAddress i userAgentHeader mogą pomóc w zidentyfikowaniu źródła operacji. Jeśli token SAS został użyty do autoryzacji operacji, możesz zidentyfikować ten token. Jeśli po twojej stronie zamapowano tokeny do ich odbiorców, możesz określić, który użytkownik, organizacja lub aplikacja wykonała operację. Zobacz Identyfikowanie tokenu SAS używanego do autoryzowania żądania.

Identyfikowanie podmiotu zabezpieczeń używanego do autoryzowania żądania

Jeśli żądanie zostało uwierzytelnione przy użyciu identyfikatora Firmy Microsoft Entra, RequesterObjectId pole zapewnia najbardziej niezawodny sposób identyfikowania podmiotu zabezpieczeń. Przyjazną nazwę tego podmiotu zabezpieczeń można znaleźć, pobierając wartość RequesterObjectId pola i wyszukując podmiot zabezpieczeń na stronie Microsoft Entra ID w portalu Azure. Poniższy zrzut ekranu przedstawia wynik wyszukiwania w identyfikatorze Entra firmy Microsoft.

Wyszukaj Microsoft Entra ID

W niektórych przypadkach główna nazwa użytkownika lub nazwa UPN może być wyświetlana w dziennikach. Jeśli na przykład podmiot zabezpieczeń jest użytkownikiem Microsoft Entra, prawdopodobnie zostanie wyświetlony UPN. W przypadku innych typów podmiotów zabezpieczeń, na przykład tożsamości zarządzanych przypisanych przez użytkownika, lub w niektórych scenariuszach, takich jak uwierzytelnianie między dzierżawami Microsoft Entra, nazwa UPN nie będzie wyświetlana w dziennikach.

To zapytanie pokazuje wszystkie operacje odczytu wykonywane przez podmioty zabezpieczeń OAuth.

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

Uwierzytelnianie za pomocą klucza współdzielonego i sygnatury dostępu współdzielonego nie zapewnia możliwości audytu poszczególnych tożsamości. W związku z tym, jeśli chcesz poprawić zdolność audytu opartą na tożsamości, zalecamy przejście na Microsoft Entra ID oraz rezygnację z uwierzytelniania opartego na kluczach współdzielonych i sygnaturze dostępu współdzielonego (SAS). Aby dowiedzieć się, jak zapobiec uwierzytelnianiu za pomocą klucza współdzielonego i SAS, zobacz Zapobieganie autoryzacji za pomocą klucza współdzielonego dla konta Azure Storage. Aby rozpocząć pracę z identyfikatorem Entra firmy Microsoft, zobacz Autoryzowanie dostępu do obiektów blob przy użyciu identyfikatora Entra firmy Microsoft.

Identyfikowanie tokenu SAS używanego do autoryzowania żądania

Można zapytać o operacje, które zostały autoryzowane przy użyciu tokenu SAS. Na przykład to zapytanie zwraca wszystkie operacje zapisu, które zostały autoryzowane przy użyciu tokenu SAS.

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

Ze względów bezpieczeństwa tokeny SAS nie są wyświetlane w dziennikach. Jednak skrót SHA-256 sygnatury tokenu SAS pojawi się w AuthenticationHash polu zwracanym przez to zapytanie.

Jeśli rozesłałeś kilka tokenów SAS i chcesz się dowiedzieć, które z nich są używane, musisz przekonwertować część podpisu każdego tokena SAS na skrót SHA-256, a następnie porównać ten skrót z wartością skrótu wyświetlaną w dziennikach.

Najpierw zdekoduj każdy ciąg tokenu SAS. Poniższy przykład dekoduje część podpisu ciągu tokenu SAS przy użyciu programu PowerShell.

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

Możesz użyć dowolnego narzędzia lub zestawu SDK, aby przekonwertować zdekodowany podpis na wartość SHA-256 z tego podpisu. Na przykład w systemie Linux można użyć następującego polecenia:

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

Innym sposobem konwersji dekodowanego podpisu jest przekazanie dekodowanego ciągu do funkcji hash_sha256() w ramach zapytania podczas korzystania z usługi Azure Data Explorer.

Tokeny SAS nie zawierają informacji o tożsamości. Jednym ze sposobów śledzenia działań użytkowników lub organizacji jest zachowanie powiązań użytkowników lub organizacji z różnymi haszami tokenów SAS.

Optymalizowanie kosztów dla rzadko wykonywanych zapytań

Dzienniki można wyeksportować do usługi Log Analytics, aby uzyskać zaawansowane natywne możliwości zapytań. Jeśli masz masowe transakcje na koncie magazynowym, koszt korzystania z dzienników z usługą Log Analytics może być wysoki. Aby uzyskać więcej informacji, zobacz Cennik usługi Azure Log Analytics. Jeśli planujesz wykonywać zapytania dotyczące dzienników tylko od czasu do czasu (na przykład zapytania dotyczące inspekcji zgodności), możesz rozważyć zmniejszenie całkowitego kosztu przez wyeksportowanie dzienników na konto magazynu, a następnie użycie rozwiązania do zapytań bezserwerowych na podstawie danych dziennika, na przykład usługi Azure Synapse.

Za pomocą usługi Azure Synapse możesz utworzyć pulę SQL bezserwerową w celu wykonywania zapytań dotyczących danych dziennika w razie potrzeby. Może to znacznie obniżyć koszty.

  1. Eksportowanie dzienników do konta magazynowego. Aby uzyskać więcej informacji, zobacz Tworzenie ustawienia diagnostycznego.

  2. Tworzenie i konfigurowanie obszaru roboczego usługi Synapse. Aby uzyskać więcej informacji, zobacz Szybki start: tworzenie obszaru roboczego usługi Synapse.

  3. Dzienniki zapytań. Aby uzyskać więcej informacji, zobacz Query JSON files using serverless SQL pool in Azure Synapse Analytics (Wykonywanie zapytań o pliki JSON przy użyciu bezserwerowej puli SQL w usłudze Azure Synapse Analytics).

    Oto przykład:

     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
    
    

Zobacz też