Georilevazione e gestione degli indirizzi IP

Questo articolo illustra il funzionamento della gestione della ricerca della georilevazione e degli indirizzi IP in Application Insights, oltre a come modificare il comportamento predefinito.

Comportamento predefinito

Per impostazione predefinita, gli indirizzi IP vengono raccolti temporaneamente ma non archiviati in Application Insights. Questo processo segue alcuni passaggi di base.

Quando i dati di telemetria vengono inviati ad Azure, Application Insights usa l'indirizzo IP per eseguire una ricerca di georilevazione. Application Insights usa i risultati di questa ricerca per popolare i campi client_City, client_StateOrProvincee client_CountryOrRegion. L'indirizzo viene quindi eliminato e 0.0.0.0 viene scritto nel client_IP campo .

Per rimuovere i dati di georilevazione, vedere gli articoli seguenti:

I tipi di telemetria sono:

  • Telemetria del browser: Application Insights raccoglie l'indirizzo IP del mittente. L'endpoint di inserimento calcola l'indirizzo IP.
  • Telemetria del server: il modulo di telemetria di Application Insights raccoglie temporaneamente l'indirizzo IP del client. L'indirizzo IP non viene raccolto localmente quando viene impostata l'intestazione X-Forwarded-For . Quando l'elenco di indirizzi IP in ingresso ha più di un elemento, viene usato l'ultimo indirizzo IP per popolare i campi di georilevazione.

Questo comportamento è progettato per evitare la raccolta non necessaria di dati personali e informazioni sulla posizione dell'indirizzo IP. Quando possibile, è consigliabile evitare la raccolta di dati personali.

Nota

Anche se il valore predefinito non è quello di raccogliere gli indirizzi IP, è possibile eseguire l'override di questo comportamento. È consigliabile verificare che la raccolta non interrompa i requisiti di conformità o le normative locali.

Per altre informazioni sulla gestione dei dati personali in Application Insights, vedere Linee guida per i dati personali.

Quando gli indirizzi IP non vengono raccolti, anche città e altri attributi di georilevazione popolati dalla pipeline tramite l'indirizzo IP non vengono raccolti. È possibile mascherare la raccolta IP nell'origine. Esistono due modi per farlo. È possibile:

Archiviazione dei dati degli indirizzi IP

Per abilitare la raccolta IP e l'archiviazione, la DisableIpMasking proprietà del componente Application Insights deve essere impostata su true. È possibile impostare questa proprietà tramite modelli di Azure Resource Manager (modelli arm) o chiamando l'API REST.

Modello 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
       }
}

Portale

Se è necessario modificare il comportamento per una singola risorsa di Application Insights, usare il portale di Azure.

  1. Passare alla risorsa di Application Insights e quindi selezionare Modellodi esportazione automazione>.

  2. Selezionare Distribuisci.

    Screenshot che mostra il pulsante Distribuisci.

  3. Selezionare Modifica modello.

    Screenshot che mostra il pulsante Modifica, insieme a un avviso relativo al gruppo di risorse.

    Nota

    Se si verifica l'errore visualizzato nello screenshot precedente, è possibile risolverlo. Indica: "Il gruppo di risorse si trova in una posizione non supportata da una o più risorse nel modello. Scegliere un gruppo di risorse diverso." Selezionare temporaneamente un gruppo di risorse diverso dall'elenco a discesa e quindi selezionare nuovamente il gruppo di risorse originale.

  4. Nel modello JSON individuare properties all'interno resourcesdi . Aggiungere una virgola all'ultimo campo JSON e quindi aggiungere la nuova riga seguente: "DisableIpMasking": true. Selezionare quindi Salva.

    Screenshot che mostra l'aggiunta di una virgola e una nuova riga dopo la proprietà per l'origine della richiesta.

  5. Selezionare Rivedi e crea>Crea.

    Nota

    Se viene visualizzato "La distribuzione non è riuscita", esaminare i dettagli della distribuzione per quello con il tipo microsoft.insights/components e controllare lo stato. Se l'operazione ha esito positivo, le modifiche apportate a DisableIpMasking sono state distribuite.

  6. Al termine della distribuzione, verranno registrati nuovi dati di telemetria.

    Se si seleziona e si modifica nuovamente il modello, verrà visualizzato solo il modello predefinito senza la proprietà appena aggiunta. Se non vengono visualizzati i dati degli indirizzi IP e si vuole confermare che "DisableIpMasking": true è impostato, eseguire i comandi di PowerShell seguenti:

    # 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
    

    Di conseguenza, viene restituito un elenco di proprietà. Una delle proprietà deve leggere DisableIpMasking: true. Se si eseguono i comandi di PowerShell prima di distribuire la nuova proprietà con Azure Resource Manager, la proprietà non esisterà.

