Condividi tramite


Autenticazione Microsoft Entra per Application Insights

Application Insights supporta ora l'autenticazione di Microsoft Entra. Usando Microsoft Entra ID, è possibile assicurarsi che nelle risorse di Application Insights vengano inseriti solo i dati di telemetria autenticati.

L'uso di vari sistemi di autenticazione può essere complesso e rischioso perché è difficile gestire le credenziali su larga scala. È ora possibile scegliere di rifiutare esplicitamente l'autenticazione locale per garantire che nella risorsa vengano inseriti solo i dati di telemetria esclusivamente autenticati tramite identità gestite e l'ID Microsoft Entra. Questa funzionalità è un passaggio per migliorare la sicurezza e l'affidabilità dei dati di telemetria usati per prendere decisioni operative critiche (avvisi e scalabilità automatica) e aziendali.

Prerequisiti

Per abilitare l'inserimento autenticato di Microsoft Entra, sono necessari i passaggi preliminari seguenti. Dovrai:

Scenari non supportati

Gli SDK e le funzionalità seguenti di Software Development Kit non sono supportati per l'uso con l'inserimento autenticato di Microsoft Entra:

Configurare e abilitare l'autenticazione basata su ID Di Microsoft Entra

  1. Se non si ha già un'identità, crearne una usando un'identità gestita o un'entità servizio.

    • È consigliabile usare un'identità gestita:

      Configurare un'identità gestita per il servizio di Azure (Macchine virtuali o servizio app).

    • Non è consigliabile usare un'entità servizio:

      Per altre informazioni su come creare un'applicazione Microsoft Entra e un'entità servizio in grado di accedere alle risorse, vedere Creare un'entità servizio.

  2. Assegnare il ruolo di controllo degli accessi in base al ruolo richiesto all'identità di Azure, all'entità servizio o all'account utente di Azure.

    Seguire la procedura descritta in Assegnare i ruoli di Azure per aggiungere il ruolo server di pubblicazione delle metriche di monitoraggio all'identità prevista, all'entità servizio o all'account utente di Azure impostando la risorsa di Application Insights di destinazione come ambito del ruolo.

    Nota

    Sebbene il ruolo di server di pubblicazione delle metriche di monitoraggio indichi "metriche", pubblicherà tutti i dati di telemetria nella risorsa di Application Insights.

  3. Seguire le indicazioni di configurazione in base alla lingua seguente.

Nota

Il supporto per Microsoft Entra ID in Application Insights .NET SDK è incluso a partire dalla versione 2.18-Beta3.

Application Insights .NET SDK supporta le classi di credenziali fornite da Azure Identity.

  • È consigliabile DefaultAzureCredential per lo sviluppo locale.
  • Assicurarsi di essere autenticati in Visual Studio con l'account utente di Azure previsto. Per altre informazioni, vedere Eseguire l'autenticazione tramite Visual Studio.
  • È consigliabile ManagedIdentityCredential usare le identità gestite assegnate dal sistema e assegnate dall'utente.
    • Per l'assegnazione del sistema, usare il costruttore predefinito senza parametri.
    • Per l'assegnazione dell'utente, specificare l'ID client al costruttore.

L'esempio seguente illustra come creare e configurare manualmente TelemetryConfiguration usando .NET:

TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);

L'esempio seguente illustra come configurare TelemetryConfiguration usando .NET Core:

services.Configure<TelemetryConfiguration>(config =>
{
       var credential = new DefaultAzureCredential();
       config.SetAzureTokenCredential(credential);
});
services.AddApplicationInsightsTelemetry(new ApplicationInsightsServiceOptions
{
    ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/"
});

Disabilitare l'autenticazione locale

Dopo aver abilitato l'autenticazione di Microsoft Entra, è possibile scegliere di disabilitare l'autenticazione locale. Questa configurazione consente di inserire i dati di telemetria autenticati esclusivamente dall'ID Entra di Microsoft e influisce sull'accesso ai dati, ad esempio tramite chiavi API.

