Guide pour les données personnelles stockées dans Log Analytics et Application InsightsGuidance for personal data stored in Log Analytics and Application Insights

Log Analytics est une banque de données pouvant contenir des données personnelles.Log Analytics is a data store where personal data is likely to be found. Application Insights stocke ses données dans une partition Log Analytics.Application Insights stores its data in a Log Analytics partition. Cet article explique où se trouvent généralement ces données dans Log Analytics et Application Insights, ainsi que les fonctionnalités disponibles pour gérer ces données.This article will discuss where in Log Analytics and Application Insights such data is typically found, as well as the capabilities available to you to handle such data.

Notes

Dans le cadre de cet article, les données de journal d’activité font référence aux données envoyées à un espace de travail Log Analytics, tandis que les données d’application font référence aux données collectées par Application Insights.For the purposes of this article log data refers to data sent to a Log Analytics workspace, while application data refers to data collected by Application Insights.

Notes

Pour plus d’informations sur l’affichage ou la suppression des données personnelles, consultez Requêtes DSR (droits de la personne concernée) Azure pour le RGPD.For information about viewing or deleting personal data, see Azure Data Subject Requests for the GDPR. Pour plus d’informations sur le RGPD, consultez la section RGPD du portail Service Trust.For more information about GDPR, see the GDPR section of the Service Trust portal.

Stratégie de gestion des données personnellesStrategy for personal data handling

S’il dépend au final de vous et de votre entreprise de déterminer la stratégie de gestion de vos données privées (le cas échéant), voici quelques approches possibles.While it will be up to you and your company to ultimately determine the strategy with which you will handle your private data (if at all), the following are some possible approaches. Elles sont répertoriées par ordre de préférence décroissant d’un point de vue technique :They are listed in order of preference from a technical point of view from most to least preferable:

  • Là où c’est possible, arrêtez la collecte des données, masquez, anonymisez ou réduisez les données collectées pour les exclure de ce qui peut être considéré comme « privé ».Where possible, stop collection of, obfuscate, anonymize, or otherwise adjust the data being collected to exclude it from being considered "private". Il s’agit de loin de la meilleure approche, qui vous évite de devoir créer une stratégie de gestion de données très coûteuse et avec un impact fort.This is by far the preferred approach, saving you the need to create a very costly and impactful data handling strategy.
  • Quand ce n’est pas possible, essayez de normaliser les données pour réduire l’impact sur la plateforme de données et les performances.Where not possible, attempt to normalize the data to reduce the impact on the data platform and performance. Par exemple, au lieu de journaliser un ID utilisateur explicite, créez des données de recherche qui vont établir une corrélation entre d’une part le nom d’utilisateur et ses informations détaillées et d’autre part un ID interne, qui peuvent ensuite être enregistrés ailleurs.For example, instead of logging an explicit User ID, create a lookup data that will correlate the username and their details to an internal ID that can then be logged elsewhere. De cette façon, si un de vos utilisateurs vous demande de supprimer ses données personnelles, il est possible que la seule suppression de la ligne dans la table de recherche correspondant à l’utilisateur soit suffisante.That way, should one of your users ask you to delete their personal information, it is possible that only deleting the row in the lookup table corresponding to the user will be sufficient.
  • Enfin, si des données privées doivent être collectées, créez un processus autour du chemin de l’API de vidage et du chemin de l’API de la requête existante pour répondre à vos obligations liées à l’exportation et à la suppression des données privées associées à un utilisateur.Finally, if private data must be collected, build a process around the purge API path and the existing query API path to meet any obligations you may have around exporting and deleting any private data associated with a user.

Où rechercher des données privées dans Log Analytics ?Where to look for private data in Log Analytics?

Log Analytics est un store flexible qui, tout en prescrivant un schéma pour vos données, vous permet de remplacer chaque champ par des valeurs personnalisées.Log Analytics is a flexible store, which while prescribing a schema to your data, allows you to override every field with custom values. En outre, tous les schémas personnalisés peuvent être ingérés.Additionally, any custom schema can be ingested. Ainsi, il est impossible de dire exactement où les données privées se trouvent dans votre espace de travail spécifique.As such, it is impossible to say exactly where Private data will be found in your specific workspace. Cependant, les emplacements suivants constituent de bons points de départ pour votre inventaire :The following locations, however, are good starting points in your inventory:

