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.
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.
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.
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.
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.
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:
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.
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.
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.
Exportar logs para conta de armazenamento. Para obter mais informações, confira Criação de uma configuração de diagnóstico.
Criar e configurar um workspace do Synapse. Para obter mais informações, confira Início Rápido: Criar um workspace do Synapse.
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