È possibile disabilitare l'autenticazione locale usando il portale di Azure o Criteri di Azure o a livello di codice.

Azure portal

  1. Dalla risorsa di Application Insights selezionare Proprietà in Configura nel menu a sinistra. Selezionare Abilitato (fare clic per modificare) se l'autenticazione locale è abilitata.

    Screenshot che mostra le proprietà nella sezione Configura e il pulsante Di autenticazione locale Abilitato (selezionare per modificare).

  2. Selezionare Disabilitato e applicare le modifiche.

    Screenshot che mostra l'autenticazione locale con il pulsante Abilitato/Disabilitato.

  3. Dopo aver disabilitato l'autenticazione locale nella risorsa, verranno visualizzate le informazioni corrispondenti nel riquadro Panoramica .

    Screenshot che mostra la scheda Panoramica con il pulsante Di autenticazione locale Disabilitato (selezionare per modificare).

Criteri di Azure

Criteri di Azure per DisableLocalAuth negare agli utenti la possibilità di creare una nuova risorsa di Application Insights senza questa proprietà impostata su true. Il nome del criterio è Application Insights components should block non-AAD auth ingestion.

Per applicare questa definizione di criteri alla sottoscrizione, creare una nuova assegnazione di criteri e assegnare i criteri.

L'esempio seguente mostra la definizione del modello di criteri:

{
    "properties": {
        "displayName": "Application Insights components should block non-AAD auth ingestion",
        "policyType": "BuiltIn",
        "mode": "Indexed",
        "description": "Improve Application Insights security by disabling log ingestion that are not AAD-based.",
        "metadata": {
            "version": "1.0.0",
            "category": "Monitoring"
        },
        "parameters": {
            "effect": {
                "type": "String",
                "metadata": {
                    "displayName": "Effect",
                    "description": "The effect determines what happens when the policy rule is evaluated to match"
                },
                "allowedValues": [
                    "audit",
                    "deny",
                    "disabled"
                ],
                "defaultValue": "audit"
            }
        },
        "policyRule": {
            "if": {
                "allOf": [
                    {
                        "field": "type",
                        "equals": "Microsoft.Insights/components"
                    },
                    {
                        "field": "Microsoft.Insights/components/DisableLocalAuth",
                        "notEquals": "true"                        
                    }
                ]
            },
            "then": {
                "effect": "[parameters('effect')]"
            }
        }
    }
}

Abilitazione a livello di codice

La proprietà DisableLocalAuth viene usata per disabilitare qualsiasi autenticazione locale nella risorsa di Application Insights. Quando questa proprietà è impostata su true, impone l'uso dell'autenticazione di Microsoft Entra per tutti gli accessi.

L'esempio seguente illustra il modello di Azure Resource Manager che è possibile usare per creare una risorsa di Application Insights basata sull'area di lavoro con LocalAuth disabilitato.

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "name": {
            "type": "string"
        },
        "type": {
            "type": "string"
        },
        "regionId": {
            "type": "string"
        },
        "tagsArray": {
            "type": "object"
        },
        "requestSource": {
            "type": "string"
        },
        "workspaceResourceId": {
            "type": "string"
        },
        "disableLocalAuth": {
            "type": "bool"
        }
     
    },
    "resources": [
        {
        "name": "[parameters('name')]",
        "type": "microsoft.insights/components",
        "location": "[parameters('regionId')]",
        "tags": "[parameters('tagsArray')]",
        "apiVersion": "2020-02-02-preview",
        "dependsOn": [],
        "properties": {
            "Application_Type": "[parameters('type')]",
            "Flow_Type": "Redfield",
            "Request_Source": "[parameters('requestSource')]",
            "WorkspaceResourceId": "[parameters('workspaceResourceId')]",
            "DisableLocalAuth": "[parameters('disableLocalAuth')]"
            }
    }
 ]
}

Destinatari dei token