Données de journalLog data

  • Adresses IP : Log Analytics collecte diverses informations sur les adresses IP dans toutes sortes de tables.IP addresses: Log Analytics collects a variety of IP information across many different tables. Par exemple, la requête suivante affiche toutes les tables où des adresses IPv4 ont été collectées au cours des dernières 24 heures :For example, the following query shows all tables where IPv4 addresses have been collected over the last 24 hours:
    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
    
  • ID d’utilisateur : les ID d’utilisateur se trouvent dans une grande variété de solutions et de tables.User IDs: User IDs are found in a large variety of solutions and tables. Vous pouvez rechercher un nom d’utilisateur particulier dans tout votre jeu de données avec la commande de recherche :You can look for a particular username across your entire dataset using the search command:
    search "[username goes here]"
    
    N’oubliez pas de rechercher non seulement les noms d’utilisateur explicites, mais aussi les GUID, qui peuvent permettre de remonter directement à un utilisateur particulier !Remember to look not only for human-readable user names but also GUIDs that can directly be traced back to a particular user!
  • ID d’appareil : comme les ID d’utilisateur, les ID d’appareil sont parfois considérés « privés ».Device IDs: Like user IDs, device IDs are sometimes considered "private". Utilisez la même approche que ci-dessus pour les ID d’utilisateur, pour identifier les tables où cela peut poser un problème.Use the same approach as listed above for user IDs to identify tables where this might be a concern.
  • Données personnalisées : Log Analytics permet la collecte selon différentes méthodes : journaux d’activité personnalisés et champs personnalisés, l’API du collecteur de données HTTP et les données personnalisées collectées dans le cadre de journaux des événements système.Custom data: Log Analytics allows the collection in a variety of methods: custom logs and custom fields, the HTTP Data Collector API , and custom data collected as part of system event logs. Tous ces éléments sont susceptibles de contenir des données privées et ils doivent être examinés pour vérifier si de telles données s’y trouvent.All of these are susceptible to containing private data, and should be examined to verify whether any such data exists.
  • Données capturées par les solutions : comme le mécanisme des solutions est ouvert, nous vous recommandons d’examiner toutes les tables générées par les solutions pour vérifier leur conformité.Solution-captured data: Because the solution mechanism is an open-ended one, we recommend reviewing all tables generated by solutions to ensure compliance.

Données d'applicationApplication data

  • Adresses IP : par défaut, Application Insights définit tous les champs d’adresse IP sur « 0.0.0.0 », mais il est assez courant de remplacer cette valeur par l’adresse IP réelle de l’utilisateur afin de gérer les informations de la session.IP addresses: While Application Insights will by default obfuscate all IP address fields to "0.0.0.0", it is a fairly common pattern to override this value with the actual user IP to maintain session information. La requête Analytics ci-dessous permet de rechercher dans la colonne des adresses IP toutes les tables contenant des valeurs autres que « 0.0.0.0 », au cours des 24 heures :The Analytics query below can be used to find any table that contains values in the IP address column other than "0.0.0.0" over the last 24 hours:
    search client_IP != "0.0.0.0"
    | where timestamp > ago(1d)
    | summarize numNonObfuscatedIPs_24h = count() by $table
    
  • ID d’utilisateur : par défaut, Application Insights utilise les ID générés de manière aléatoire pour effectuer le suivi des utilisateurs et des sessions.User IDs: By default, Application Insights will use randomly generated IDs for user and session tracking. Toutefois, il est courant de remplacer ces champs par un ID plus représentatif de l’application.However, it is common to see these fields overridden to store an ID more relevant to the application. Par exemple : noms d’utilisateurs, GUID AAD, etc. Ces ID sont souvent considérés comme faisant partie de l’étendue car ce sont des données personnelles et, par conséquent, ils doivent être gérés de façon appropriée.For example: usernames, AAD GUIDs, etc. These IDs are often considered to be in-scope as personal data, and therefore, should be handled appropriately. Nous vous recommandons de toujours masquer ou anonymiser ces ID.Our recommendation is always to attempt to obfuscate or anonymize these IDs. Ces valeurs sont couramment utilisées dans les champs tels que session_Id, user_Id, user_AuthenticatedId, user_AccountId et customDimensions.Fields where these values are commonly found include session_Id, user_Id, user_AuthenticatedId, user_AccountId, as well as customDimensions.
  • Données personnalisées : Application Insights vous permet d’ajouter un ensemble de dimensions personnalisées à n’importe quel type de données.Custom data: Application Insights allows you to append a set of custom dimensions to any data type. Ces dimensions peuvent représenter n’importe quelle donnée.These dimensions can be any data. Utilisez la requête suivante pour identifier toutes les dimensions personnalisées collectées au cours des dernières 24 heures :Use the following query to identify any custom dimensions collected over the last 24 hours:
    search * 
    | where isnotempty(customDimensions)
    | where timestamp > ago(1d)
    | project $table, timestamp, name, customDimensions 
    
  • Données en mémoire et en transit : Application Insights effectue le suivi des exceptions, requêtes, appels de dépendance et traces.In-memory and in-transit data: Application Insights will track exceptions, requests, dependency calls, and traces. Les données privées peuvent souvent être collectées au niveau du code et des appels HTTP.Private data can often be collected at the code and HTTP call level. Examinez les tables contenant des exceptions, requêtes, dépendances et traces pour identifier ces données.Review the exceptions, requests, dependencies, and traces tables to identify any such data. Utilisez si possible des initialiseurs de télémétrie afin de brouiller ces données.Use telemetry initializers where possible to obfuscate this data.
  • Captures du débogueur de capture instantanée : la fonctionnalité Débogueur de capture instantanée d’Application Insights vous permet de collecter des instantanés de débogage chaque fois qu’une exception est interceptée sur l’instance de production de votre application.Snapshot Debugger captures: The Snapshot Debugger feature in Application Insights allows you to collect debug snapshots whenever an exception is caught on the production instance of your application. Les instantanés exposeront la trace de pile complète conduisant à des exceptions, ainsi que les valeurs des variables locales à chaque étape de la pile.Snapshots will expose the full stack trace leading to the exceptions as well as the values for local variables at every step in the stack. Malheureusement, cette fonctionnalité ne permet pas la suppression sélective de points d’ancrage, ou l’accès par programme aux données de l’instantané.Unfortunately, this feature does not allow for selective deletion of snap points, or programmatic access to data within the snapshot. Par conséquent, si le taux de rétention des instantanés par défaut ne répond pas à vos exigences de conformité, il est recommandé de désactiver cette fonctionnalité.Therefore, if the default snapshot retention rate does not satisfy your compliance requirements, the recommendation is to turn off the feature.

