Gestion de la géolocalisation et des adresses IP

Cet article explique le fonctionnement de la recherche de géolocalisation et de la gestion des adresses IP dans Application Insights, ainsi que la façon de modifier le comportement par défaut.

Comportement par défaut

Par défaut, les adresses IP sont collectées temporairement, mais elles ne sont pas stockées dans Application Insights. Ce processus suit quelques étapes de base.

Quand la télémétrie est envoyée à Azure, Application Insights utilise l’adresse IP pour effectuer une recherche de géolocalisation. Application Insights utilise les résultats de cette recherche pour renseigner les champs client_City, client_StateOrProvince et client_CountryOrRegion. L’adresse est alors ignorée et 0.0.0.0 est écrit dans le champ client_IP.

Pour supprimer les données de géolocalisation, consultez les articles suivants :

Les types de télémétrie sont les suivants :

  • Télémétrie de navigateur : Application Insights collecte l’adresse IP de l’expéditeur. Le point de terminaison d’ingestion calcule l’adresse IP.
  • Télémétrie de serveur : le module de télémétrie d’Application Insights collecte temporairement l’adresse IP du client. Cette adresse IP n’est pas collectée localement quand l’en-tête X-Forwarded-For est défini. Quand la liste d’adresses IP entrantes contient plusieurs éléments, la dernière adresse IP est utilisée pour renseigner les champs de géolocalisation.

Ce comportement a été conçu pour éviter la collecte inutile de données personnelles et d’informations sur la localisation de l’adresse IP. Dans la mesure du possible, nous vous recommandons d’éviter la collecte des données personnelles.

Notes

Bien que le paramètre par défaut est de ne pas collecter les adresses IP, vous pouvez remplacer ce comportement. Nous vous recommandons de vérifier que la collecte n’enfreint pas les exigences en matière de conformité ni la réglementation locale.

Pour plus d’informations sur la gestion des données personnelles dans Application Insights, consultez Aide relative aux données personnelles.

Lorsque les adresses IP ne sont pas collectées, les attributs de ville et d’autres attributs de géolocalisation renseignés par notre pipeline à l’aide de l’adresse IP ne sont pas non plus recueillis. Vous pouvez masquer la collecte d’adresses IP à la source. Cette opération peut être effectuée de deux façons. Vous pouvez :

Stockage des données d’adresse IP

Pour activer la collecte et le stockage d’adresses IP, la propriété DisableIpMasking du composant Application Insights doit être définie sur true. Vous pouvez définir cette propriété par l’intermédiaire de modèles Azure Resource Manager (ARM) ou en appelant l’API REST.

Modèle ARM

{
       "id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/microsoft.insights/components/<resource-name>",
       "name": "<resource-name>",
       "type": "microsoft.insights/components",
       "location": "westcentralus",
       "tags": {
              
       },
       "kind": "web",
       "properties": {
              "Application_Type": "web",
              "Flow_Type": "Redfield",
              "Request_Source": "IbizaAIExtension",
              // ...
              "DisableIpMasking": true
       }
}

Portail

Si vous devez modifier le comportement d’une seule ressource Application Insights, utilisez le Portail Azure.

  1. Accédez à votre ressource Application Insights, puis sélectionnez Automatisation>Exporter le modèle.

  2. Sélectionnez Déployer.

    Capture d’écran montrant le bouton Déployer.

  3. Sélectionnez Modifier un modèle.

    Capture d’écran montrant le bouton Modifier, ainsi qu’un avertissement sur le groupe de ressources.

    Notes

    Si vous rencontrez l’erreur illustrée dans la capture d’écran précédente, vous pouvez la résoudre. Elle indique que le groupe de ressources se trouve dans un emplacement non pris en charge par une ou plusieurs ressources dans le modèle. Veuillez choisir un groupe de ressources différent. Sélectionnez temporairement un autre groupe de ressources dans la liste déroulante, puis sélectionnez à nouveau votre groupe de ressources d’origine.

  4. Dans le modèle JSON, recherchez properties dans resources. Ajoutez une virgule au dernier champ JSON, puis insérez la nouvelle ligne suivante : "DisableIpMasking": true. Ensuite, sélectionnez Enregistrer.

    Capture d’écran montrant l’ajout d’une virgule et d’une nouvelle ligne après la propriété pour la source de la demande

  5. Sélectionnez Vérifier + créer>Créer.

    Notes

    Si vous voyez le message « Votre déploiement a échoué », consultez les détails de votre déploiement pour trouver celui avec le type microsoft.insights/components et vérifiez son état. S’il réussit, les modifications apportées à DisableIpMasking ont été déployées.

  6. Une fois le déploiement terminé, les nouvelles données de télémétrie sont enregistrées.

    Si vous sélectionnez et modifiez à nouveau le modèle, vous voyez uniquement le modèle par défaut sans la propriété nouvellement ajoutée. Si vous ne voyez pas les données d’adresse IP et souhaitez confirmer que "DisableIpMasking": true est défini, exécutez les commandes PowerShell suivantes :

    # Replace `Fabrikam-dev` with the appropriate resource and resource group name.
    # If you aren't using Azure Cloud Shell, you need to connect to your Azure account
    # Connect-AzAccount 
    $AppInsights = Get-AzResource -Name 'Fabrikam-dev' -ResourceType 'microsoft.insights/components' -ResourceGroupName 'Fabrikam-dev'
    $AppInsights.Properties
    

    La liste des propriétés est retournée en tant que résultat. L’une des propriétés doit être lue DisableIpMasking: true. Si vous exécutez ces commandes PowerShell avant de déployer la nouvelle propriété avec Azure Resource Manager, celle-ci n’existera pas.