Quando si sviluppa un client personalizzato per ottenere un token di accesso da Microsoft Entra ID per l'invio di dati di telemetria ad Application Insights, vedere la tabella seguente per determinare la stringa di destinatari appropriata per l'ambiente host specifico.

Versione cloud di Azure Valore del gruppo di destinatari del token
Cloud pubblico di Azure https://monitor.azure.com
Microsoft Azure gestito dal cloud 21Vianet https://monitor.azure.cn
Cloud di Azure US Government https://monitor.azure.us

Se si usano cloud sovrani, è possibile trovare anche le informazioni sui destinatari nel stringa di connessione. Il stringa di connessione segue questa struttura:

InstrumentationKey={profile. InstrumentationKey}; IngestionEndpoint={ingestionEndpoint}; LiveEndpoint={liveDiagnosticsEndpoint}; AADAudience={aadAudience}

Il parametro audience, AADAudience, può variare a seconda dell'ambiente specifico.

Eseguire query su Application Insights usando l'autenticazione Microsoft Entra

È possibile inviare una richiesta di query usando l'endpoint https://api.applicationinsights.iodi Application Insights di Monitoraggio di Azure. Per accedere all'endpoint, è necessario eseguire l'autenticazione tramite Microsoft Entra ID.

Configurazione dell'autenticazione

Per accedere all'API, registrare un'app client con Microsoft Entra ID e richiedere un token.

  1. Registrare un'app in Microsoft Entra ID.

  2. Nella pagina di panoramica dell'app selezionare Autorizzazioni API.

  3. Seleziona Aggiungi autorizzazione.

  4. Nella scheda API usate dall'organizzazione cercare Application Insights e selezionare API di Application Insights dall'elenco.

  5. Seleziona Autorizzazioni delegate.

  6. Selezionare la casella di controllo Data.Read .

  7. Selezionare Aggiungi autorizzazioni.

Ora che l'app è registrata e ha le autorizzazioni per usare l'API, concedere all'app l'accesso alla risorsa di Application Insights.

  1. Nella pagina di panoramica delle risorse di Application Insights selezionare Controllo di accesso (IAM).

  2. Selezionare Aggiungi un'assegnazione di ruolo.

  3. Selezionare il ruolo Lettore e quindi Selezionare Membri.

  4. Nella scheda Membri scegliere Seleziona membri.

  5. Immettere il nome dell'app nella casella Seleziona .

  6. Selezionare l'app e scegliere Seleziona.

  7. Seleziona Rivedi + assegna.

  8. Dopo aver completato l'installazione e le autorizzazioni di Active Directory, richiedere un token di autorizzazione.

Nota

Per questo esempio è stato applicato il ruolo Lettore. Questo ruolo è uno dei molti ruoli predefiniti e può includere più autorizzazioni di quelle necessarie. È possibile creare ruoli e autorizzazioni più granulari.

Richiedere un token di autorizzazione

Prima di iniziare, assicurarsi di disporre di tutti i valori necessari per eseguire correttamente la richiesta. Tutte le richieste richiedono:

  • ID tenant di Microsoft Entra.
  • ID app di App Insights: se si usano attualmente chiavi API, si tratta dello stesso ID app.
  • ID client Microsoft Entra per l'app.
  • Segreto client Microsoft Entra per l'app.

L'API di Application Insights supporta l'autenticazione di Microsoft Entra con tre diversi flussi OAuth2 di Microsoft Entra ID:

  • Credenziali del client
  • Codice di autorizzazione
  • Implicito

Flusso di credenziali client

Nel flusso delle credenziali client il token viene usato con l'endpoint di Application Insights. Viene effettuata una singola richiesta per ricevere un token usando le credenziali fornite per l'app nel passaggio precedente quando si registra un'app in Microsoft Entra ID.

Usare l'endpoint https://api.applicationinsights.io .

URL del token delle credenziali client (richiesta POST)
    POST /<your-tenant-id>/oauth2/token
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials
    &client_id=<app-client-id>
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Una richiesta con esito positivo riceve un token di accesso nella risposta:

    {
        token_type": "Bearer",
        "expires_in": "86399",
        "ext_expires_in": "86399",
        "access_token": ""eyJ0eXAiOiJKV1QiLCJ.....Ax"
    }

