Ověřování Microsoft Entra pro Application Insights

Application Insights teď podporuje ověřování Microsoft Entra. Pomocí ID Microsoft Entra můžete zajistit, aby se ve vašich prostředcích Application Insights ingestovala pouze ověřená telemetrie.

Používání různých ověřovacích systémů může být těžkopádné a rizikové, protože je obtížné spravovat přihlašovací údaje ve velkém měřítku. Teď se můžete rozhodnout odhlásit místní ověřování , abyste zajistili, že se ve vašem prostředku ingestují jenom telemetrie výhradně ověřená pomocí spravovaných identit a ID Microsoft Entra .

Tato funkce vylepšuje zabezpečení a spolehlivost telemetrie používané k provádění důležitých provozních (upozorňování a automatického škálování) a obchodních rozhodnutí.

Požadavky

Pokud chcete povolit příjem dat ověřovaný pomocí Microsoft Entra, proveďte následující kroky:

Nepodporované scénáře

Následující sady pro vývoj softwaru (SDK) a funkce nelze použít s příjmem dat ověřovaným pomocí Microsoft Entra:

Konfigurace a povolení ověřování na základě ID Microsoft Entra

  1. Vytvořte identitu pomocí spravované identity nebo instančního objektu služby, pokud ji ještě nemáte.

  2. Přiřaďte požadovanou roli identitě Azure, instančnímu objektu nebo uživatelskému účtu Azure.

    Postupujte podle kroků v části Přiřazení rolí Azure a přidejte roli vydavatele metrik monitorování k očekávané identitě, instančnímu objektu nebo uživatelskému účtu Azure a nastavte cílový prostředek Application Insights jako obor role.

    Poznámka:

    Ačkoliv název role Vydavatel metrik monitorování obsahuje "metriky", publikuje veškerou telemetrii do služby Application Insights.

  3. Postupujte podle pokynů ke konfiguraci v souladu s následujícím jazykem.

Poznámka:

Požadavky

  • Používá se DefaultAzureCredential pro místní vývoj.

  • Přihlaste se k Visual Studio pomocí očekávaného uživatelského účtu Azure. Další informace najdete v tématu Ověřování prostřednictvím sady Visual Studio.

  • Používá se ManagedIdentityCredential pro spravované identity přiřazené systémem a přiřazené uživatelem.

    • Při systémovém přiřazení použijte výchozí konstruktor bez parametrů.
    • Pro uživatelem přiřazenou identitu zadejte ID klienta do konstruktoru.

Pokyny ke konfiguraci

  1. Nainstalujte nejnovější balíček Azure.Identity.

    dotnet add package Azure.Identity
    
  2. Zadejte požadovanou třídu přihlašovacích údajů.

    // 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();
    

Konfigurace proměnných prostředí

Pomocí proměnné prostředí APPLICATIONINSIGHTS_AUTHENTICATION_STRING umožníte službě Application Insights ověřit Microsoft Entra ID a odesílat telemetrii při použití automatického vytváření Aplikace Azure Services a Konfigurování monitorování pro Azure Functions.

  • Identita přiřazená systémem:

    Nastavení aplikace Hodnota
    APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AAD
  • Identita přiřazená uživatelem:

    Nastavení aplikace Hodnota
    APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AAD;ClientId={Client id of the User-Assigned Identity}

Dotazování na Application Insights pomocí ověřování Microsoft Entra ID

Žádost o dotaz můžete odeslat pomocí koncového bodu https://api.applicationinsights.ioApplication Insights služby Azure Monitor . Pokud chcete získat přístup ke koncovému bodu, musíte se ověřit prostřednictvím ID Microsoft Entra.

Nastavení ověřování

Pokud chcete získat přístup k rozhraní API, zaregistrujte klientskou aplikaci pomocí Microsoft Entra ID a požádejte o token.

  1. Zaregistrujte aplikaci v Microsoft Entra ID.

  2. Na stránce přehledu aplikace vyberte oprávnění rozhraní API.

  3. Vyberte Přidat oprávnění.

  4. Na kartě rozhraní API, která moje organizace používá, vyhledejte Application Insights a ze seznamu vyberte rozhraní Application Insights API.

  5. Vyberte Delegovaná oprávnění.

  6. Zaškrtněte políčko Data.Read .

  7. Vyberte Přidat oprávnění.

