Gerir dados pessoais no Azure Monitor Logs e Application Insights

O Log Analytics é um armazenamento de dados onde é provável que os dados pessoais sejam encontrados. O Application Insights armazena seus dados em uma partição do Log Analytics. Este artigo explica onde o Log Analytics e o Application Insights armazenam dados pessoais e como gerenciar esses dados.

Neste artigo, os dados de log referem-se aos dados enviados para um espaço de trabalho do Log Analytics, enquanto os dados do aplicativo referem-se aos dados coletados pelo Application Insights. Se você estiver usando um recurso do Application Insights baseado em espaço de trabalho, as informações sobre dados de log serão aplicadas. Se você estiver usando um recurso clássico do Application Insights, os dados do aplicativo serão aplicados.

Nota

Para obter informações sobre como exibir ou excluir dados pessoais, consulte Solicitações gerais do titular de dados para o GDPR, Solicitações do titular de dados do Azure para o GDPR ou Solicitações do titular de dados do Windows para o GDPR, dependendo da sua área e necessidades específicas. Para obter mais informações sobre o GDPR, consulte a seção GDPR da Central de Confiabilidade da Microsoft e a seção GDPR do portal Service Trust.

Permissões necessárias

Ação Permissões necessárias
Limpar dados de um espaço de trabalho do Log Analytics Microsoft.OperationalInsights/workspaces/purge/actionpermissões para o espaço de trabalho do Log Analytics, conforme fornecido pela função interna Colaborador do Log Analytics, por exemplo

Estratégia para o tratamento de dados pessoais

Embora caiba a si e à sua empresa definir uma estratégia para o tratamento de dados pessoais, aqui estão algumas abordagens, listadas do mais ao menos preferível do ponto de vista técnico:

  • Parar de recolher dados pessoais, ofuscar, anonimizar ou ajustar os dados recolhidos para os excluir de serem considerados "pessoais". Esta é , de longe , a abordagem preferida, o que poupa a necessidade de criar uma estratégia de tratamento de dados dispendiosa e impactante.
  • Normalize os dados para reduzir os efeitos negativos na plataforma de dados e no desempenho. Por exemplo, em vez de registrar um ID de usuário explícito, crie uma pesquisa para correlacionar o nome de usuário e seus detalhes a um ID interno que pode ser registrado em outro lugar. Dessa forma, se um usuário pedir que você exclua suas informações pessoais, você pode excluir apenas a linha na tabela de pesquisa que corresponde ao usuário.
  • Se você precisar coletar dados pessoais, crie um processo usando o caminho da API de limpeza e a API de consulta existente para atender a quaisquer obrigações de exportar e excluir quaisquer dados pessoais associados a um usuário.

Onde procurar dados pessoais no Log Analytics

O Log Analytics prescreve um esquema para seus dados, mas permite que você substitua cada campo por valores personalizados. Você também pode ingerir esquemas personalizados. Como tal, é impossível dizer exatamente onde os dados pessoais serão encontrados no seu espaço de trabalho específico. Os seguintes locais, no entanto, são bons pontos de partida no seu inventário.

Nota

Algumas das consultas abaixo são usadas search * para consultar todas as tabelas em um espaço de trabalho. É altamente recomendável que você evite usar search *o , que cria uma consulta altamente ineficiente, sempre que possível. Em vez disso, consulte uma tabela específica.

Dados de registo

  • Endereços IP: o Log Analytics coleta várias informações de IP em várias tabelas. Por exemplo, a consulta a seguir mostra todas as tabelas que coletaram endereços IPv4 nas últimas 24 horas:

    search * 
    | where * matches regex @'\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}\b' //RegEx originally provided on https://stackoverflow.com/questions/5284147/validating-ipv4-addresses-with-regexp
    | summarize count() by $table
    
  • IDs de usuário: você encontrará nomes de usuário e IDs de usuário em várias soluções e tabelas. Você pode procurar um nome de usuário ou ID de usuário específico em todo o conjunto de dados usando o comando search:

    search "<username or user ID>"
    

    Lembre-se de procurar não apenas nomes de usuário legíveis por humanos, mas também GUIDs que possam ser rastreados até um usuário específico.

  • IDs de dispositivo: como os IDs de usuário, os IDs de dispositivo às vezes são considerados dados pessoais. Use a abordagem listada acima para IDs de usuário para identificar tabelas que contêm dados pessoais.

  • Dados personalizados: o Log Analytics permite coletar dados personalizados por meio de logs personalizados, campos personalizados, a API do Coletor de Dados HTTP e como parte dos logs de eventos do sistema. Verifique todos os dados personalizados para dados pessoais.

  • Dados capturados pela solução: como o mecanismo da solução é aberto, recomendamos a revisão de todas as tabelas geradas pelas soluções para garantir a conformidade.

