Geolocation und Verarbeitung von IP-Adressen

In diesem Artikel wird erläutert, wie die Geolocationsuche und die Verarbeitung von IP-Adressen in Application Insights funktionieren. Außerdem erfahren Sie, wie Sie das Standardverhalten ändern können.

Standardverhalten

IP-Adressen werden standardmäßig temporär gesammelt, aber nicht in Application Insights gespeichert. Dieser Prozess folgt einigen grundlegenden Schritten.

Wenn Telemetriedaten an Azure gesendet werden, nutzt Application Insights die IP-Adresse, um eine Geolocationsuche durchzuführen. Application Insights verwendet die Ergebnisse dieser Suche, um die Felder client_City, client_StateOrProvince und client_CountryOrRegion aufzufüllen. Die Adresse wird dann verworfen, und in das client_IP-Feld wird 0.0.0.0 geschrieben.

Informationen zum Entfernen von Geolocationdaten finden Sie in den folgenden Artikeln:

Die Telemetrietypen sind die folgenden:

  • Browsertelemetrie: Application Insights erfasst die IP-Adresse des Absenders. Der Erfassungsendpunkt berechnet die IP-Adresse.
  • Servertelemetrie: Die Client-IP-Adresse wird vorübergehend vom Application Insights-Telemetriemodul erfasst. Die IP-Adressen werden lokal nicht erfasst, wenn der X-Forwarded-For-Header festgelegt wird. Wenn die eingehende IP-Adressliste mehr als ein Element enthält, wird die letzte IP-Adresse zum Auffüllen von Geolocationfeldern verwendet.

Dieses Verhalten ist beabsichtigt, um eine unnötige Erfassung von personenbezogenen Daten und Informationen zum Standort der IP-Adresse zu verhindern. Die Erfassung persönlicher Daten sollte, wenn möglich, vermieden werden.

Hinweis

Obwohl die Standardeinstellung darin besteht, keine IP-Adressen zu erfassen, können Sie dieses Verhalten außer Kraft setzen. Achten Sie darauf, dass die Erfassung nicht gegen Complianceanforderungen oder lokale Regelungen verstößt.

Weitere Informationen zur Behandlung personenbezogener Daten in Application Insights finden Sie im Leitfaden zu persönlichen Daten.

Wenn keine IP-Adressen erfasst werden, werden auch keine Ortsinformationen oder andere Geolocationattribute gesammelt, die von unserer Pipeline auf Basis der IP-Adresse aufgefüllt werden. Die Sammlung von IP-Adressen kann an der Quelle maskiert werden. Dafür gibt es zwei Methoden. Ihre Möglichkeiten:

Speichern von IP-Adressdaten

Die Eigenschaft DisableIpMasking der Application Insights-Komponente muss auf true festgelegt werden, um das Erfassen und Speichern von IP-Adressen zu aktivieren. Diese Eigenschaft kann entweder durch ARM-Vorlagen (Azure Resource Manager) oder durch Aufrufen der REST-API festgelegt werden.

ARM-Vorlage

{
       "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
       }
}

Portal

Wenn Sie das Verhalten nur für eine einzelne Application Insights-Ressource ändern müssen, verwenden Sie das Azure-Portal.

  1. Navigieren Sie zu Ihrer Application Insights-Ressource, und wählen Sie Automatisierung>Vorlage exportieren aus.

  2. Klicken Sie auf Bereitstellen.

    Screenshot: Schaltfläche „Deploy“ (Bereitstellen)

  3. Wählen Sie Vorlage bearbeiten aus.

    Screenshot: Schaltfläche „Bearbeiten“ zusammen mit einer Warnung zur Ressourcengruppe

    Hinweis

    Falls bei Ihnen der im vorherigen Screenshot gezeigte Fehler auftritt, können Sie ihn beheben. Die Fehlermeldung lautet: „Die Ressourcengruppe befindet sich an einem Standort, der von mindestens einer Ressource in der Vorlage nicht unterstützt wird. Wählen Sie eine andere Ressourcengruppe.“ Wählen Sie vorübergehend eine andere Ressourcengruppe aus der Dropdownliste aus, und wählen Sie dann erneut die ursprüngliche Ressourcengruppe aus.

  4. Suchen Sie in der JSON-Vorlage innerhalb von resources nach properties. Fügen Sie dem letzten JSON-Feld ein Komma und anschließend die folgende neue Zeile hinzu: "DisableIpMasking": true. Klicken Sie dann auf Speichern.

    Screenshot, der das Hinzufügen eines Kommas und einer neuen Zeile nach der Eigenschaft für die Anforderungsquelle zeigt.

  5. Wählen Sie Bewerten + erstellen>Erstellen aus.

    Hinweis

    Wenn „Fehler bei der Bereitstellung“ angezeigt wird, suchen Sie in den Bereitstellungsdetails nach dem Eintrag mit dem Typ microsoft.insights/components, und überprüfen Sie den Status. Wenn dieser als erfolgreich angegeben ist, wurden die an DisableIpMasking vorgenommenen Änderungen bereitgestellt.

  6. Sobald die Bereitstellung abgeschlossen ist, werden neue Telemetriedaten aufgezeichnet.

    Wenn Sie die Vorlage noch mal auswählen und bearbeiten, wird nur die Standardvorlage ohne der neu hinzugefügten Eigenschaft angezeigt. Wenn die IP-Adressdaten nicht angezeigt werden und Sie bestätigen möchten, dass "DisableIpMasking": true festgelegt ist, führen Sie den folgenden PowerShell-Befehl aus:

    # 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
    

    Daraufhin wird eine Liste mit den Eigenschaften zurückgegeben. Eine der Eigenschaften sollte DisableIpMasking: true beinhalten. Wenn Sie die PowerShell-Befehle ausführen, bevor Sie die neue Eigenschaft über Azure Resource Manager bereitstellen, ist die Eigenschaft nicht vorhanden.

