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:

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:

Konfigurera och aktivera Microsoft Entra ID-baserad autentisering

  1. 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.

  2. 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.

  3. 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.

  1. Registrera en app i Microsoft Entra-ID.

  2. På appens översiktssida väljer du API-behörigheter.

  3. Välj Lägg till behörighet.

  4. På fliken API:er som min organisation använder söker du efter Application Insights och väljer Application Insights API i listan.

  5. Välj delegerade behörigheter.

  6. Markera kryssrutan Data.Read .

  7. 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.

  1. Välj Åtkomstkontroll (IAM) på sidan För application insights-resursöversikt.

  2. Välj Lägg till rolltilldelning.

  3. Välj rollen Läsare och välj sedan Medlemmar.

  4. På fliken Medlemmar väljer du Välj medlemmar.

  5. Ange namnet på din app i rutan Välj .

  6. Välj din app och välj Välj.

  7. Välj Granska + tilldela.

  8. 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

  1. 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.

    Skärmbild som visar Egenskaper under avsnittet Konfigurera och knappen Aktiverad (välj att ändra) lokal autentisering.

  2. Välj Inaktiverad och tillämpa ändringar.

    Skärmbild som visar lokal autentisering med knappen Aktiverad/Inaktiverad.

  3. När du har inaktiverat lokal autentisering på resursen visas motsvarande information i fönstret Översikt .

    Skärmbild som visar fliken Översikt med knappen Inaktiverad (välj att ändra) lokal autentisering.

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å trueframtvingar 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:.

Nästa steg