Autenticação do Microsoft Entra para o Application Insights

O Application Insights agora oferece suporte à autenticação Microsoft Entra. Usando o Microsoft Entra ID, você pode garantir que apenas a telemetria autenticada seja ingerida em seus recursos do Application Insights.

Usar vários sistemas de autenticação pode ser complicado e arriscado porque é difícil gerenciar credenciais em escala. Agora você pode optar por desativar a autenticação local para garantir que apenas a telemetria exclusivamente autenticada usando identidades gerenciadas e o Microsoft Entra ID seja ingerido em seu recurso. Esse recurso é uma etapa para aumentar a segurança e a confiabilidade da telemetria usada para tomar decisões operacionais críticas (alertas e dimensionamento automático) e de negócios.

Pré-requisitos

As etapas preliminares a seguir são necessárias para habilitar a ingestão autenticada do Microsoft Entra. Precisa de:

Cenários não suportados

Os seguintes SDKs (Software Development Kits) e recursos não são suportados para uso com a ingestão autenticada do Microsoft Entra:

Configurar e habilitar a autenticação baseada em ID do Microsoft Entra

  1. Se você ainda não tiver uma identidade, crie uma usando uma identidade gerenciada ou uma entidade de serviço.

    • Recomendamos o uso de uma identidade gerenciada:

      Configure uma identidade gerenciada para seu serviço do Azure (Máquinas Virtuais ou Serviço de Aplicativo).

    • Não recomendamos o uso de uma entidade de serviço:

      Para obter mais informações sobre como criar um aplicativo Microsoft Entra e uma entidade de serviço que possa acessar recursos, consulte Criar uma entidade de serviço.

  2. Atribua a função RBAC (controle de acesso baseado em função) necessária à identidade do Azure, à entidade de serviço ou à conta de usuário do Azure.

    Siga as etapas em Atribuir funções do Azure para adicionar a função Monitoring Metrics Publisher à identidade esperada, entidade de serviço ou conta de usuário do Azure definindo o recurso Application Insights de destino como o escopo da função.

    Nota

    Embora a função Monitoring Metrics Publisher diga "métricas", ela publicará toda a telemetria no recurso do Application Insights.

  3. Siga as orientações de configuração de acordo com o idioma a seguir.

Nota

O suporte para o Microsoft Entra ID no SDK do .NET do Application Insights está incluído a partir da versão 2.18-Beta3.

O SDK do .NET do Application Insights dá suporte às classes de credenciais fornecidas pela Identidade do Azure.

  • Recomendamos para o DefaultAzureCredential desenvolvimento local.
  • Autentique-se no Visual Studio com a conta de usuário esperada do Azure. Para obter mais informações, consulte Autenticar via Visual Studio.
  • Recomendamos ManagedIdentityCredential para identidades gerenciadas atribuídas pelo sistema e pelo usuário.
    • Para system-assigned, use o construtor padrão sem parâmetros.
    • Para o usuário atribuído, forneça o ID do cliente para o construtor.

O exemplo a seguir mostra como criar e configurar TelemetryConfiguration manualmente usando o .NET:

TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);

O exemplo a seguir mostra como configurar TelemetryConfiguration usando o .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/"
});

Configuração da variável de ambiente

Use a variável de ambiente para permitir que o Application Insights se autentique na ID do Microsoft Entra e envie telemetria ao usar a APPLICATIONINSIGHTS_AUTHENTICATION_STRING autoinstrumentação dos Serviços de Aplicativo do Azure.

  • Para a identidade atribuída ao sistema:
Definição da aplicação Value
APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AAD
  • Para identidade atribuída pelo usuário:
Definição da aplicação Value
APPLICATIONINSIGHTS_AUTHENTICATION_STRING Authorization=AAD;ClientId={Client id of the User-Assigned Identity}

Consultar o Application Insights usando a autenticação do Microsoft Entra

Você pode enviar uma solicitação de consulta usando o ponto de extremidade do Azure Monitor Application Insights https://api.applicationinsights.io. Para acessar o ponto de extremidade, você deve autenticar por meio do Microsoft Entra ID.

Configurar a autenticação

Para acessar a API, registre um aplicativo cliente com o Microsoft Entra ID e solicite um token.

  1. Registre um aplicativo no Microsoft Entra ID.

  2. Na página de visão geral do aplicativo, selecione Permissões de API.

  3. Selecione Adicionar uma permissão.

  4. Na guia APIs que minha organização usa, procure Application Insights e selecione Application Insights API na lista.

  5. Selecione Permissões delegadas.

  6. Marque a caixa de seleção Data.Read .

  7. Selecione Adicionar permissões.

