Autenticazione Microsoft Entra per Application Insights
Application Insights ora supporta l'autenticazione con 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 tramiteidentità gestite e Microsoft Entra ID. 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:
- Essere nel cloud pubblico.
- Acquisire familiarità con:
- Per concedere l'accesso usando i ruoli predefiniti di Azure è necessario avere un ruolo proprietario per il gruppo di risorse.
- Comprendere gli scenari non supportati.
Scenari non supportati
I seguenti SDK e le funzionalità relative non sono supportati per l'uso con l'inserimento autenticato di Microsoft Entra:
- Application Insights Java 2.x SDK.
L'autenticazione di Microsoft Entra è disponibile solo per l'agente Java di Application Insights maggiore o uguale a 3.2.0. - ApplicationInsights JavaScript Web SDK.
- Application Insights OpenCensus Python SDK con Python versione 3.4 e 3.5.
- AutoInstrumentation per Python in Servizio app di Azure
- Application Insights Profiler per .NET.
Configurare e abilitare l'autenticazione basata su Microsoft Entra ID
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.
Assegnare il ruolo di controllo degli accessi in base al ruolo (RBAC) 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.
Seguire le indicazioni di configurazione in base alla lingua seguente.
Nota
Il supporto per Microsoft Entra ID nell'SDK Application Insights .NET è incluso a partire dalla versione 2.18-Beta3.
L'SDK Application Insights .NET supporta le classi di credenziali fornite da Azure Identity.
- Usare
DefaultAzureCredential
per lo sviluppo locale. - Eseguire l'autenticazione in Visual Studio con l'account utente di Azure previsto. Per altre informazioni, vedere Eseguire l'autenticazione tramite Visual Studio.
- Usare
ManagedIdentityCredential
per le identità gestite assegnate dal sistema o assegnate dall'utente.- In caso di assegnazione dal sistema, usare il costruttore predefinito senza parametri.
- In caso di assegnazione dall'utente, fornire 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/"
});
Configurazione delle variabili di ambiente
Quando si usa la strumentazione automatica di Servizi app di Azure, la variabile di ambiente APPLICATIONINSIGHTS_AUTHENTICATION_STRING
consente ad Application Insights di eseguire l'autenticazione a Microsoft Entra ID e inviare dati di telemetria.
- Per l'identità assegnata dal sistema:
Impostazione app | Valore |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD |
- Per l'identità assegnata dall'utente:
Impostazione app | Valore |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD;ClientId={Client id of the User-Assigned Identity} |
Eseguire una query ad Application Insights usando l'autenticazione di Microsoft Entra
È possibile inviare una richiesta di query usando l'endpoint https://api.applicationinsights.io
di 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.
Nella pagina di panoramica dell'app selezionare Autorizzazioni API.
Seleziona Aggiungi autorizzazione.
Nella scheda API usate dall'organizzazione cercare Application Insights e selezionare API di Application Insights nell'elenco.
Seleziona Autorizzazioni delegate.
Selezionare la casella di controllo Data.Read.
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.
Nella pagina di panoramica delle risorse di Application Insights, selezionare Controllo di accesso (IAM).
Selezionare Aggiungi un'assegnazione di ruolo.
Selezionare il ruolo Lettore, quindi selezionare Membri.
Nella scheda Membri, scegliere Seleziona membri.
Immettere il nome dell’app nella casella Seleziona.
Selezionare l’app e scegliere Seleziona.
Seleziona Rivedi + assegna.
Dopo aver completato le autorizzazioni e la configurazione di Active Directory, richiedere un token di autorizzazione.
Nota
Per questo esempio è stato applicato il ruolo Lettore. Questo è uno dei molti ruoli predefiniti e può includere più autorizzazioni di quelle necessarie. È possibile creare ruoli e autorizzazioni più granulari.
Richiesta di un token di autorizzazione.
Prima di iniziare, assicurarsi di disporre di tutti i valori necessari per eseguire correttamente la richiesta. Tutte le richieste necessitano di:
- ID tenant di Microsoft Entra.
- ID app di App Insights: se si usano attualmente chiavi API, è lo stesso ID app.
- ID client Microsoft Entra per l'app.
- Segreto client Microsoft Entra per l'app.
L'API Application Insights supporta l'autenticazione di Microsoft Entra con tre differenti flussi di Microsoft Entra ID OAuth2:
- 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 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 rispettivi formati sono descritti nelle sezioni seguenti.
Codice di autorizzazione URL (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 di autorizzazione, il client\_id
è l'ID applicazione dell'app Microsoft Entra copiato nel menu delle proprietà dell'app. redirect\_uri
è l'URL homepage/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 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 si presenta all'API Application Insights nell'intestazione Authorization: Bearer
. Inoltre, è possibile usare il token di aggiornamento in futuro per acquisire un nuovo access_token e refresh_token quando i dati non sono più 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 dell'intestazione Authorization: Bearer
quando passa all'API di Application Insights per autorizzare le richieste.
Disabilita 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
Dalla risorsa di Application Insights selezionare Proprietà sotto l'intestazione Configura nel menu a sinistra. Selezionare Abilitato (fare clic per modificare) se l'autenticazione locale è abilitata.
Selezionare Disabilitato e applicare le modifiche.
Dopo aver disabilitato l'autenticazione locale nella risorsa, verranno visualizzate le informazioni corrispondenti nel riquadro Panoramica.
Criteri di Azure
Criteri di Azure per DisableLocalAuth
nega 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-Azure Active Directory based ingestion
.
Per applicare questa definizione di criteri alla sottoscrizione, creare una nuova assegnazione di criteri e assegnare il criterio.
L'esempio seguente mostra la definizione del modello di criteri:
{
"properties": {
"displayName": "Application Insights components should block non-Azure Active Directory based 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. Se impostato su true
, questa proprietà applica che l'autenticazione di Microsoft Entra deve essere usata per tutti gli accessi.
L'esempio seguente illustra il modello di 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 dei destinatari del token |
---|---|
Cloud pubblico di Azure | https://monitor.azure.com |
Microsoft Azure gestito da 21Vianet cloud | https://monitor.azure.cn |
Azure US Government cloud | https://monitor.azure.us |
Se si usano cloud sovrani, è possibile trovare anche le informazioni sui destinatari nella stringa di connessione. La stringa di connessione segue questa struttura:
InstrumentationKey={profile.InstrumentationKey};IngestionEndpoint={ingestionEndpoint};LiveEndpoint={liveDiagnosticsEndpoint};AADAudience={aadAudience}
Il parametro destinatari, AADAudience, può variare a seconda dell'ambiente specifico.
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. È possibile raccogliere il traffico di rete usando uno strumento come Fiddler. È consigliabile filtrare il traffico verso l'endpoint di inserimento impostato nella stringa di connessione.
HTTP/1.1 400 Autenticazione non supportata
Questo errore indica che la risorsa è impostata solo per Microsoft Entra. È 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.
HTTP/1.1 401 autorizzazione richiesta
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.
Passaggio successivo: identificare le eccezioni nei log dell'SDK o gli errori di rete di 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.
Innanzitutto, esaminare 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 della lingua
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:
.