Práticas recomendadas para monitorar o Armazenamento de Blobs do Azure

Este artigo apresenta uma coleção de cenários comuns de monitoramento do armazenamento, e fornece diretrizes de melhores práticas para fazer isso.

Identificar contas de armazenamento de pouco ou nenhum uso

Os Insights de Armazenamento são um painel localizado sobre as métricas e logs do Armazenamento do Azure. Você pode usar os Insights de Armazenamento para examinar o volume de transações e a capacidade usada de todas as suas contas. Essas informações podem ajudá-lo a decidir quais contas você talvez queira desativar. Para configurar os Insights de Armazenamento, confira Monitorar seu serviço de armazenamento com os Insights de Armazenamento do Azure Monitor.

Analisar o volume de transação

Na exibição do Insights de Armazenamento no Azure Monitor, classifique suas contas em ordem crescente usando a coluna Transações. A imagem a seguir mostra uma conta com baixo volume de transação durante o período especificado.

volume de transação nos Insights de Armazenamento

Clique no link da conta para saber mais sobre essas transações. Neste exemplo, a maioria das solicitações é feita para o serviço de Armazenamento de Blobs.

transação por tipo de serviço

Para determinar quais tipos de solicitações estão sendo feitas, faça uma análise do gráfico de Transações por nome de API.

APIs de transações de Armazenamento

Neste exemplo, todas as solicitações estão listando operações ou solicitações para informações de propriedade da conta. Não há transações de leitura e gravação. Isso pode fazer você acreditar que a conta não esteja sendo usada de maneira significativa.

Analisar a capacidade usada

Na guia Capacidade da exibição dos Insights de Armazenamento no Azure Monitor, classifique suas contas em ordem crescente usando a coluna Capacidade de uso da conta. A imagem a seguir mostra uma conta com volume de capacidade menor do que outras.

Capacidade de armazenamento usada

Para examinar os blobs associados a essa capacidade usada, você pode usar o Gerenciador de Armazenamento. Para um grande número de blobs, considere gerar um relatório usando uma política de Inventário de Blobs.

Monitorar o uso de um contêiner

Se você particionar os dados do cliente por contêiner, poderá monitorar a capacidade usada por cada cliente. Você pode usar o inventário de blob do Armazenamento do Azure para fazer um inventário dos blobs com informações de tamanho. Em seguida, você pode agregar o tamanho e a contagem no nível do contêiner. Por exemplo, consulte Calcular a contagem de blobs e o tamanho total por contêiner usando o inventário de Armazenamento do Azure.

Você também pode avaliar o tráfego no nível do contêiner consultando logs. Para saber mais sobre como gravar consultas do Log Analytics, consulte Log Analytics. Para saber mais sobre o esquema de logs de armazenamento, consulte Referência de dados de monitoramento do Armazenamento de Blobs do Azure.

Aqui está uma consulta para obter o número de transações de leitura e o número de bytes lidos em cada contêiner.

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

A consulta a seguir usa uma consulta semelhante para obter informações sobre operações de gravação.

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)

A consulta acima faz referência aos nomes de várias operações porque mais de um tipo de operação pode contar como uma operação de gravação. Para saber mais sobre quais operações são consideradas de leitura e de gravação, consulte Preços do Armazenamento de Blobs do Azure ou Preços do Azure Data Lake Storage.

Auditar a atividade da conta

Em muitos casos, você precisará auditar as atividades de suas contas de armazenamento quanto à segurança e à conformidade. As operações em conta de armazenamento podem ser divididas em duas categorias: Painel de controle e Plano de dados.

Uma operação do painel de controle é qualquer solicitação do Azure Resource Manager para criar uma conta de armazenamento ou para atualizar uma propriedade de uma conta de armazenamento existente. Para obter mais informações, consulte Azure Resource Manager.