Agora que seu aplicativo está registrado e tem permissões para usar a API, conceda ao aplicativo acesso ao recurso do Application Insights.

  1. Na página de visão geral dos recursos do Application Insights, selecione Controle de acesso (IAM).

  2. Selecione Adicionar atribuição de função.

  3. Selecione a função Leitor e, em seguida, selecione Membros.

  4. Na guia Membros, escolha Selecionar membros.

  5. Digite o nome do seu aplicativo na caixa Selecionar .

  6. Selecione seu aplicativo e escolha Selecionar.

  7. Selecione Rever + atribuir.

  8. Depois de concluir a configuração e as permissões do Ative Directory, solicite um token de autorização.

Nota

Para este exemplo, aplicamos a função Leitor. Essa função é uma das muitas funções internas e pode incluir mais permissões do que você precisa. Funções e permissões mais granulares podem ser criadas.

Solicitar um token de autorização

Antes de começar, certifique-se de que tem todos os valores necessários para fazer o pedido com sucesso. Todos os pedidos requerem:

  • Sua ID de locatário do Microsoft Entra.
  • ID do aplicativo do App Insights - Se você estiver usando chaves de API no momento, é o mesmo ID do aplicativo.
  • Sua ID de cliente do Microsoft Entra para o aplicativo.
  • Um segredo do cliente Microsoft Entra para o aplicativo.

A API do Application Insights oferece suporte à autenticação do Microsoft Entra com três fluxos diferentes do Microsoft Entra ID OAuth2 :

  • Credenciais de cliente
  • Código de autorização
  • Implícito

Fluxo de credenciais do cliente

No fluxo de credenciais do cliente, o token é usado com o ponto de extremidade do Application Insights. Uma única solicitação é feita para receber um token usando as credenciais fornecidas para seu aplicativo na etapa anterior quando você registra um aplicativo no Microsoft Entra ID.

Use o ponto de https://api.applicationinsights.io extremidade.

URL do token de credenciais do cliente (solicitação 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>

Uma solicitação bem-sucedida recebe um token de acesso na resposta:

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

Use o token em solicitações para o ponto de extremidade do 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"
    }

Resposta de exemplo:

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

Fluxo de código de autorização

O principal fluxo OAuth2 suportado é através de códigos de autorização. Esse método requer duas solicitações HTTP para adquirir um token com o qual chamar a API do Azure Monitor Application Insights. Há duas URLs, com um ponto de extremidade por solicitação. Os seus formatos são descritos nas secções seguintes.