Comment exporter et supprimer des données privéesHow to export and delete private data

Comme mentionné plus haut dans la section Stratégie de gestion des données personnelles, il est fortement recommandé (si c’est possible) de restructurer votre stratégie de collecte des données pour éviter la collecte de données privées, de les masquer ou de les anonymiser, ou à défaut d’éviter qu’elles soient considérées comme « privées ».As mentioned in the strategy for personal data handling section earlier, it is strongly recommended to if it all possible, to restructure your data collection policy to disable the collection of private data, obfuscating or anonymizing it, or otherwise modifying it to remove it from being considered "private". Une gestion des données va avant tout générer des coûts pour vous et votre équipe, pour définir et automatiser une stratégie et créer une interface destinée à vos clients qui leur permette d’interagir avec leurs données, ainsi que des coûts liés à la maintenance.Handling the data will foremost result in costs to you and your team to define and automate a strategy, build an interface for your customers to interact with their data through, and ongoing maintenance costs. De plus, elle est coûteuse en termes de ressources informatiques pour Log Analytics et Application Insights, et un grand nombre d’appels d’API de requête ou de vidage simultanés peut avoir un impact potentiellement négatif sur toutes les autres interactions avec les fonctionnalités de Log Analytics.Further, it is computationally costly for Log Analytics and Application Insights, and a large volume of concurrent query or purge API calls have the potential to negatively impact all other interaction with Log Analytics functionality. Cela étant dit, il existe en effet des scénarios valides où des données privées doivent être collectées.That said, there are indeed some valid scenarios where private data must be collected. Dans ces cas, les données doivent être gérées comme décrit dans cette section.For these cases, data should be handled as described in this section.

Notes

Cet article explique comment supprimer les données personnelles de l’appareil ou du service et il peut être utilisé dans le cadre de vos obligations en vertu du Règlement général sur la protection des données.This article provides steps for how to delete personal data from the device or service and can be used to support your obligations under the GDPR. Si vous recherchez des informations générales sur le RGPD, consultez la section RGPD du portail Service Trust.If you’re looking for general info about GDPR, see the GDPR section of the Service Trust portal.

Afficher et exporterView and export

Pour les requêtes d’affichage et d’exportation des données, vous devez utiliser l’API de requête Log Analytics ou l’API de requête Application Insights.For both view and export data requests, the Log Analytics query API or the Application Insights query API should be used. L’implémentation de la logique pour convertir la forme des données selon un format approprié pour vos utilisateurs dépend de vous.Logic to convert the shape of the data to an appropriate one to deliver to your users will be up to you to implement. Azure Functions est l’endroit idéal pour héberger cette logique.Azure Functions makes a great place to host such logic.

Important

Alors que la grande majorité des opérations de vidage peuvent être effectuées beaucoup plus rapidement que ce que prévoit le contrat SLA, le contrat SLA formel pour la réalisation des opérations de vidage est défini à 30 jours en raison de leur impact important sur la plateforme de données utilisée.While the vast majority of purge operations may complete much quicker than the SLA, the formal SLA for the completion of purge operations is set at 30 days due to their heavy impact on the data platform used. Il s’agit d’un processus automatisé, ce qui exclut la possibilité de demander qu’une opération soit gérée plus rapidement.This is an automated process; there is no way to request that an operation be handled faster.