API REST

La charge utile de l’API REST suivante apporte les mêmes modifications :

PATCH https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/microsoft.insights/components/<resource-name>?api-version=2018-05-01-preview HTTP/1.1
Host: management.azure.com
Authorization: AUTH_TOKEN
Content-Type: application/json
Content-Length: 54

{
       "location": "<resource location>",
       "kind": "web",
       "properties": {
              "Application_Type": "web",
              "DisableIpMasking": true
       }
}

PowerShell

L’applet de commande PowerShell « Update-AzApplicationInsights » peut désactiver le masquage IP avec le paramètre DisableIPMasking.

Update-AzApplicationInsights -Name "aiName" -ResourceGroupName "rgName" -DisableIPMasking:$true

Pour plus d’informations sur l’applet de commande « Update-AzApplicationInsights », consultez Update-AzApplicationInsights

Initialiseur de télémétrie

Si vous avez besoin d’une alternative plus flexible que DisableIpMasking, vous pouvez utiliser un initialiseur de télémétrie pour copier tout ou partie de l’adresse IP dans un champ personnalisé. Le code de cette classe est le même pour toutes les versions .NET.

using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;

namespace MyWebApp
{
    public class CloneIPAddress : ITelemetryInitializer
    {
        public void Initialize(ITelemetry telemetry)
        {
            ISupportProperties propTelemetry = telemetry as ISupportProperties;

            if (propTelemetry !=null && !propTelemetry.Properties.ContainsKey("client-ip"))
            {
                string clientIPValue = telemetry.Context.Location.Ip;
                propTelemetry.Properties.Add("client-ip", clientIPValue);
            }
        }
    } 
}

Notes

Si vous ne parvenez pas à accéder à ISupportProperties, assurez-vous d’exécuter la dernière version stable du kit SDK Application Insights. ISupportProperties est destiné à des valeurs de cardinalité élevées. GlobalProperties est plus approprié pour les valeurs de cardinalité faible, telles que le nom de la région et le nom de l’environnement.

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;

builder.services.AddSingleton<ITelemetryInitializer, CloneIPAddress>();

Node.js

appInsights.defaultClient.addTelemetryProcessor((envelope) => {
    const baseData = envelope.data.baseData;
    if (appInsights.Contracts.domainSupportsProperties(baseData)) {
        const ipAddress = envelope.tags[appInsights.defaultClient.context.keys.locationIp];
        if (ipAddress) {
            baseData.properties["client-ip"] = ipAddress;
        }
    }
});

Afficher les résultats de votre initialiseur de télémétrie

Si vous envoyez un nouveau trafic à votre site et attendez quelques minutes, vous pouvez exécuter une requête pour confirmer que la collecte fonctionne :

requests
| where timestamp > ago(1h) 
| project appName, operation_Name, url, resultCode, client_IP, customDimensions.["client-ip"]

Les adresses IP nouvellement collectées apparaîtront dans la colonne customDimensions_client-ip. La colonne client-ip par défaut remettra à zéro tout de même quatre octets.

Si vous effectuez le test à partir de localhost et que la valeur de customDimensions_client-ip est ::1, cette valeur est le comportement attendu. La valeur ::1 représente l’adresse de bouclage dans IPv6. Elle est équivalente à 127.0.0.1 dans IPv4.

Forum aux questions

Cette section fournit des réponses aux questions fréquentes.

Comment sont calculées les données relatives à la ville, au pays/à la région et aux autres données de géolocalisation ?

Nous effectuons une recherche sur l’adresse IP (IPv4 ou IPv6) du client web :

  • Télémétrie de navigateur : nous collectons l’adresse IP de l’expéditeur.
  • Télémétrie de serveur : le module Application Insights collecte l’adresse IP du client. Elle n’est pas collectée si X-Forwarded-For est défini.
  • Pour en savoir plus sur la façon dont les données d’adresse IP et de géolocalisation sont collectées dans Application Insights, consultez Gestion de la géolocalisation et des adresses IP.

Vous pouvez configurer le ClientIpHeaderTelemetryInitializer pour récupérer l’adresse IP à partir d’un autre en-tête. Dans certains systèmes, par exemple, elle est déplacée vers X-Originating-IP par un proxy, un équilibreur de charge ou un CDN. Plus d’informations

Vous pouvez utiliser Power BI pour afficher votre télémétrie des demandes sur une carte si vous avez effectué une migration vers une ressource basée sur un espace de travail.

Étapes suivantes

  • En savoir plus sur la collecte de données personnelles dans Application Insights.
  • En savoir plus sur le fonctionnement de la collecte d’adresses IP dans Application Insights. Cet article est un ancien billet de blog externe écrit par l’un de nos ingénieurs. Il a été rédigé avant le comportement par défaut actuel, selon lequel l’adresse IP est enregistrée comme 0.0.0.0. L’article aborde plus en détail les mécanismes de l’initialiseur de télémétrie intégré.