REST-API

Die folgenden Nutzdaten der REST-API bewirken die gleichen Änderungen:

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

Das PowerShell-Cmdlet „Update-AzApplicationInsights“ kann die IP-Maskierung mit dem Parameter DisableIPMasking deaktivieren.

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

Weitere Informationen zum Cmdlet „Update-AzApplicationInsights“ finden Sie unter Update-AzApplicationInsights

Telemetrieinitialisierer

Wenn Sie eine flexiblere Alternative als DisableIpMasking benötigen, können Sie einen Telemetrieinitialisierer verwenden, um die gesamte oder einen Teil der IP-Adresse in ein benutzerdefiniertes Feld zu kopieren. Der Code für diese Klasse ist in allen .NET-Versionen identisch.

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);
            }
        }
    } 
}

Hinweis

Wenn Sie nicht auf ISupportProperties zugreifen können, stellen Sie sicher, dass Sie die neueste stabile Version des Application Insights SDK ausführen. ISupportProperties ist für hohe Kardinalitätswerte vorgesehen. GlobalProperties eignet sich besser für niedrige Kardinalitätswerte wie den Regionsnamen und Umgebungsnamen.

 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;
        }
    }
});

Anzeigen der Ergebnisse des Telemetrieinitialisierers

Wenn Sie neuen Datenverkehr an Ihre Website senden und einige Minuten warten, können Sie eine Abfrage ausführen, um zu bestätigen, dass die Sammlung funktioniert:

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

Die neu erfassten IP-Adressen werden in der Spalte customDimensions_client-ip angezeigt. Für die Standardspalte client-ip werden die vier Oktette dennoch mit Nullen besetzt angezeigt.

Wenn Tests auf dem Localhost ausgeführt werden und der Wert für customDimensions_client-ip::1 lautet, handelt es sich bei diesem Wert um das erwartete Verhalten. Der Wert ::1 stellt die Loopbackadresse in IPv6 dar. Die Adresse entspricht 127.0.0.1 in IPv4.

Häufig gestellte Fragen

Dieser Abschnitt enthält Antworten auf häufig gestellte Fragen.

Wie werden Daten zu Ort, Land/Region und andere Geolocationdaten berechnet?

Suchen Sie die IP-Adresse (IPv4 oder IPv6) des Webclients:

  • Browsertelemetrie: Die IP-Adresse des Absenders wird erfasst.
  • Servertelemetrie: Das Application Insights-Modul erfasst die Client-IP-Adresse. Sie wird nicht erfasst, wenn X-Forwarded-For festgelegt ist.
  • Weitere Informationen zur Erfassung von IP-Adressen und Geolocationdaten in Application Insights finden Sie unter Behandlung von Geolocation und IP-Adresse.

Sie können in der Konfiguration festlegen, dass ClientIpHeaderTelemetryInitializer die IP-Adresse aus einem anderen Header akzeptiert. In manchen Systemen wird sie z. B. von einem Proxy, durch den Lastenausgleich oder das CDN nach X-Originating-IP verschoben. Weitere Informationen

Sie können Power BI verwenden, um Ihre Anforderungstelemetriedaten auf einer Karte anzuzeigen, wenn Sie eine Migration zu einer arbeitsbereichsbasierten Ressource durchgeführt haben.

Nächste Schritte

  • Weitere Informationen zur Sammlung persönlicher Daten finden Sie in Application Insights.
  • Weitere Informationen zur Funktionsweise der IP-Adressensammlung in Application Insights finden Sie hier. Bei diesem Artikel handelt es sich um einen älteren externen Blogbeitrag eines unserer Techniker. Der Beitrag wurde vor der Implementierung des aktuellen Standardverhaltens verfasst, bei dem die IP-Adresse als 0.0.0.0 aufgezeichnet wird. In dem Artikel wird jedoch die Funktionsweise des integrierten Telemetrieinitialisierers ausführlicher erklärt.