Gerenciando dados pessoais em logs do Azure Monitor e no Application Insights

O Log Analytics é um armazenamento de dados no qual é possível localizar dados pessoais. 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, dados de log referem-se aos dados enviados para um espaço de trabalho do Log Analytics, enquanto dados de aplicativo referem-se aos dados coletados pelo Application Insights. Se você estiver usando um recurso do Application Insights baseado em workspace, as informações sobre dados de log serão aplicadas. Se estiver usando um recurso clássico do Application Insights, os dados do aplicativo serão aplicados.

Observação

Para obter informações sobre como exibir ou excluir dados pessoais, consulte Solicitações do titular dos dados geral para GDPR, Solicitações do titular de dados do Azure para o GDPRou solicitações do titular de dados do Windows para o GDPR, dependendo de sua área e necessidades específicas. Para obter mais informações sobre o GDPR, confira a seção GDPR da Central de Confiabilidade da Microsoft e a seção GDPR do Portal de Confiança do Serviço.

Permissões necessárias

Ação Permissões necessárias
Limpar dados de um workspace do Log Analytics As permissões Microsoft.OperationalInsights/workspaces/purge/action para os workspaces do Log Analytics, conforme fornecidas pela função integrada de Colaborador do Log Analytics, por exemplo

Estratégia para tratamento de dados pessoais

Embora você e sua empresa definam uma estratégia para tratamento de dados pessoais, aqui estão algumas abordagens, listadas da mais para a menos preferível do ponto de vista técnico:

  • Pare de coletar dados pessoais ou ofuscar, anonimizar ou ajustar dados coletados para excluí-los de serem considerados "pessoais". Isso é sem dúvida a abordagem preferencial, que evita a necessidade de criar uma estratégia de tratamento de dados cara e impactante.
  • Normalize os dados para reduzir os efeitos negativos na plataforma de dados e no desempenho. Por exemplo, em vez de registrar uma ID de usuário explícita, crie uma pesquisa para correlacionar o nome de usuário e os respectivos detalhes a uma ID interna que poderá ser registrada em outro lugar. Dessa forma, se um usuário solicitar que você exclua suas informações pessoais, apenas a linha na tabela de pesquisa que corresponde ao usuário pode ser excluída.
  • Se você precisar coletar dados pessoais, compile 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 pesquisar dados pessoais no Log Analytics

O Log Analytics prescreve um esquema aos dados, mas permite substituir todos os campos por valores personalizados. Você também pode ingerir esquemas personalizados. Assim sendo, é impossível dizer exatamente onde os dados pessoais estarão localizados no workspace específico. No entanto, os locais a seguir são bons pontos iniciais no inventário.

Observação

Algumas das consultas abaixo usam search * para consultar todas as tabelas em um workspace. Sempre que possível, é altamente recomendável evitar usar search *, que cria uma consulta altamente ineficiente. Em vez disso, consulte uma tabela específica.

Dados de log

  • Endereços IP: o Log Analytics coleta diversas 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 e IDs de usuário em várias soluções e tabelas. É possível pesquisar um nome de usuário ou ID de usuário específicos em todo o conjunto de dados usando o comando de pesquisa:

    search "<username or user ID>"
    

    Lembre-se de procurar não apenas nomes de usuários legíveis, mas também GUIDs que podem ser rastreados para um usuário em particular.

  • IDs de dispositivo: como as IDs de usuário, as IDs de dispositivo algumas vezes são consideradas dados pessoais. Use a abordagem listada acima para IDs de usuário para identificar as 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 obter dados pessoais.

  • Dados capturados pela solução: como o mecanismo da solução é aberto, é recomendável revisar todas as tabelas geradas pelas soluções para garantir a conformidade.