Jakmile aplikaci zaregistrujete a udělíte jí oprávnění k používání rozhraní API, udělte aplikaci přístup k prostředku Application Insights.

  1. Na stránce přehledu prostředků Application Insights vyberte Řízení přístupu (IAM).

  2. Vyberte Přidat přiřazení role.

  3. Vyberte roli Čtenář a poté vyberte Členové.

  4. Na kartě Členové zvolte Vybrat členy.

  5. Do pole Vybrat zadejte název aplikace.

  6. Vyberte aplikaci a zvolte Vybrat.

  7. Vyberte Zkontrolovat a přiřadit.

  8. Po dokončení nastavení a oprávnění služby služba Active Directory požádejte o autorizační token.

Poznámka:

V tomto příkladu použijte roli Čtenář. Tato role je jednou z mnoha předdefinovaných rolí a může zahrnovat více oprávnění, než vyžadujete. Můžete vytvářet podrobnější role a oprávnění.

Vyžádání autorizačního tokenu

Než začnete, ujistěte se, že máte všechny hodnoty potřebné k úspěšnému provedení požadavku. Všechny požadavky vyžadují:

  • ID vašeho tenanta Microsoft Entra.
  • ID vaší aplikace App Insights – Pokud aktuálně používáte klíče rozhraní API, je to stejné ID aplikace.
  • ID klienta Microsoft Entra pro aplikaci.
  • Tajný kód klienta Microsoft Entra pro aplikaci.

Rozhraní API služby Application Insights podporuje ověřování Microsoft Entra pomocí tří různých toků Microsoft Entra ID OAuth2:

  • Přihlašovací údaje klienta
  • Autorizační kód
  • Implicitní

Tok přihlašovacích údajů klienta

V toku přihlašovacích údajů klienta použijte token s koncovým bodem Application Insights. Vytvořte jeden požadavek na přijetí tokenu pomocí přihlašovacích údajů, které pro aplikaci zadáte při registraci aplikace v Microsoft Entra ID.

Použijte https://api.applicationinsights.io endpoint.

Adresa URL tokenu přihlašovacích údajů klienta (požadavek POST)
POST /{TenantId}/oauth2/token
Host: https://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>

Úspěšný požadavek obdrží přístupový token v odpovědi:

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

Použijte token v požadavcích na koncový bod Application Insights:

POST /v1/apps/{AppId}/query?timespan=P1D
Host: https://api.applicationinsights.io
Authorization: Bearer {AccessToken}
Content-Type: application/json

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

Příklad odpovědi:

{
  "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"
        ]
      ]
    }
  ]
}

Tok autorizačního kódu

Hlavní podporovaný tok OAuth2 je prostřednictvím autorizačních kódů. Tato metoda vyžaduje dva požadavky HTTP k získání tokenu, pomocí kterého se má volat rozhraní API Application Insights služby Azure Monitor. Existují dvě adresy URL, přičemž každá má jeden koncový bod na požadavek. Následující části popisují jejich formáty.

Adresa URL autorizačního kódu (požadavek GET)
GET https://login.microsoftonline.com/{TenantId}/oauth2/authorize?
client_id=<ClientId>
&response_type=code
&redirect_uri=<RedirectUri>
&resource=https://api.applicationinsights.io

Když provedete požadavek na autorizovanou adresu URL, client\_id jedná se o ID aplikace z vaší aplikace Microsoft Entra zkopírované z nabídky vlastností aplikace. Jedná se redirect\_uri o homepage/login adresu URL ze stejné aplikace Microsoft Entra. Pokud je žádost úspěšná, tento koncový bod vás přesměruje na přihlašovací stránku, kterou jste zadali při registraci s autorizačním kódem připojeným k adrese URL. Prohlédněte si následující příklad:

http://<RedirectUri>/?code=<AuthorizationCode>&session_state=<SessionState>

V tomto okamžiku získáte autorizační kód, který teď použijete k vyžádání přístupového tokenu.

Adresa URL tokenu autorizačního kódu (požadavek POST)
POST /{TenantId}/oauth2/token HTTP/1.1
Host: https://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>

Všechny hodnoty jsou stejné jako předtím, s některými přírůstky. Autorizační kód je stejný kód, který jste obdrželi v předchozím požadavku po úspěšném přesměrování. Zkombinujte kód s klíčem získaným z aplikace Microsoft Entra. Pokud jste klíč neuložili, můžete ho odstranit a vytvořit nový z karty kláves v nabídce aplikace Microsoft Entra. Odpověď je řetězec JSON, který obsahuje token s následujícím schématem. Pro hodnoty tokenu jsou uvedené typy.

