Compartilhar via


Autenticação do Microsoft Entra para Application Insights

O Application Insights agora dá suporte à autenticação do Microsoft Entra. Ao usar o Microsoft Entra ID, você pode garantir que somente a telemetria autenticada seja ingerida em seus recursos do Application Insights.

O uso de muitos sistemas de autenticação pode ser trabalhoso e arriscado, pois é difícil gerenciar credenciais em escala. Agora você pode optar por recusar a autenticação local e garantir que apenas a telemetria seja autenticada exclusivamente usando identidades gerenciadas e que o Microsoft Entra ID seja ingerido no seu recurso. Esse recurso é uma etapa para proteger 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 requeridas para habilitar a ingestão autenticada do Microsoft Entra. Você precisa:

Cenários sem suporte

Os seguintes kits de desenvolvimento de software (SDKs) e recursos não têm suporte 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.

  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 Editor de Métricas de Monitoramento à 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.

    Observação

    Embora a função Publicador de Métricas de Monitoramento cite “métricas”, ela publicará toda a telemetria para o recurso de Insights de aplicativo.

  3. Siga as diretrizes de configuração de acordo com o idioma a seguir.

Observação

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

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

  • Recomendamos DefaultAzureCredential para o desenvolvimento local.
  • Verifique se você está autenticado no Visual Studio com a conta de usuário esperada do Azure. Para obter mais informações, consulte Autenticar via Visual Studio.
  • ManagedIdentityCredential é recomendado para identidades gerenciadas atribuídas pelo usuário e atribuídas pelo sistema.
    • Para atribuído pelo sistema, use o construtor padrão sem parâmetros.
    • Para atribuído pelo usuário, 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/"
});

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

Envie uma solicitação de consulta usando o ponto de extremidade do Application Insights do Azure Monitor https://api.applicationinsights.io. Para acessar o ponto de extremidade, é necessário autenticar-se 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 API do Application Insights na lista.

  5. Selecione Permissões delegadas.

  6. Marque a caixa de seleção Dados.Leitura.

  7. Selecione Adicionar Permissões.

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

  1. Na página de visão geral do recurso 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, Membros.

  4. Na guia Membros, selecione Selecionar membros.

  5. Insira o nome do aplicativo na caixa Selecionar.

  6. Selecione seu aplicativo e escolha Selecionar.

  7. Selecione Examinar + atribuir.

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

Observação

Neste 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, verifique se você tem todos os valores necessários para fazer a solicitação com sucesso. Todas as solicitações exigem:

  • Sua ID do locatário do Microsoft Entra.
  • Sua ID de aplicativo do App Insights - Se você estiver usando chaves de API, essa será a mesma ID do aplicativo.
  • Sua ID do cliente do Microsoft Entra para o aplicativo.
  • Um segredo do cliente do Microsoft Entra para o aplicativo.

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

  • Credenciais do cliente
  • Código de Autorização
  • Implícita

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 o aplicativo na etapa anterior ao registrar um aplicativo no Microsoft Entra ID.

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

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

O fluxo principal do OAuth2 com suporte é por meio 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 Application Insights do Azure Monitor. Há duas URLs e um ponto de extremidade por solicitação. Seus formatos são descritos nas seções a seguir.

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

Ao fazer uma solicitação para a URL autorizada, o client_id é a ID do aplicativo do seu aplicativo Microsoft Entra, copiada do menu de propriedades do aplicativo. O redirect_uri é a URL da home page/logon do mesmo aplicativo Microsoft Entra. Quando uma solicitação é bem-sucedida, esse ponto de extremidade o redireciona para a página de logon fornecida na inscrição com o código de autorização acrescentado ao URL. Consulte o seguinte exemplo:

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

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

URL do token de 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 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 você não salvou a chave, poderá excluí-la e criar uma nova na guia de chaves do menu do aplicativo 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 cabeçalho Authorization: Bearer. Você também poderá usar o token de atualização no futuro para adquirir um novo access_token e refresh_token quando o seu ficar obsoleto. Para essa 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 também dá suporte ao fluxo implícito de OAuth2. Para esse fluxo, apenas uma solicitação é necessária, mas nenhum token de atualização poderá 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 produzirá um redirecionamento para o 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 cabeçalho Authorization: Bearer quando passa para a API do Application Insights para autorizar solicitações.

Desabilitar 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 a ingestão der telemetria autenticada exclusivamente pelo Microsoft Entra ID e afetará o acesso a dados (por exemplo, por meio de chaves de API).

Você pode desabilitar a autenticação local usando o portal do Azure, o Azure Policy ou programaticamente.

Portal do Azure

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

    Captura de tela que mostra Propriedades na seção Configurar e o botão Habilitado (selecione para alterar) autenticação local.

  2. Selecione Desabilitado e aplique as alterações.

    Captura de tela que mostra a autenticação local com o botão habilitado/desabilitado.

  3. Depois de desabilitar 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 Autenticação local desativada (selecione para alterar).

Azure Policy

O Azure Policy para DisableLocalAuth impede que um recurso do Application Insights seja criado se essa propriedade não está definida como true. O nome da política é Application Insights components should block non-AAD auth ingestion.

Para aplicar essa política à sua assinatura, crie uma atribuição de política e atribua a política.

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

{
    "properties": {
        "displayName": "Application Insights components should block non-AAD auth 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')]"
            }
        }
    }
}

Habilitação programática

A propriedade DisableLocalAuth é usada para desabilitar qualquer autenticação local em seu recurso do Application Insights. Quando definida como true, essa propriedade impõe que a autenticação do Microsoft Entra precisa 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 workspace Insights com LocalAuth desabilitada.

{
    "$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 com a finalidade de enviar telemetria ao Application Insights, consulte a tabela a seguir para determinar a cadeia de caracteres da audiência apropriada para seu ambiente de host específico.

Versão de nuvem do Azure Valor da audiência do token
Nuvem pública do Azure https://monitor.azure.com
Microsoft Azure operado pela nuvem da 21Vianet https://monitor.azure.cn
Nuvem do governo dos EUA do Azure https://monitor.azure.us

Se você estiver usando nuvens soberanas, também poderá encontrar as informações da audiência 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 público, AADAudience, pode variar dependendo do seu ambiente específico.

Solução de problemas

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

Erros HTTP de ingestão

O serviço de ingestão retorna erros específicos (erros HTTP de ingestão), independentemente da linguagem 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.

Não há suporte para a Autenticação HTTP/1.1 400

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

Observação

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

A seguir, você deve examinar a configuração do SDK.

Autorização HTTP/1.1 401 necessária

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

A seguir, 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 utiliza credenciais sem permissão para o recurso ou subscrição do Application Insights.

Primeiro, verifique o controlo de acesso do recurso Application Insights. Você deve configurar o SDK com credenciais que tenham a função de Publicador de Métricas de Monitoramento.

Solução de problemas específica do idioma

Origem do Evento

O SDK do .NET do Application Insights emite logs de erro usando a origem do evento. Para saber mais sobre como coletar logs de origem do evento, confira Solução de problemas de ausência de 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óximas etapas