Dados do aplicativo

  • Endereços IP: enquanto o Application Insights ofusca todos os campos de endereço IP para 0.0.0.0 por padrão, é bastante comum substituir esse valor pelo IP do usuário atual para manter as informações de sessão. Use a consulta abaixo para encontrar qualquer tabela que contém os valores na coluna endereço IP diferentes de 0.0.0.0 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 acompanhamento 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. Geralmente, essas IDs são consideradas dados pessoais. É recomendável ofuscar ou anonimizar essas IDs.

  • Dados personalizados: O Application Insights permite acrescentar um conjunto de dimensões personalizadas a qualquer tipo de dados. Use a consulta a seguir 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 acompanha solicitações, exceções, chamadas de dependência e rastreamentos. Geralmente, você encontrará dados pessoais no nível de chamada HTTP e código. Examine as exceções, solicitações, dependências e tabelas de rastreamento para identificar quaisquer dados desse tipo. Use inicializadores de telemetria sempre que possível para ofuscar esses dados.

  • Capturas do Depurador de Instantâneos: o recurso Depurador de Instantâneos do Application Insights permite coletar instantâneos de depuração quando o Application Insights detecta uma exceção na instância de produção do seu aplicativo. Instantâneos expõem o rastreamento de pilha completo levando às exceções e os valores de variáveis locais em cada etapa na pilha. Infelizmente, esse recurso não permite a exclusão seletiva de pontos de alinhamento, nem o acesso programático aos dados no instantâneo. Portanto, se a taxa de retenção de instantâneo padrão não atende a seus requisitos de conformidade, recomendamos a desativação do recurso.

Exportando e excluindo dados pessoais

É altamente recomendável reestruturar sua política de coleta de dados para parar de coletar dados pessoais, ofuscar ou anonimizar dados pessoais ou modificar esses dados até que eles não sejam mais considerados pessoais. Ao tratar dados pessoais, você incorrerá em custos para definir e automatizar uma estratégia, compilando uma interface por meio da qual seus clientes interagem com seus dados e manutenção contínua. Também é computacionalmente exigente para o Log Analytics e o Application Insights, e um grande volume de Consultas ou Chamadas à API de limpeza simultâneas pode afetar negativamente todas as outras interações com a funcionalidade do Log Analytics. No entanto, se você precisar coletar dados pessoais, siga as diretrizes nesta seçã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 como 30 dias devido ao grande impacto na plataforma de dados. Esse SLA atende aos requisitos do GDPR. O processo é automatizado. Portanto, não há como agilizar a operação.

Exibir 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.

Observação

Você não pode usar a API de consulta do Log Analytics que tenha os planos de tabela Básico e Auxiliar. Em vez disso, use a API Log Analytics /search.

É necessário implementar a lógica para converter os dados em um formato apropriado para entrega aos usuários. O Azure Functions é um ótimo local para hospedar essa lógica.

Excluir

Aviso

As exclusões no Log Analytics são destrutivas e irreversíveis! Tenha extremo cuidado na execução delas.

A API Purge do Azure Monitor permite excluir dados pessoais. Use a operação de limpeza com moderação para evitar riscos, impacto no desempenho e a possível distorção de agregações, medidas e outros aspectos de seus dados do Log Analytics. Consulte a seção Estratégia para tratamento de dados pessoais para obter abordagens alternativas ao tratamento de dados privados.

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

Para gerenciar recursos do sistema, limitamos as solicitações de limpeza a 50 solicitações por hora. Execute em lote as 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 da solicitação de limpeza para verificar os resultados esperados.

Importante

O uso da API Log Analytics ou 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 log

  • A API POST de Limpeza do Workspace obtém um objeto especificando parâmetros de dados para excluir e retorna um GUID de referência.

  • A API POST Obter Status de Limpeza 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
    

Observação

Você não pode limpar dados de tabelas que possuem os planos de tabela Básico e Auxiliar.

Dados do aplicativo

  • Os Componentes - API POST de Limpeza obtém um objeto especificando parâmetros de dados para excluir e retorna um GUID de referência.

  • A API GET Componentes - Obter Status de Limpeza 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.insights/components/[ComponentName]/operations/purge-[PurgeOperationId]?api-version=2015-05-01
    

Próximas etapas