Usare il token nelle richieste all'endpoint di Application Insights:

    POST /v1/apps/yous_app_id/query?timespan=P1D
    Host: https://api.applicationinsights.io
    Content-Type: application/json
    Authorization: Bearer <your access token>

    Body:
    {
    "query": "requests | take 10"
    }

Esempio di risposta:

  "tables": [
    {
      "name": "PrimaryResult",
      "columns": [
        {
          "name": "timestamp",
          "type": "datetime"
        },
        {
          "name": "id",
          "type": "string"
        },
        {
          "name": "source",
          "type": "string"
        },
        {
          "name": "name",
          "type": "string"
        },
        {
          "name": "url",
          "type": "string"
        },
        {
          "name": "success",
          "type": "string"
        },
        {
          "name": "resultCode",
          "type": "string"
        },
        {
          "name": "duration",
          "type": "real"
        },
        {
          "name": "performanceBucket",
          "type": "string"
        },
        {
          "name": "customDimensions",
          "type": "dynamic"
        },
        {
          "name": "customMeasurements",
          "type": "dynamic"
        },
        {
          "name": "operation_Name",
          "type": "string"
        },
        {
          "name": "operation_Id",
          "type": "string"
        },
        {
          "name": "operation_ParentId",
          "type": "string"
        },
        {
          "name": "operation_SyntheticSource",
          "type": "string"
        },
        {
          "name": "session_Id",
          "type": "string"
        },
        {
          "name": "user_Id",
          "type": "string"
        },
        {
          "name": "user_AuthenticatedId",
          "type": "string"
        },
        {
          "name": "user_AccountId",
          "type": "string"
        },
        {
          "name": "application_Version",
          "type": "string"
        },
        {
          "name": "client_Type",
          "type": "string"
        },
        {
          "name": "client_Model",
          "type": "string"
        },
        {
          "name": "client_OS",
          "type": "string"
        },
        {
          "name": "client_IP",
          "type": "string"
        },
        {
          "name": "client_City",
          "type": "string"
        },
        {
          "name": "client_StateOrProvince",
          "type": "string"
        },
        {
          "name": "client_CountryOrRegion",
          "type": "string"
        },
        {
          "name": "client_Browser",
          "type": "string"
        },
        {
          "name": "cloud_RoleName",
          "type": "string"
        },
        {
          "name": "cloud_RoleInstance",
          "type": "string"
        },
        {
          "name": "appId",
          "type": "string"
        },
        {
          "name": "appName",
          "type": "string"
        },
        {
          "name": "iKey",
          "type": "string"
        },
        {
          "name": "sdkVersion",
          "type": "string"
        },
        {
          "name": "itemId",
          "type": "string"
        },
        {
          "name": "itemType",
          "type": "string"
        },
        {
          "name": "itemCount",
          "type": "int"
        }
      ],
      "rows": [
        [
          "2018-02-01T17:33:09.788Z",
          "|0qRud6jz3k0=.c32c2659_",
          null,
          "GET Reports/Index",
          "http://fabrikamfiberapp.azurewebsites.net/Reports",
          "True",
          "200",
          "3.3833",
          "<250ms",
          "{\"_MS.ProcessedByMetricExtractors\":\"(Name:'Requests', Ver:'1.0')\"}",
          null,
          "GET Reports/Index",
          "0qRud6jz3k0=",
          "0qRud6jz3k0=",
          "Application Insights Availability Monitoring",
          "9fc6738d-7e26-44f0-b88e-6fae8ccb6b26",
          "us-va-ash-azr_9fc6738d-7e26-44f0-b88e-6fae8ccb6b26",
          null,
          null,
          "AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
          "PC",
          null,
          null,
          "52.168.8.0",
          "Boydton",
          "Virginia",
          "United States",
          null,
          "fabrikamfiberapp",
          "RD00155D5053D1",
          "cf58dcfd-0683-487c-bc84-048789bca8e5",
          "fabrikamprod",
          "5a2e4e0c-e136-4a15-9824-90ba859b0a89",
          "web:2.5.0-33031",
          "051ad4ef-0776-11e8-ac6e-e30599af6943",
          "request",
          "1"
        ],
        [
          "2018-02-01T17:33:15.786Z",
          "|x/Ysh+M1TfU=.c32c265a_",
          null,
          "GET Home/Index",
          "http://fabrikamfiberapp.azurewebsites.net/",
          "True",
          "200",
          "716.2912",
          "500ms-1sec",
          "{\"_MS.ProcessedByMetricExtractors\":\"(Name:'Requests', Ver:'1.0')\"}",
          null,
          "GET Home/Index",
          "x/Ysh+M1TfU=",
          "x/Ysh+M1TfU=",
          "Application Insights Availability Monitoring",
          "58b15be6-d1e6-4d89-9919-52f63b840913",
          "emea-se-sto-edge_58b15be6-d1e6-4d89-9919-52f63b840913",
          null,
          null,
          "AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
          "PC",
          null,
          null,
          "51.141.32.0",
          "Cardiff",
          "Cardiff",
          "United Kingdom",
          null,
          "fabrikamfiberapp",
          "RD00155D5053D1",
          "cf58dcfd-0683-487c-bc84-048789bca8e5",
          "fabrikamprod",
          "5a2e4e0c-e136-4a15-9824-90ba859b0a89",
          "web:2.5.0-33031",
          "051ad4f0-0776-11e8-ac6e-e30599af6943",
          "request",
          "1"
        ]
      ]
    }
  ]
}