API REST

Il payload dell'API REST seguente apporta le stesse modifiche:

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

Il cmdlet PoweShell 'Update-AzApplicationInsights' può disabilitare la maschera IP con il DisableIPMasking parametro .

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

Per altre informazioni sul cmdlet 'Update-AzApplicationInsights', vedere Update-AzApplicationInsights

Inizializzatore della telemetria

Se è necessaria un'alternativa più flessibile di DisableIpMasking, è possibile usare un inizializzatore di telemetria per copiare tutto o parte dell'indirizzo IP in un campo personalizzato. Il codice per questa classe è lo stesso nelle versioni di .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);
            }
        }
    } 
}

Nota

Se non è possibile accedere ISupportPropertiesa , assicurarsi di eseguire la versione stabile più recente di Application Insights SDK. ISupportProperties è destinato ai valori di cardinalità elevata. GlobalProperties è più appropriato per i valori di cardinalità bassa, ad esempio il nome dell'area e il nome dell'ambiente.

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

Visualizzare i risultati dell'inizializzatore di telemetria

Se si invia nuovo traffico al sito e si attende qualche minuto, è possibile eseguire una query per verificare che la raccolta funzioni:

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

Gli indirizzi IP appena raccolti verranno visualizzati nella customDimensions_client-ip colonna . La colonna predefinita client-ip avrà ancora tutti e quattro gli ottetti azzerato.

Se si esegue il test da localhost e il valore per customDimensions_client-ip è ::1, questo valore è il comportamento previsto. Il ::1 valore rappresenta l'indirizzo di loopback in IPv6. Equivale a 127.0.0.1 in IPv4.

Domande frequenti

Questa sezione fornisce risposte alle domande comuni.

Come vengono calcolati città, paese/area geografica e altri dati di georilevazione?

Viene cercato l'indirizzo IP (IPv4 o IPv6) del client Web:

  • Telemetria del browser: viene raccolto l'indirizzo IP del mittente.
  • Telemetria del server: viene raccolto l'indirizzo IP del client. Non viene raccolto se X-Forwarded-For è impostato.
  • Per altre informazioni sul modo in cui vengono raccolti i dati relativi all'indirizzo IP e alla georilevazione in Application Insights, vedere Gestione degli indirizzi IP e della georilevazione.

È possibile configurare per accettare l'indirizzo IP da un'intestazione ClientIpHeaderTelemetryInitializer diversa. In alcuni sistemi, ad esempio, viene spostato da un proxy, un servizio di bilanciamento del carico o una rete CDN in X-Originating-IP. Altre informazioni

È possibile usare Power BI per visualizzare i dati di telemetria della richiesta in una mappa se è stata eseguita la migrazione a una risorsa basata sull'area di lavoro.

Passaggi successivi

  • Altre informazioni sulla raccolta dei dati personali in Application Insights.
  • Altre informazioni sul funzionamento della raccolta di indirizzi IP in Application Insights. Questo articolo è un post di blog esterno precedente scritto da uno dei nostri tecnici. Precede il comportamento predefinito corrente in cui l'indirizzo IP viene registrato come 0.0.0.0. L'articolo descrive in modo più approfondito i meccanismi dell'inizializzatore di telemetria predefinito.