Dados de aplicação

  • Endereços IP: Embora o Application Insights ofusque todos os campos de endereço IP por 0.0.0.0 padrão, é bastante comum substituir esse valor pelo IP real do usuário para manter as informações da sessão. Use a consulta abaixo para encontrar qualquer tabela que contenha valores na coluna Endereço IP que não 0.0.0.0 sejam nas últimas 24 horas:

    search client_IP != "0.0.0.0"
    | where timestamp > ago(1d)
    | summarize numNonObfuscatedIPs_24h = count() by $table
    
  • IDs de usuário: por padrão, o Application Insights usa IDs geradas aleatoriamente para rastreamento de usuário e sessão em campos como session_Id, user_Id, user_AuthenticatedId, user_AccountId e customDimensions. No entanto, é comum substituir esses campos por uma ID mais relevante para o aplicativo, como nomes de usuário ou GUIDs do Microsoft Entra. Estes IDs são frequentemente considerados dados pessoais. Recomendamos ofuscar ou anonimizar esses IDs.

  • Dados personalizados: o Application Insights permite anexar um conjunto de dimensões personalizadas a qualquer tipo de dados. Use a seguinte consulta para identificar dimensões personalizadas coletadas nas últimas 24 horas:

    search * 
    | where isnotempty(customDimensions)
    | where timestamp > ago(1d)
    | project $table, timestamp, name, customDimensions 
    
  • Dados na memória e em trânsito: o Application Insights rastreia exceções, solicitações, chamadas de dependência e rastreamentos. Muitas vezes, você encontrará dados pessoais no nível de código e chamada HTTP. Analise exceções, solicitações, dependências e tabelas de rastreamento para identificar esses dados. Use inicializadores de telemetria sempre que possível para ofuscar esses dados.

  • Capturas do Depurador de Instantâneo: o recurso Depurador de Instantâneo no Application Insights permite coletar instantâneos de depuração quando o Application Insights deteta uma exceção na instância de produção do seu aplicativo. Os instantâneos expõem o rastreamento de pilha completa levando às exceções e aos valores para variáveis locais em cada etapa da pilha. Infelizmente, esse recurso não permite a exclusão seletiva de pontos de ajuste ou acesso programático a dados dentro do snapshot. Portanto, se a taxa de retenção de snapshot padrão não atender aos seus requisitos de conformidade, recomendamos que você desative o recurso.

Exportação e eliminação de dados pessoais

Recomendamos vivamente que reestruture a sua política de recolha de dados para deixar de recolher dados pessoais, ofuscar ou tornar anónimos os dados pessoais, ou de outra forma modificar esses dados até que deixem de ser considerados pessoais. Ao lidar com dados pessoais, você incorrerá em custos na definição e automação de uma estratégia, na construção de uma interface através da qual seus clientes interagem com seus dados e na manutenção contínua. Também é computacionalmente caro para o Log Analytics e o Application Insights, e um grande volume de chamadas simultâneas de API de Consulta ou Limpeza pode afetar negativamente todas as outras interações com a funcionalidade do Log Analytics. No entanto, se tiver de recolher dados pessoais, siga as orientações nesta secção.

Importante

Embora a maioria das operações de limpeza seja concluída muito mais rapidamente, o SLA formal para a conclusão das operações de limpeza é definido em 30 dias devido ao seu forte impacto na plataforma de dados. Este SLA atende aos requisitos do GDPR. É um processo automatizado, pelo que não há forma de agilizar a operação.

Ver e exportar

Use a API de consulta do Log Analytics ou a API de consulta do Application Insights para exibir e exportar solicitações de dados.

Nota

Não é possível usar a API de consulta do Log Analytics que tenha os planos de tabela Básico e Auxiliar. Em vez disso, use a API de pesquisa /Log Analytics.

Você precisa implementar a lógica para converter os dados em um formato apropriado para entrega aos usuários. O Azure Functions é um ótimo lugar para hospedar essa lógica.

Delete

Aviso

As exclusões no Log Analytics são destrutivas e irreversíveis! Por favor, tenha extrema cautela na sua execução.

A API de limpeza do Azure Monitor permite excluir dados pessoais. Use a operação de limpeza com moderação para evitar riscos potenciais, impacto no desempenho e o potencial de distorcer agregações, medições e outros aspetos completos dos dados do Log Analytics. Consulte a secção Estratégia para o tratamento de dados pessoais para abordagens alternativas ao tratamento de dados pessoais.

Purge é uma operação altamente privilegiada. Conceda a função Purificador de Dados no Azure Resource Manager com cautela devido ao potencial de perda de dados.

Para gerenciar os recursos do sistema, limitamos as solicitações de limpeza a 50 solicitações por hora. Lote a execução de solicitações de limpeza enviando um único comando cujo predicado inclui todas as identidades de usuário que exigem limpeza. Use o operador in para especificar várias identidades. Execute a consulta antes de executar a solicitação de limpeza para verificar os resultados esperados.

Importante

O uso da API do Log Analytics ou do Application Insights Purge não afeta seus custos de retenção. Para reduzir os custos de retenção, você deve diminuir o período de retenção de dados.

Dados de registo

  • A API POST Workspace Purge usa um objeto que especifica parâmetros de dados para excluir e retorna um GUID de referência.

  • A API POST Get Purge Status retorna um cabeçalho 'x-ms-status-location' que inclui uma URL que você pode chamar para determinar o status da operação de limpeza. Por exemplo:

    x-ms-status-location: https://management.azure.com/subscriptions/[SubscriptionId]/resourceGroups/[ResourceGroupName]/providers/Microsoft.OperationalInsights/workspaces/[WorkspaceName]/operations/purge-[PurgeOperationId]?api-version=2015-03-20
    

Nota

Não é possível limpar dados de tabelas que tenham os planos de tabela Básico e Auxiliar.

Dados de aplicação

  • A API Components - Purge POST usa um objeto que especifica parâmetros de dados para excluir e retorna um GUID de referência.

  • A API GET Components - Get Purge Status retorna um cabeçalho 'x-ms-status-location' que inclui uma URL que você pode chamar para determinar o status da sua operação de limpeza. Por exemplo:

    x-ms-status-location: https://management.azure.com/subscriptions/[SubscriptionId]/resourceGroups/[ResourceGroupName]/providers/microsoft.insights/components/[ComponentName]/operations/purge-[PurgeOperationId]?api-version=2015-05-01
    

Próximos passos