Uma operação de plano de dados é uma operação nos dados em uma conta de armazenamento que resulta de uma solicitação para o ponto de extremidade do serviço de armazenamento. Por exemplo, uma operação de plano de dados é executada quando você faz o upload de um blob em uma conta de armazenamento, ou quando faz o download de um blob de uma conta de armazenamento. Para obter mais informações, consulte API de Armazenamento do Azure.

A seção mostra como identificar as informações "quando", "quem", "o que" e "como" das operações de controle e plano de dados.

Auditar operações do painel de controle

As operações do Resource Manager são capturadas no log de atividades do Azure. Para exibir o log de atividades, abra sua conta de armazenamento no portal do Azure e selecione Log de atividades.

Log de atividades

Abra qualquer entrada de log para exibir o JSON que descreve a atividade. O JSON a seguir mostra as informações "quando", "o que" e "como" de uma operação do painel de controle:

JSON do Log de atividades

A disponibilidade das informações de "quem" depende do método de autenticação usado para executar a operação do painel de controle. Se a autorização tiver sido executada por uma entidade de segurança do Microsoft Entra, o identificador do objeto dessa entidade de segurança também aparecerá nessa saída JSON (por exemplo: "http://schemas.microsoft.com/identity/claims/objectidentifier": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx"). Como você nem sempre vê outras informações relacionadas à identidade, como um endereço de e-mail ou nome, o identificador do objeto é sempre a melhor maneira de identificar com exclusividade a entidade de segurança.

Você pode encontrar o nome amigável dessa entidade de segurança assumindo o valor do identificador do objeto e pesquisando-a na página do Microsoft Entra ID no portal do Azure. A captura de tela a seguir mostra um resultado da pesquisa no Microsoft Entra ID.

Pesquisar o Microsoft Entra ID

Auditar operações do plano de dados

As operações do plano de dados são capturadas nos logs de recursos do Azure para o Armazenamento. Você pode definir a Configuração de diagnóstico para exportar logs para o workspace do Log Analytics para uma experiência de consulta nativa.

Aqui está uma consulta do Log Analytics que recupera as informações "quando", "quem", "o quê" e "como" em uma lista de entradas de log.

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

Para a parte "quando" de sua auditoria, o campo TimeGenerated mostra quando a entrada de log foi registrada.

Para a parte "o quê" de sua auditoria, o campo Uri mostra que o item foi modificado ou lido.

Para a parte "como" de sua auditoria, o campo OperationName mostra qual operação foi executada.

Dica

Por exemplo, se você suspeitar que um blob ou contêiner foi excluído por engano, adicione uma cláusula where que retorna apenas entradas de log em que o OperationName está definido como Excluir blob ou Excluir contêiner. Para a parte "quem" de sua auditoria, AuthenticationType mostra qual tipo de autenticação foi usado para fazer uma solicitação. Esse campo pode mostrar qualquer um dos tipos de autenticação aos quais o Armazenamento do Microsoft Azure dá suporte, incluindo o uso de uma chave de conta, um token SAS ou uma autenticação do Microsoft Entra.

Se a solicitação for autorizada usando Microsoft Entra ID, você poderá usar o campo RequestObjectId para identificar o "quem". A chave compartilhada e a autenticação SAS não fornecem nenhum meio de auditar identidades individuais. Nesses casos, os campos callerIPAddress e userAgentHeader podem ajudar você a identificar a origem da operação. Se um token SAS tiver sido usado para autorizar uma operação, você poderá identificar esse token e, se tiver mapeado tokens para destinatários de token na sua extremidade, você poderá identificar qual usuário, organização ou aplicativo executou a operação. Confira Como identificar o token SAS usado para autorizar uma solicitação.

Identificando a entidade de segurança usada para autorizar uma solicitação

Se uma solicitação foi autenticada usando o Microsoft Entra ID, o campo RequesterObjectId fornece a maneira mais confiável de identificar a entidade de segurança. Você pode encontrar o nome amigável dessa entidade de segurança assumindo o valor do campo RequesterObjectId, e pesquisando pela entidade de segurança na página do Microsoft Entra ID no portal do Azure. A captura de tela a seguir mostra um resultado da pesquisa no Microsoft Entra ID.

Pesquisar o Microsoft Entra ID

Em alguns casos, um nome UPN do usuário pode aparecer nos logs. Por exemplo, se a entidade de segurança for um usuário do Microsoft Entra, o UPN provavelmente será exibido. Para outros tipos de entidades de segurança, como identidades gerenciadas atribuídas pelo usuário, ou em determinados cenários, como na autenticação cruzada de locatário do Microsoft Entra, o UPN não aparecerá nos logs.

Essa consulta mostra todas as operações de leitura executadas pelas entidades de segurança OAuth.

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

A chave compartilhada e a autenticação SAS não fornecem nenhum meio de auditar identidades individuais. Portanto, se você quiser melhorar sua capacidade de auditar com base na identidade, recomendamos fazer a transição para o Microsoft Entra ID e evitar a autenticação de chave compartilhada e SAS. Para saber como evitar a autenticação de Chave Compartilhada e SAS, consulte Evitar a autorização de chave compartilhada para uma conta de Armazenamento do Microsoft Azure. Para começar a usar o Microsoft Entra ID, consulte Autorizar o acesso a blobs usando o Microsoft Entra ID.

Identificando o token SAS usado para autorizar uma solicitação

Você pode consultar operações que foram autorizadas usando um token SAS. Por exemplo, essa consulta retorna todas as operações de gravação que foram autorizadas usando um token SAS.

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

Por motivos de segurança, os tokens SAS não aparecem nos logs. No entanto, o hash SHA-256 da assinatura do token SAS aparecerá no campo AuthenticationHash retornado por essa consulta.

Se você distribuiu vários tokens SAS e quiser saber quais estão sendo utilizados, converta a parte de assinatura de cada um deles num hash SHA-256 e, em seguida, compare esse hash ao valor hash que aparece nos registos.

Primeiro decodifique cada cadeia de caracteres de token SAS. O exemplo a seguir decodifica a parte de assinatura da cadeia de caracteres do token SAS usando o PowerShell.

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

Você pode usar qualquer ferramenta ou SDK para converter a assinatura decodificada no SHA-256 com essa assinatura. Por exemplo, em um sistema Linux, você pode usar o seguinte comando:

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

Outra maneira de converter a assinatura decodificada é passar a cadeia de caracteres decodificada para a função hash_sha256() como parte de uma consulta ao usar o Azure Data Explorer.

Os tokens SAS não contêm informações de identidade. Uma forma de acompanhar as atividades de usuários ou organizações é manter um mapeamento de usuários ou organizações para vários hashes de token SAS.

Otimizar o custo para consultas pouco frequentes

Você pode exportar os logs para o Log Analytics para utilizar recursos nativos e avançados de consulta. Quando você tem transações em massa em sua conta de armazenamento, o custo de usar os logs com o Log Analytics pode ser alto. Para saber mais, consulte Preços do Azure Log Analytics. Se você planeja apenas consultar logs ocasionalmente (por exemplo, logs de consulta para auditoria de conformidade), considere reduzir o custo total exportando os logs para uma conta de armazenamento e, em seguida, usando uma solução de consulta sem servidor sobre os dados do log, por exemplo, o Azure Synapse.

Com o Azure Synapse, você pode criar um pool de SQL sem servidor para consultar dados de log quando necessário. Isso pode reduzir significativamente os custos.

  1. Exportar logs para conta de armazenamento. Para obter mais informações, confira Criação de uma configuração de diagnóstico.

  2. Criar e configurar um workspace do Synapse. Para obter mais informações, confira Início Rápido: Criar um workspace do Synapse.

  3. Logs de consulta. Para obter mais informações, veja Consultar arquivos JSON usando o pool de SQL sem servidor no Azure Synapse Analytics.

    Veja um exemplo:

     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
    
    

Confira também