URL do código de autorização (solicitação 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 uma solicitação é feita para a URL autorizada, o é a client\_id ID do aplicativo do seu aplicativo Microsoft Entra, copiada do menu de propriedades do aplicativo. O redirect\_uri é o homepage/login URL do mesmo aplicativo Microsoft Entra. Quando uma solicitação é bem-sucedida, esse ponto de extremidade redireciona você para a página de entrada fornecida na inscrição com o código de autorização anexado à URL. Veja o seguinte exemplo:

    http://<app-client-id>/?code=AUTHORIZATION_CODE&session_state=STATE_GUID

Neste ponto, você obtém um código de autorização, que agora você usa para solicitar um token de acesso.

URL do token do código de autorização (solicitação 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>

Todos os valores são os mesmos de antes, com algumas adições. O código de autorização é o mesmo código que você recebeu na solicitação anterior após um redirecionamento bem-sucedido. O código é combinado com a chave obtida do aplicativo Microsoft Entra. Se não guardou a chave, pode eliminá-la e criar uma nova a partir do separador teclas do menu da aplicação Microsoft Entra. A resposta é uma cadeia de caracteres JSON que contém o token com o esquema a seguir. Os tipos são indicados para os valores de token.

Exemplo de resposta:

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

A parte do token de acesso dessa resposta é o que você apresenta à API do Application Insights no Authorization: Bearer cabeçalho. Você também pode usar o token de atualização no futuro para adquirir um novo access_token e refresh_token quando o seu ficar obsoleto. Para esta solicitação, o formato e o ponto de extremidade são:

    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>

Exemplo de resposta:

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

Fluxo de código implícito

A API do Application Insights suporta o fluxo implícito OAuth2. Para esse fluxo, apenas uma única solicitação é necessária, mas nenhum token de atualização pode ser adquirido.

URL de autorização de código implícito
    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

Uma solicitação bem-sucedida produz um redirecionamento para seu URI de redirecionamento com o token na URL:

    http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID

Esse access_token serve como o valor do Authorization: Bearer cabeçalho quando passa para a API do Application Insights para autorizar solicitações.

Desativar autenticação local

Depois que a autenticação do Microsoft Entra estiver habilitada, você poderá optar por desabilitar a autenticação local. Essa configuração permite que você ingira telemetria autenticada exclusivamente pelo ID do Microsoft Entra e afeta o acesso aos dados (por exemplo, por meio de chaves de API).

Você pode desabilitar a autenticação local usando o portal do Azure ou a Política do Azure ou programaticamente.

Portal do Azure

  1. No recurso do Application Insights, selecione Propriedades em Configurar no menu à esquerda. Selecione Ativado (clique para alterar) se a autenticação local estiver ativada.

    Captura de ecrã que mostra Propriedades na secção Configurar e no botão de autenticação local Ativado (selecione para alterar).

  2. Selecione Desativado e aplique alterações.

    Captura de ecrã que mostra a autenticação local com o botão Ativado/Desativado.

  3. Depois de desativar a autenticação local no seu recurso, você verá as informações correspondentes no painel Visão geral .

    Captura de tela que mostra a guia Visão geral com o botão de autenticação local Desabilitado (selecione para alterar).

Azure Policy

A Política do Azure para DisableLocalAuth nega aos usuários a capacidade de criar um novo recurso do Application Insights sem essa propriedade definida como true. O nome da política é Application Insights components should block non-Azure Active Directory based ingestion.

Para aplicar esta definição de política à sua subscrição, crie uma nova atribuição de política e atribua a política.

O exemplo a seguir mostra a definição do modelo de política:

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

Capacitação programática

A propriedade DisableLocalAuth é usada para desabilitar qualquer autenticação local em seu recurso do Application Insights. Quando essa propriedade é definida como true, ela impõe que a autenticação do Microsoft Entra deve ser usada para todo o acesso.

O exemplo a seguir mostra o modelo do Azure Resource Manager que você pode usar para criar um recurso do Application Insights baseado em espaço de trabalho com LocalAuth desabilitado.

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

Público do token

Ao desenvolver um cliente personalizado para obter um token de acesso do Microsoft Entra ID para enviar telemetria ao Application Insights, consulte a tabela a seguir para determinar a cadeia de caracteres de audiência apropriada para seu ambiente de host específico.

Versão na nuvem do Azure Valor do público do token
Nuvem pública do Azure https://monitor.azure.com
Microsoft Azure operado pela nuvem 21Vianet https://monitor.azure.cn
Azure US Government nuvem https://monitor.azure.us

Se você estiver usando nuvens soberanas, também poderá encontrar as informações do público na cadeia de conexão. A cadeia de conexão segue esta estrutura:

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

O parâmetro de audiência, AADAudience, pode variar dependendo do seu ambiente específico.

Resolução de Problemas

Esta seção fornece cenários de solução de problemas distintos e etapas que você pode seguir para resolver um problema antes de gerar um tíquete de suporte.

Erros HTTP de ingestão

O serviço de ingestão retorna erros específicos, independentemente do idioma do SDK. O tráfego de rede pode ser coletado usando uma ferramenta como o Fiddler. Você deve filtrar o tráfego para o ponto de extremidade de ingestão definido na cadeia de conexão.

Autenticação HTTP/1.1 400 não suportada

Este erro mostra que o recurso está definido apenas para Microsoft Entra. Você precisa configurar corretamente o SDK porque ele está enviando para a API errada.

Nota

"v2/track" não suporta Microsoft Entra ID. Quando o SDK estiver configurado corretamente, a telemetria será enviada para "v2.1/track".

Em seguida, você deve revisar a configuração do SDK.

HTTP/1.1 401 Autorização necessária

Esse erro indica que o SDK está configurado corretamente, mas não é possível adquirir um token válido. Este erro pode indicar um problema com o Microsoft Entra ID.

Em seguida, você deve identificar exceções nos logs do SDK ou erros de rede da Identidade do Azure.

HTTP/1.1 403 Não autorizado

Esse erro significa que o SDK usa credenciais sem permissão para o recurso ou assinatura do Application Insights.

Primeiro, verifique o controle de acesso do recurso do Application Insights. Você deve configurar o SDK com credenciais que tenham a função Monitoring Metrics Publisher.

Solução de problemas específica do idioma

Origem do evento

O SDK do .NET do Application Insights emite logs de erro usando a fonte de eventos. Para saber mais sobre como coletar logs de origem de eventos, consulte Solução de problemas sem dados - coletar logs com o PerfView.

Se o SDK não conseguir obter um token, a mensagem de exceção será registrada como Failed to get AAD Token. Error message:.

Próximos passos