Flusso del codice di autorizzazione

Il flusso OAuth2 principale supportato è tramite i codici di autorizzazione. Questo metodo richiede due richieste HTTP per acquisire un token con cui chiamare l'API application insights di Monitoraggio di Azure. Sono disponibili due URL, con un endpoint per ogni richiesta. I relativi formati sono descritti nelle sezioni seguenti.

URL del codice di autorizzazione (richiesta GET)
    GET https://login.microsoftonline.com/YOUR_Azure AD_TENANT/oauth2/authorize?
    client_id=<app-client-id>
    &response_type=code
    &redirect_uri=<app-redirect-uri>
    &resource=https://api.applicationinsights.io

Quando viene effettuata una richiesta all'URL autorizzato, il client_id è l'ID applicazione dell'app Microsoft Entra copiato dal menu delle proprietà dell'app. Il redirect_uri è l'URL della home page/login della stessa app Microsoft Entra. Quando una richiesta ha esito positivo, questo endpoint reindirizza l'utente alla pagina di accesso fornita all'iscrizione con il codice di autorizzazione aggiunto all'URL. Vedere l'esempio seguente:

    http://<app-client-id>/?code=AUTHORIZATION_CODE&session_state=STATE_GUID

A questo punto, si ottiene un codice di autorizzazione, che viene ora usato per richiedere un token di accesso.

URL del token del codice di autorizzazione (richiesta POST)
    POST /YOUR_Azure AD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=authorization_code
    &client_id=<app client id>
    &code=<auth code fom GET request>
    &redirect_uri=<app-client-id>
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Tutti i valori sono uguali a prima, con alcune aggiunte. Il codice di autorizzazione è lo stesso codice ricevuto nella richiesta precedente dopo un reindirizzamento riuscito. Il codice viene combinato con la chiave ottenuta dall'app Microsoft Entra. Se la chiave non è stata salvata, è possibile eliminarla e crearne una nuova dalla scheda chiavi del menu dell'app Microsoft Entra. La risposta è una stringa JSON che contiene il token con lo schema seguente. I tipi sono indicati per i valori del token.