DELETEDelete

Avertissement

Les suppressions dans Log Analytics sont destructrices et non réversibles !Deletes in Log Analytics are destructive and non-reversible! Soyez très prudents quand vous les réalisez.Please use extreme caution in their execution.

Nous avons rendu disponible un chemin d’API de vidage dans le cadre d’une gestion de la confidentialité.We have made available as part of a privacy handling a purge API path. Ce chemin doit être utilisé avec prudence en raison du risque associé à cette opération, de l’impact potentiel sur les performances, et de la possibilité d’influer sur les agrégations, les mesures et d’autres aspects de vos données Log Analytics.This path should be used sparingly due to the risk associated with doing so, the potential performance impact, and the potential to skew all-up aggregations, measurements, and other aspects of your Log Analytics data. Pour d’autres approches de la gestion des données privées, consultez la section Stratégie de gestion des données personnelles.See the Strategy for personal data handling section for alternative approaches to handle private data.

Le vidage est une opération nécessitant des privilèges élevés, qu’aucune application ni utilisateur dans Azure (y compris même le propriétaire de la ressource) n’a l’autorisation d’exécuter sans qu’un rôle lui soit explicitement accordé dans Azure Resource Manager.Purge is a highly privileged operation that no app or user in Azure (including even the resource owner) will have permissions to execute without explicitly being granted a role in Azure Resource Manager. Ce rôle est Videur de données et il doit être délégué avec prudence en raison du risque de perte de données.This role is Data Purger and should be cautiously delegated due to the potential for data loss.

Important

Pour gérer les ressources système, les demandes de vidage sont limitées à 50 demandes par heure.In order to manage system resources, purge requests are throttled at 50 requests per hour. Vous devez regrouper l’exécution des demandes de vidage en envoyant une seule commande dont le prédicat comprend toutes les identités des utilisateurs qui demandent un vidage.You should batch the execution of purge requests by sending a single command whose predicate includes all user identities that require purging. Utilisez l’opérateur in pour spécifier plusieurs identités.Use the in operator to specify multiple identities. Vous devez exécuter la requête avant d’exécuter la demande de vidage pour vérifier que les résultats sont tels qu’attendus.You should run the query before executing the purge request to verify that the results are expected.

Une fois que le rôle Azure Resource Manager a été affecté, deux nouveaux chemins d’API sont disponibles :Once the Azure Resource Manager role has been assigned, two new API paths are available:

Données de journalLog data

  • POST purge - prend un objet spécifiant les paramètres des données à supprimer et retourne un GUID de référencePOST purge - takes an object specifying parameters of data to delete and returns a reference GUID

  • GET purge status - l’appel de POST purge retourne un en-tête « x-ms-état-location » qui inclut une URL que vous pouvez appeler pour déterminer l’état de votre API de vidage.GET purge status - the POST purge call will return an 'x-ms-status-location' header that will include a URL that you can call to determine the status of your purge API. Par exemple :For example:

    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
    

Important

Alors que nous nous attendons à ce que la grande majorité des opérations de vidage soient effectuées beaucoup plus rapidement que ce que prévoit notre contrat SLA, en raison de leur impact important sur la plateforme de données utilisée par Log Analytics, le contrat SLA formel pour la réalisation des opérations de vidage est défini à 30 jours.While we expect the vast majority of purge operations to complete much quicker than our SLA, due to their heavy impact on the data platform used by Log Analytics, the formal SLA for the completion of purge operations is set at 30 days.

Données d'applicationApplication data

  • POST purge - prend un objet spécifiant les paramètres des données à supprimer et retourne un GUID de référencePOST purge - takes an object specifying parameters of data to delete and returns a reference GUID

  • GET purge status - l’appel de POST purge retourne un en-tête « x-ms-état-location » qui inclut une URL que vous pouvez appeler pour déterminer l’état de votre API de vidage.GET purge status - the POST purge call will return an 'x-ms-status-location' header that will include a URL that you can call to determine the status of your purge API. Par exemple :For example:

    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
    

Important

Alors que la grande majorité des opérations de vidage peuvent être effectuées beaucoup plus rapidement que ce que prévoit le contrat SLA, en raison de leur impact important sur la plateforme de données utilisée par Application Insights, le contrat SLA formel pour la réalisation des opérations de vidage est défini à 30 jours.While the vast majority of purge operations may complete much quicker than the SLA, due to their heavy impact on the data platform used by Application Insights, the formal SLA for the completion of purge operations is set at 30 days.

Étapes suivantesNext steps