Microsoft Entra-autentisering för Application Insights.
Application Insights stöder nu Microsoft Entra-autentisering. Genom att använda Microsoft Entra-ID kan du se till att endast autentiserad telemetri matas in i dina Application Insights-resurser.
Att använda olika autentiseringssystem kan vara besvärligt och riskabelt eftersom det är svårt att hantera autentiseringsuppgifter i stor skala. Nu kan du välja att avregistrera dig från lokal autentisering för att säkerställa att endast telemetri uteslutande autentiseras med hjälp av hanterade identiteter och att Microsoft Entra-ID matas in i resursen. Den här funktionen är ett steg för att förbättra säkerheten och tillförlitligheten för den telemetri som används för att göra kritiska operativa (aviseringar och autoskalning) och affärsbeslut.
Förutsättningar
Följande preliminära steg krävs för att aktivera Microsoft Entra-autentiserad inmatning. Du måste:
- Var i det offentliga molnet.
- Bekanta dig med:
- Om du beviljar åtkomst med hjälp av inbyggda Azure-roller måste du ha en ägarroll till resursgruppen.
- Förstå scenarierna som inte stöds.
Scenarier som inte stöds
Följande SDK:er (Software Development Kit) och funktioner stöds inte för användning med Microsoft Entra-autentiserad inmatning:
- Application Insights Java 2.x SDK.
Microsoft Entra-autentisering är endast tillgängligt för Application Insights Java Agent som är större än eller lika med 3.2.0. - ApplicationInsights JavaScript-webb-SDK.
- Application Insights OpenCensus Python SDK med Python version 3.4 och 3.5.
- AutoInstrumentation för Python i Azure App Service
- Profilerare.
Konfigurera och aktivera Microsoft Entra ID-baserad autentisering
Om du inte redan har en identitet skapar du en med hjälp av antingen en hanterad identitet eller ett huvudnamn för tjänsten.
Vi rekommenderar att du använder en hanterad identitet:
Konfigurera en hanterad identitet för din Azure-tjänst (virtuella datorer eller App Service).
Vi rekommenderar inte att du använder tjänstens huvudnamn:
Mer information om hur du skapar ett Microsoft Entra-program och tjänstens huvudnamn som kan komma åt resurser finns i Skapa ett huvudnamn för tjänsten.
Tilldela den rollbaserade åtkomstkontrollrollen (RBAC) som krävs till Azure-identiteten, tjänstens huvudnamn eller Azure-användarkontot.
Följ stegen i Tilldela Azure-roller för att lägga till rollen Monitoring Metrics Publisher till den förväntade identiteten, tjänstens huvudnamn eller Azure-användarkonto genom att ange application insights-målresursen som rollomfång.
Kommentar
Även om rollen Monitoring Metrics Publisher säger "mått" publiceras all telemetri till Application Insights-resursen.
Följ konfigurationsvägledningen i enlighet med det språk som följer.
Kommentar
Stöd för Microsoft Entra-ID i Application Insights .NET SDK ingår från och med version 2.18-Beta3.
Application Insights .NET SDK stöder de autentiseringsklasser som tillhandahålls av Azure Identity.
- Vi rekommenderar
DefaultAzureCredential
för lokal utveckling. - Autentisera i Visual Studio med det förväntade Azure-användarkontot. Mer information finns i Autentisera via Visual Studio.
- Vi rekommenderar
ManagedIdentityCredential
systemtilldelade och användartilldelade hanterade identiteter.- För systemtilldelade använder du standardkonstruktorn utan parametrar.
- För användartilldelad anger du klient-ID:t till konstruktorn.
I följande exempel visas hur du skapar och konfigurerar TelemetryConfiguration
manuellt med hjälp av .NET:
TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);
I följande exempel visas hur du konfigurerar TelemetryConfiguration
med hjälp av .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/"
});
Miljövariabelkonfiguration
Använd miljövariabeln för att låta Application Insights autentisera APPLICATIONINSIGHTS_AUTHENTICATION_STRING
till Microsoft Entra-ID och skicka telemetri när du använder automatisk instrumentering i Azure App Services.
- För systemtilldelad identitet:
Appinställning | Värde |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD |
- För användartilldelad identitet:
Appinställning | Värde |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD;ClientId={Client id of the User-Assigned Identity} |
Fråga Application Insights med Microsoft Entra-autentisering
Du kan skicka en frågebegäran med hjälp av Azure Monitor Application Insights-slutpunkten https://api.applicationinsights.io
. För att få åtkomst till slutpunkten måste du autentisera via Microsoft Entra-ID.
Konfigurera autentisering
För att få åtkomst till API:et registrerar du en klientapp med Microsoft Entra-ID och begär en token.
På appens översiktssida väljer du API-behörigheter.
Välj Lägg till behörighet.
På fliken API:er som min organisation använder söker du efter Application Insights och väljer Application Insights API i listan.
Välj delegerade behörigheter.
Markera kryssrutan Data.Read .
Välj Lägg till behörigheter.
Nu när din app har registrerats och har behörighet att använda API:et ger du din app åtkomst till din Application Insights-resurs.
Välj Åtkomstkontroll (IAM) på sidan För application insights-resursöversikt.
Välj Lägg till rolltilldelning.
Välj rollen Läsare och välj sedan Medlemmar.
På fliken Medlemmar väljer du Välj medlemmar.
Ange namnet på din app i rutan Välj .
Välj din app och välj Välj.
Välj Granska + tilldela.
När du har slutfört Active Directory-konfigurationen och behörigheterna begär du en auktoriseringstoken.
Kommentar
I det här exemplet använde vi rollen Läsare. Den här rollen är en av många inbyggda roller och kan innehålla fler behörigheter än du behöver. Du kan skapa fler detaljerade roller och behörigheter.
Begära en auktoriseringstoken
Innan du börjar kontrollerar du att du har alla värden som krävs för att begäran ska lyckas. Alla begäranden kräver:
- Ditt Klient-ID för Microsoft Entra.
- Ditt App Insights-app-ID – Om du för närvarande använder API-nycklar är det samma app-ID.
- Ditt Microsoft Entra-klient-ID för appen.
- En Microsoft Entra-klienthemlighet för appen.
Application Insights API stöder Microsoft Entra-autentisering med tre olika Microsoft Entra ID OAuth2-flöden :
- Klientautentiseringsuppgifter
- Auktoriseringskod
- Implicit
Flöde för klientautentiseringsuppgifter
I flödet för klientautentiseringsuppgifter används token med Application Insights-slutpunkten. En enda begäran görs om att ta emot en token med hjälp av de autentiseringsuppgifter som angavs för din app i föregående steg när du registrerar en app i Microsoft Entra-ID.
https://api.applicationinsights.io
Använd slutpunkten.
Url för token för klientautentiseringsuppgifter (POST-begäran)
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>
En lyckad begäran tar emot en åtkomsttoken i svaret:
{
token_type": "Bearer",
"expires_in": "86399",
"ext_expires_in": "86399",
"access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax"
}
Använd token i begäranden till Application Insights-slutpunkten:
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"
}
Exempelsvar:
"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"
]
]
}
]
}
Auktoriseringskodflöde
Det huvudsakliga OAuth2-flödet som stöds är via auktoriseringskoder. Den här metoden kräver två HTTP-begäranden för att hämta en token som du kan anropa Azure Monitor Application Insights API med. Det finns två URL:er med en slutpunkt per begäran. Deras format beskrivs i följande avsnitt.
Auktoriseringskod-URL (GET-begäran)
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
När en begäran görs till den auktoriserade URL:en client\_id
är det program-ID från din Microsoft Entra-app som kopieras från appens egenskapsmeny. redirect\_uri
är homepage/login
URL:en från samma Microsoft Entra-app. När en begäran lyckas omdirigerar den här slutpunkten dig till inloggningssidan som du angav vid registreringen med auktoriseringskoden som läggs till i URL:en. Se följande exempel:
http://<app-client-id>/?code=AUTHORIZATION_CODE&session_state=STATE_GUID
Nu hämtar du en auktoriseringskod som du nu använder för att begära en åtkomsttoken.
Url för auktoriseringskodtoken (POST-begäran)
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>
Alla värden är samma som tidigare, med vissa tillägg. Auktoriseringskoden är samma kod som du fick i föregående begäran efter en lyckad omdirigering. Koden kombineras med nyckeln som hämtas från Microsoft Entra-appen. Om du inte sparade nyckeln kan du ta bort den och skapa en ny från fliken Nycklar i Microsoft Entra-appmenyn. Svaret är en JSON-sträng som innehåller token med följande schema. Typer anges för tokenvärdena.
Svarsexempel:
{
"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"
}
Åtkomsttokendelen av det här svaret är det du presenterar för Application Insights-API:et Authorization: Bearer
i rubriken. Du kan också använda uppdateringstoken i framtiden för att hämta en ny access_token och refresh_token när din blir inaktuell. För den här begäran är formatet och slutpunkten:
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>
Svarsexempel:
{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1460404526",
"resource": "https://api.applicationinsights.io",
"access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
"refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az"
}
Implicit kodflöde
Application Insights-API:et stöder det implicita OAuth2-flödet. För det här flödet krävs bara en enda begäran, men ingen uppdateringstoken kan hämtas.
Url för implicit kodauktorisering
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
En lyckad begäran genererar en omdirigering till din omdirigerings-URI med token i URL:en:
http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID
Den här access_token fungerar som Authorization: Bearer
huvudvärde när det skickas till Application Insights-API:et för att auktorisera begäranden.
Inaktivera lokal autentisering
När Microsoft Entra-autentiseringen har aktiverats kan du välja att inaktivera lokal autentisering. Med den här konfigurationen kan du mata in telemetri som autentiseras exklusivt av Microsoft Entra-ID och påverkar dataåtkomst (till exempel via API-nycklar).
Du kan inaktivera lokal autentisering med hjälp av Azure Portal eller Azure Policy eller programmatiskt.
Azure Portal
Från Application Insights-resursen väljer du Egenskaper under Konfigurera på menyn till vänster. Välj Aktiverad (klicka för att ändra) om den lokala autentiseringen är aktiverad.
Välj Inaktiverad och tillämpa ändringar.
När du har inaktiverat lokal autentisering på resursen visas motsvarande information i fönstret Översikt .
Azure Policy
Azure Policy för DisableLocalAuth
nekar användare möjligheten att skapa en ny Application Insights-resurs utan den här egenskapen inställd på true
. Principnamnet är Application Insights components should block non-Azure Active Directory based ingestion
.
Om du vill tillämpa den här principdefinitionen på din prenumeration skapar du en ny principtilldelning och tilldelar principen.
I följande exempel visas definitionen av principmallen:
{
"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')]"
}
}
}
}
Programmatisk aktivering
Egenskapen DisableLocalAuth
används för att inaktivera lokal autentisering på Application Insights-resursen. När den här egenskapen är inställd på true
framtvingar den att Microsoft Entra-autentisering måste användas för all åtkomst.
I följande exempel visas den Azure Resource Manager-mall som du kan använda för att skapa en arbetsytebaserad Application Insights-resurs med LocalAuth
inaktiverad.
{
"$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')]"
}
}
]
}
Token-målgrupp
När du utvecklar en anpassad klient för att hämta en åtkomsttoken från Microsoft Entra-ID för att skicka telemetri till Application Insights läser du följande tabell för att fastställa lämplig målgruppssträng för din specifika värdmiljö.
Azure-molnversion | Token-målgruppsvärde |
---|---|
Offentligt Azure-moln | https://monitor.azure.com |
Microsoft Azure drivs av 21Vianet-molnet | https://monitor.azure.cn |
Azure US Government-moln | https://monitor.azure.us |
Om du använder nationella moln kan du även hitta målgruppsinformationen i anslutningssträng. Anslutningssträng följer den här strukturen:
InstrumentationKey={profile. InstrumentationKey}; IngestionEndpoint={ingestionEndpoint}; LiveEndpoint={liveDiagnosticsEndpoint}; AADAudience={aadAudience}
Målgruppsparametern AADAudience kan variera beroende på din specifika miljö.
Felsökning
Det här avsnittet innehåller distinkta felsökningsscenarier och steg som du kan vidta för att lösa ett problem innan du skapar ett supportärende.
HTTP-fel för inmatning
Inmatningstjänsten returnerar specifika fel, oavsett SDK-språk. Nätverkstrafik kan samlas in med hjälp av ett verktyg som Fiddler. Du bör filtrera trafik till inmatningsslutpunkten som anges i anslutningssträng.
HTTP/1.1 400-autentisering stöds inte
Det här felet visar att resursen har angetts endast för Microsoft Entra. Du måste konfigurera SDK:n korrekt eftersom den skickar till fel API.
Kommentar
"v2/track" stöder inte Microsoft Entra-ID. När SDK:t är korrekt konfigurerat skickas telemetri till "v2.1/track".
Därefter bör du granska SDK-konfigurationen.
HTTP/1.1 401 Auktorisering krävs
Det här felet anger att SDK:t är korrekt konfigurerat men att det inte går att hämta en giltig token. Det här felet kan tyda på ett problem med Microsoft Entra-ID.
Därefter bör du identifiera undantag i SDK-loggarna eller nätverksfelen från Azure Identity.
HTTP/1.1 403 Obehörig
Det här felet innebär att SDK använder autentiseringsuppgifter utan behörighet för Application Insights-resursen eller prenumerationen.
Kontrollera först åtkomstkontrollen för Application Insights-resursen. Du måste konfigurera SDK med autentiseringsuppgifter som har rollen Monitoring Metrics Publisher.
Språkspecifik felsökning
Händelsekälla
Application Insights .NET SDK genererar felloggar med hjälp av händelsekällan. Mer information om hur du samlar in händelsekällans loggar finns i Felsöka inga data – samla in loggar med PerfView.
Om SDK:t inte hämtar en token loggas undantagsmeddelandet som Failed to get AAD Token. Error message:
.