Esempio di risposta:

    {
        "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
        "expires_in": "3600",
        "ext_expires_in": "1503641912",
        "id_token": "not_needed_for_app_insights",
        "not_before": "1503638012",
        "refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az",
        "resource": "https://api.applicationinsights.io",
        "scope": "Data.Read",
        "token_type": "bearer"
    }

La parte del token di accesso di questa risposta è ciò che viene presentato all'API di Application Insights nell'intestazione Authorization: Bearer . È anche possibile usare il token di aggiornamento in futuro per acquisire una nuova access_token e refresh_token quando i dati non sono aggiornati. Per questa richiesta, il formato e l'endpoint sono:

    POST /YOUR_AAD_TENANT/oauth2/token HTTP/1.1
    Host: https://login.microsoftonline.com
    Content-Type: application/x-www-form-urlencoded
    
    client_id=<app-client-id>
    &refresh_token=<refresh-token>
    &grant_type=refresh_token
    &resource=https://api.applicationinsights.io
    &client_secret=<app-client-secret>

Esempio di risposta:

    {
      "token_type": "Bearer",
      "expires_in": "3600",
      "expires_on": "1460404526",
      "resource": "https://api.applicationinsights.io",
      "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
      "refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az"
    }

Flusso di codice implicito

L'API di Application Insights supporta il flusso implicito OAuth2. Per questo flusso è necessaria solo una singola richiesta, ma non è possibile acquisire alcun token di aggiornamento.

URL di autorizzazione del codice implicito
    GET https://login.microsoftonline.com/YOUR_AAD_TENANT/oauth2/authorize?
    client_id=<app-client-id>
    &response_type=token
    &redirect_uri=<app-redirect-uri>
    &resource=https://api.applicationinsights.io

Una richiesta con esito positivo genera un reindirizzamento all'URI di reindirizzamento con il token nell'URL:

    http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID

Questo access_token funge da valore di Authorization: Bearer intestazione quando passa all'API di Application Insights per autorizzare le richieste.

Risoluzione dei problemi

Questa sezione fornisce scenari di risoluzione dei problemi e passaggi distinti che è possibile eseguire per risolvere un problema prima di generare un ticket di supporto.

Errori HTTP di inserimento

Il servizio di inserimento restituisce errori specifici, indipendentemente dal linguaggio SDK. Il traffico di rete può essere raccolto usando uno strumento come Fiddler. È consigliabile filtrare il traffico verso l'endpoint di inserimento impostato nella stringa di connessione.

Autenticazione HTTP/1.1 400 non supportata

Questo errore indica che la risorsa è impostata solo per Microsoft Entra-only. È necessario configurare correttamente l'SDK perché viene inviato all'API errata.

Nota

"v2/track" non supporta Microsoft Entra ID. Quando l'SDK è configurato correttamente, i dati di telemetria verranno inviati a "v2.1/track".

Successivamente, è necessario esaminare la configurazione dell'SDK.

Autorizzazione RICHIESTA HTTP/1.1 401

Questo errore indica che l'SDK è configurato correttamente, ma non è in grado di acquisire un token valido. Questo errore potrebbe indicare un problema con Microsoft Entra ID.

Successivamente, è necessario identificare le eccezioni nei log dell'SDK o negli errori di rete da Identità di Azure.

HTTP/1.1 403 Non autorizzato

Questo errore indica che l'SDK usa le credenziali senza autorizzazione per la risorsa o la sottoscrizione di Application Insights.

Prima di tutto, controllare il controllo di accesso della risorsa di Application Insights. È necessario configurare l'SDK con le credenziali con il ruolo di server di pubblicazione delle metriche di monitoraggio.

Risoluzione dei problemi specifici del linguaggio

Origine evento

Application Insights .NET SDK genera i log degli errori usando l'origine evento. Per altre informazioni sulla raccolta dei log dell'origine eventi, vedere Risoluzione dei problemi relativi a nessun dato: raccogliere i log con PerfView.

Se l'SDK non riesce a ottenere un token, il messaggio di eccezione viene registrato come Failed to get AAD Token. Error message:.

Passaggi successivi