Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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à migliora la sicurezza e l'affidabilità dei dati di telemetria usati per rendere operative critiche (avvisi e scalabilità automatica) e decisioni aziendali.
Prerequisiti
Per abilitare l'acquisizione autenticata con Microsoft Entra, completare i passaggi seguenti:
- Acquisisci familiarità con Identità gestita, Entità servizio e Assegnazione di ruoli di Azure.
- Disporre del ruolo Proprietario per il gruppo di risorse, necessario per concedere l'accesso tramite ruoli predefiniti di Azure.
- Comprendere gli scenari non supportati.
Scenari non supportati
I seguenti kit di sviluppo software (SDK) e funzionalità non supportano l'uso con l'acquisizione autenticata tramite 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.
- Application Insights JavaScript SDK.
- Application Insights OpenCensus Python SDK (ritirato) con Python versione 3.4 e 3.5.
- Strumentazione automatica per Python in Servizio app di Azure.
Configurare e abilitare l'autenticazione basata su Microsoft Entra ID
Creare un'identità usando un'identità gestita o un'entità servizio, se non ne è già disponibile una. Usare un'identità gestita quando ne è disponibile una.
Usare un'identità gestita:
Configurare un'identità gestita per il servizio di Azure (macchine virtuali o Servizio app).
Usa un service principal se l'SDK lo supporta:
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 necessario 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 di Publisher di Metriche di Monitoraggio all'identità prevista, all'entità servizio o all'account utente di Azure impostando la risorsa di Application Insights prevista come ambito del ruolo.
Nota
Sebbene il ruolo di server di pubblicazione delle metriche di monitoraggio indichi "metriche", pubblica 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 supporta le classi di credenziali fornite da Azure Identity.
Prerequisiti
Usare
DefaultAzureCredentialper lo sviluppo locale.Accedere a Visual Studio usando l'account utente Azure previsto. Per altre informazioni, vedere Eseguire l'autenticazione tramite Visual Studio.
Usare
ManagedIdentityCredentialper le identità gestite assegnate dal sistema e 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.
Linee guida per la configurazione
Installare il pacchetto più recente Azure.Identity.
dotnet add package Azure.IdentitySpecificare la classe di credenziali desiderata.
// Create a new ASP.NET Core web application builder. var builder = WebApplication.CreateBuilder(args); // Add the OpenTelemetry telemetry service to the application. // This service will collect and send telemetry data to Azure Monitor. builder.Services.AddOpenTelemetry().UseAzureMonitor(options => { // Set the Azure Monitor credential to the DefaultAzureCredential. // This credential will use the Azure identity of the current user or // the service principal that the application is running as to authenticate // to Azure Monitor. options.Credential = new DefaultAzureCredential(); }); // Build the ASP.NET Core web application. var app = builder.Build(); // Start the ASP.NET Core web application. app.Run();
Configurazione delle variabili di ambiente
Usare la variabile di ambiente
APPLICATIONINSIGHTS_AUTHENTICATION_STRINGper consentire ad Application Insights di eseguire l'autenticazione per Microsoft Entra ID e inviare dati di telemetria quando si usa app Azure Services autoinstrumentation e Configurare il monitoraggio per Funzioni di Azure.Identità assegnata dal sistema:
Impostazione app Valore APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AADIdentità assegnata dall'utente:
Impostazione app Valore APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AAD;ClientId={Client id of the User-Assigned Identity}
Eseguire query su Application Insights usando l'autenticazione Microsoft Entra
È possibile inviare una richiesta di query usando l'endpoint di Monitoraggio di Azure Application Insights https://api.applicationinsights.io. 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.
Dopo aver registrato l'app e aver concesso 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, usare 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
Codifica i valori in formato URL nelle stringhe di query e nei corpi delle richieste con codifica form.
Flusso di credenziali client
Nel flusso delle credenziali del client, usare il token con l'endpoint di Application Insights. Effettuare una singola richiesta per ricevere un token usando le credenziali fornite per l'app quando si registra un'app in Microsoft Entra ID.
Usare l'endpoint https://api.applicationinsights.io.
URL del token delle credenziali client (richiesta POST)
Nell'esempio REST seguente viene usato il flusso di credenziali client Microsoft Entra per richiedere un token. Il corpo della richiesta è codificato in formato, non JSON.
POST https://login.microsoftonline.com/{tenantId}/oauth2/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_id=<ClientId>&resource=https://api.applicationinsights.io&client_secret=<ClientSecret>
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"
}
L'esempio REST seguente usa l'operazione Query - Execute DELL'API REST. Esegue una query sulle richieste in un intervallo di tempo di un giorno usando il token di accesso.
POST https://api.applicationinsights.io/v1/apps/{appId}/query
Authorization: Bearer {accessToken}
Host: api.applicationinsights.io
Content-Type: application/json
{
"query": "requests | take 10",
"timespan": "P1D"
}
Esempio di risposta:
Visualizzare la risposta di query di Application Insights
{
"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",
"aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"us-va-ash-azr_aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
null,
null,
"AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
"PC",
null,
null,
"52.168.8.0",
"Boydton",
"Virginia",
"United States",
null,
"fabrikamfiberapp",
"RD00155D5053D1",
"bbbbbbbb-1111-2222-3333-cccccccccccc",
"fabrikamprod",
"cccccccc-2222-3333-4444-dddddddddddd",
"web:2.5.0-33031",
"dddddddd-3333-4444-5555-eeeeeeeeeeee",
"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",
"eeeeeeee-4444-5555-6666-ffffffffffff",
"emea-se-sto-edge_eeeeeeee-4444-5555-6666-ffffffffffff",
null,
null,
"AutoGen_49c3aea0-4641-4675-93b5-55f7a62d22d3",
"PC",
null,
null,
"51.141.32.0",
"Cardiff",
"Cardiff",
"United Kingdom",
null,
"fabrikamfiberapp",
"RD00155D5053D1",
"bbbbbbbb-1111-2222-3333-cccccccccccc",
"fabrikamprod",
"cccccccc-2222-3333-4444-dddddddddddd",
"web:2.5.0-33031",
"ffffffff-5555-6666-7777-aaaaaaaaaaaa",
"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. Le sezioni seguenti descrivono i relativi formati.
Codice di autorizzazione URL (richiesta GET)
Nell'esempio REST seguente viene usato il flusso del codice di autorizzazione Microsoft Entra per richiedere un codice di autorizzazione.
GET https://login.microsoftonline.com/{tenantId}/oauth2/authorize?client_id={clientId}&response_type=code&redirect_uri={redirectUri}&resource=https://api.applicationinsights.io
Quando si invia una richiesta all'URL autorizzato, client_id è l'ID dell'applicazione dell'app Microsoft Entra, copiato dal menu 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://<RedirectUri>/?code=<AuthorizationCode>&session_state=<SessionState>
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)
L'esempio REST seguente scambia il codice di autorizzazione per un token tramite il flusso del codice di autorizzazione Microsoft Entra.
POST https://login.microsoftonline.com/{tenantId}/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&client_id=<ClientId>&code=<AuthorizationCode>&redirect_uri=<RedirectUri>&resource=https://api.applicationinsights.io&client_secret=<ClientSecret>
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. Combinare il codice 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. Puoi anche usare il refresh token in futuro per ottenere un nuovo access_token e refresh_token quando quelli in uso scadono.
Nell'esempio REST seguente viene usato il flusso del codice di autorizzazione Microsoft Entra per aggiornare un token.
POST https://login.microsoftonline.com/{tenantId}/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=<ClientId>&refresh_token=<RefreshToken>&grant_type=refresh_token&resource=https://api.applicationinsights.io&client_secret=<ClientSecret>
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. Questo flusso richiede una sola richiesta, ma non fornisce un token di aggiornamento.
URL di autorizzazione del codice implicito
L'esempio REST seguente richiede un token usando il flusso implicito.
GET https://login.microsoftonline.com/{tenantId}/oauth2/authorize?client_id={clientId}&response_type=token&redirect_uri={redirectUri}&resource=https://api.applicationinsights.io
Una richiesta completata correttamente reindirizza alla tua URI di reindirizzamento con il token contenuto nell'URL:
http://<RedirectUri>/#access_token=<AccessToken>&token_type=Bearer&expires_in=3600&session_state=<SessionState>
Questo access_token funge da valore dell'intestazione Authorization: Bearer quando viene inviato all'API di Application Insights per autorizzare le richieste.
Disabilita autenticazione locale
Dopo aver abilitato l'autenticazione Microsoft Entra, è possibile disabilitare l'autenticazione locale. Quando si disabilita l'autenticazione locale, è possibile inserire i dati di telemetria autenticati esclusivamente da Microsoft Entra ID. Questa configurazione influisce sull'accesso ai dati, ad esempio tramite chiavi API.
È possibile disabilitare l'autenticazione locale usando il portale di Azure, Criteri di Azure o a livello di codice.
Portale di Azure
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, nel riquadro Panoramica sono visualizzate le informazioni corrispondenti.
Criteri di Azure
Criteri di Azure per DisableLocalAuth impedisce agli utenti di creare una nuova risorsa di Application Insights senza che questa proprietà sia 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:
Visualizzare i criteri che limitano l'autenticazione locale
{
"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 programmatica
Usare la DisableLocalAuth proprietà per disabilitare l'autenticazione locale nella risorsa di Application Insights. Quando si imposta questa proprietà su true, si impone che per tutti gli accessi debba essere usata l'autenticazione Microsoft Entra.
I modelli seguenti creano una risorsa di Application Insights basata sull'area di lavoro con DisableLocalAuth impostato su true. I parametri subscriptionId e resourceGroupName identificano la sottoscrizione e il gruppo di risorse dell'area di lavoro Log Analytics collegata. Per l'operazione dell'API REST, vedere Components - Create Or Update.
Nota
Le distribuzioni di modelli sono operazioni di creazione o aggiornamento, non operazioni PATCH parziali. Per una risorsa esistente, includere le impostazioni che è necessario conservare.
L'esempio di Bicep seguente usa il tipo di risorsa Microsoft.Insights/components. Disabilita l'autenticazione locale impostando DisableLocalAuth su true.
param subscriptionId string = '<SubscriptionId>'
param resourceGroupName string = '<ResourceGroupName>'
param resourceName string = '<ResourceName>'
param azureRegion string = '<AzureRegion>'
param workspaceName string = '<WorkspaceName>'
param applicationType string = '<ApplicationType>'
param applicationKind string = '<ApplicationKind>'
param tags object = {}
param disableLocalAuth bool = true
var workspaceResourceId = resourceId(
subscriptionId,
resourceGroupName,
'Microsoft.OperationalInsights/workspaces',
workspaceName
)
resource applicationInsightsComponent 'Microsoft.Insights/components@<ApiVersion>' = {
name: resourceName
location: azureRegion
kind: applicationKind
tags: tags
properties: {
Application_Type: applicationType
Flow_Type: 'Bluefield'
Request_Source: 'rest'
WorkspaceResourceId: workspaceResourceId
DisableLocalAuth: 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 cloud del Governo degli Stati Uniti | 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
Per indicazioni sulla risoluzione dei problemi, vedere Risolvere i problemi di autenticazione di Microsoft Entra.