Příklad odpovědi:

{
  "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"
}

Část přístupového tokenu této odpovědi je to, co prezentujete v rozhraní API Application Insights v Authorization: Bearer hlavičce. V budoucnu můžete také použít obnovovací token k získání nového access_token a refresh_tokenu, když vaše současné tokeny vyprší platnost. Pro tento požadavek platí, že formát a koncový bod jsou:

POST /{TenantId}/oauth2/token HTTP/1.1
Host: https://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>

Příklad odpovědi:

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

Implicitní tok kódu

Rozhraní Application Insights API podporuje implicitní tok OAuth2. Tento tok vyžaduje pouze jeden požadavek, ale neposkytuje obnovovací token.

Implicitní adresa URL pro autorizaci kódu
GET https://login.microsoftonline.com/{TenantId}/oauth2/authorize?
client_id=<ClientId>
&response_type=token
&redirect_uri=<RedirectUri>
&resource=https://api.applicationinsights.io

Úspěšný požadavek přesměruje na vaši URI přesměrování s tokenem v adrese URL:

http://<RedirectUri>/#access_token=<AccessToken>&token_type=Bearer&expires_in=3600&session_state=<SessionState>

Tento access_token slouží jako hodnota hlavičky Authorization: Bearer, když ho odesíláte rozhraní Application Insights API za účelem autorizace požadavků.

Zakázání místního ověřování

Po povolení Microsoft Entra ověřování můžete zakázat místní ověřování. Když zakážete místní ověřování, můžete přijímat telemetrii ověřenou výhradně pomocí Microsoft Entra ID. Tato konfigurace má vliv na přístup k datům, například prostřednictvím klíčů rozhraní API.

Místní ověřování můžete zakázat pomocí portálu Azure, Azure Policy nebo programově.

Azure Portal

  1. V prostředku Application Insights vyberte v části Konfigurovat v nabídce na levé straně možnost Vlastnosti. Pokud je místní ověřování povolené, vyberte Povoleno (kliknutím můžete změnit).

    Snímek obrazovky znázorňující vlastnosti v části Konfigurovat a tlačítko Místní ověřování Povoleno/Zakázáno

  2. Vyberte Zakázáno a použijte provedené změny.

    Snímek obrazovky znázorňující místní ověřování s tlačítkem Povoleno/Zakázáno

  3. Po zakázání místního ověřování prostředku se v podokně Přehled zobrazí odpovídající informace.

    Snímek obrazovky znázorňující kartu Přehled s tlačítkem Zakázáno (vyberte pro změnu) pro místní ověřování

Azure Policy

Azure Policy pro DisableLocalAuth odepírá uživatelům možnost vytvořit nový prostředek Application Insights bez nastavení této vlastnosti na true. Název zásady je Application Insights components should block non-Azure Active Directory based ingestion.

Pokud chcete tuto definici zásad použít pro vaše předplatné, vytvořte nové přiřazení zásady a přiřaďte ji.

Následující příklad ukazuje definici šablony zásad:

{
  "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')]"
      }
    }
  }
}

Programové povolení

Pomocí vlastnosti DisableLocalAuth zakažte místní ověřování v prostředku Application Insights. Když tuto vlastnost nastavíte na true, vynucuje, že Microsoft Entra ověřování musí být použito pro veškerý přístup.

Následující příklad ukazuje šablonu Azure Resource Manageru, kterou můžete použít k vytvoření prostředku Application Insights založeného na pracovním prostoru se zakázaným LocalAuth .

{
  "$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')]"
      }
    }
  ]
}

Cílová skupina tokenů

Při vývoji vlastního klienta pro získání přístupového tokenu z ID Microsoft Entra pro odesílání telemetrie do Application Insights si projděte následující tabulku a určete odpovídající řetězec cílové skupiny pro vaše konkrétní hostitelské prostředí.

Verze cloudu Azure Hodnota cílové skupiny tokenů
Veřejný cloud Azure https://monitor.azure.com
Microsoft Azure provozovaný cloudem 21Vianet https://monitor.azure.cn
Azure vlády USA https://monitor.azure.us

Pokud používáte suverénní cloudy, najdete informace o cílové skupině také v připojovacím řetězci. Připojovací řetězec se řídí touto strukturou:

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

Parametr cílové skupiny AADAudience se může lišit v závislosti na vašem konkrétním prostředí.

Řešení problému

Pokyny k řešení potíží najdete v tématu Řešení potíží s ověřováním Microsoft Entra.

Další kroky