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

Este artigo apresenta uma coleção de cenários comuns de monitoramento de armazenamento e fornece diretrizes de práticas recomendadas para realizá-los.

Identificar contas de armazenamento de baixa utilização ou sem utilização

O Storage Insights é um painel sobre métricas e logs do Armazenamento do Azure. Você pode usar o Storage Insights 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ê pode querer aposentar. Para configurar o Storage Insights, consulte Monitorando seu serviço de armazenamento com o Azure Monitor Storage insights.

Analise o volume de transações

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

volume de transações no Storage Insights

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

Transação por tipo de serviço

Para determinar que tipos de solicitações estão sendo feitas, analise detalhadamente o gráfico Transações por nome de API.

APIs de transação de armazenamento

Neste exemplo, todas as solicitações são operações de listagem ou solicitações de informações de propriedade da conta. Não há transações de leitura e gravação. Isso pode levá-lo a acreditar que a conta não está sendo usada de forma significativa.

Analise a capacidade usada

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

Capacidade de armazenamento utilizada

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.

Monitorizar a utilização de um contentor

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

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

Aqui está uma consulta para obter o número de transações lidas 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 operações de leitura e gravação, consulte Preços do Armazenamento de Blob do Azure ou Preços do Armazenamento do Azure Data Lake.

Auditar a atividade da conta

Em muitos casos, você precisará auditar as atividades de suas contas de armazenamento para garantir segurança e conformidade. As operações em contas de armazenamento se enquadram em duas categorias: Plano de Controle e Plano de Dados.

Uma operação de plano de controle é qualquer solicitação do Azure Resource Manager para criar uma conta de armazenamento ou 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 ao ponto de extremidade do serviço de armazenamento. Por exemplo, uma operação de plano de dados é executada quando você carrega um blob para uma conta de armazenamento ou baixa 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 quê" e "como" das operações de controle e plano de dados.

Auditoria das operações do avião de controlo

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.

Registo de Atividades

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

Log de atividades JSON

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

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

Pesquisar ID do Microsoft Entra

Auditoria de operações do plano de dados

As operações do plano de dados são capturadas nos logs de recursos do Azure para Armazenamento. Você pode definir a configuração Diagnóstico para exportar logs para o espaço de trabalho 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" da auditoria, o TimeGenerated campo mostra quando a entrada de log foi registrada.

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

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

Gorjeta

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

Se a solicitação for autorizada usando o Microsoft Entra ID, você pode usar o RequestObjectId campo para identificar o "quem". A chave compartilhada e a autenticação SAS não fornecem meios de auditar identidades individuais. Nesses casos, os callerIPAddress campos e userAgentHeader podem ajudá-lo a identificar a origem da operação. Se um token SAS foi usado para autorizar uma operação, você pode identificar esse token e, se tiver mapeado tokens para destinatários de token no final, poderá identificar qual usuário, organização ou aplicativo executou a operação. Consulte Identificando 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 RequesterObjectId campo 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 pegando o RequesterObjectId valor do campo e pesquisando a entidade de segurança na página ID do Microsoft Entra do portal do Azure. A captura de tela a seguir mostra um resultado de pesquisa no Microsoft Entra ID.

Pesquisar ID do Microsoft Entra

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

Esta 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 meios de auditar identidades individuais. Portanto, se você quiser melhorar sua capacidade de auditar com base na identidade, recomendamos que faça a transição para o Microsoft Entra ID e impeça a autenticação de chave compartilhada e SAS. Para saber como impedir a autenticação de Chave Compartilhada e SAS, consulte Impedir autorização de Chave Compartilhada para uma conta de Armazenamento do 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 razões de segurança, os tokens SAS não aparecem nos logs. No entanto, o hash SHA-256 da assinatura do token SAS aparecerá no AuthenticationHash campo retornado por esta consulta.

Se você distribuiu vários tokens SAS e deseja saber quais tokens SAS estão sendo usados, você terá que converter a parte de assinatura de cada um dos seus tokens SAS em um hash SHA-256 e, em seguida, comparar esse hash com o valor de hash que aparece nos logs.

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

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

Você pode usar qualquer ferramenta ou SDK para converter a assinatura decodificada para o SHA-256 tem dessa 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 quando você usa o Azure Data Explorer.

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

Otimize o custo para consultas pouco frequentes

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

Com o Azure Synapse, você pode criar um pool SQL sem servidor para consultar dados de log quando precisar. Tal poderia reduzir significativamente os custos.

  1. Exporte logs para a conta de armazenamento. Para obter mais informações, consulte Criando uma configuração de diagnóstico.

  2. Crie e configure um espaço de trabalho Synapse. Para obter mais informações, consulte Guia de início rápido: criar um espaço de trabalho Sinapse.

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

    Eis 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
    
    

Consulte também