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:
- Estar na nuvem pública.
- Que será necessário conhecer:
- A concessão de acesso usando funções internas do Azure requer uma função de Proprietário para o grupo de recursos.
- Entenda os cenários sem suporte.
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:
- Application Insights Java 2.x SDK.
A autenticação do Microsoft Entra está disponível apenas para Application Insights Java Agent maiores ou iguais a 3.2.0. - SDK da Web JavaScript do ApplicationInsights.
- Application Insights OpenCensus Python SDK com Python versão 3.4 e 3.5.
- Instrumentação automática para Python no Serviço de Aplicativo do Azure
- Application Insights Profiler para .NET.
Configurar e habilitar a autenticação baseada em ID do Microsoft Entra
Se você ainda não tiver uma identidade, crie uma usando uma identidade gerenciada ou uma entidade de serviço.
É recomendável usar uma identidade gerenciada:
Configure uma identidade gerenciada para seu serviço do Azure (Máquinas Virtuais ou Serviço de Aplicativo).
Não recomendamos usar uma entidade de serviço:
Para obter mais informações sobre como criar uma entidade de serviço e aplicativo do Microsoft Entra que possa acessar recursos, confira Criar uma entidade de serviço.
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.
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. - Autentique-se 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/"
});
Configuração de variável de ambiente
Use a variável de ambiente APPLICATIONINSIGHTS_AUTHENTICATION_STRING
para permitir que o Application Insights se autentique no Microsoft Entra ID e envie telemetria ao usar autoinstrumentação dos Serviços de Aplicativos do Azure.
- Para identidade atribuída pelo sistema:
Configurações de aplicativo | Valor |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD |
- Para identidade atribuída pelo usuário:
Configurações de aplicativo | Valor |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD;ClientId={Client id of the User-Assigned Identity} |
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.
Na página de visão geral do aplicativo, selecione Permissões de API.
Selecione Adicionar uma permissão.
Na guia APIs que minha organização usa, procure Application Insights e selecione API do Application Insights na lista.
Selecione Permissões delegadas.
Marque a caixa de seleção Dados.Leitura.
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.
Na página de visão geral do recurso do Application Insights, selecione Controle de acesso (IAM).
Selecione Adicionar atribuição de função.
Selecione a função Leitor e, em seguida, Membros.
Na guia Membros, selecione Selecionar membros.
Insira o nome do aplicativo na caixa Selecionar.
Selecione seu aplicativo e escolha Selecionar.
Selecione Examinar + atribuir.
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. A redirect\_uri
é a URL homepage/login
do mesmo aplicativo do 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
No recurso do Application Insights, selecione Propriedades em Configurar no menu à esquerda. Selecione Habilitado (clique para alterar) se a autenticação local estiver habilitada.
Selecione Desabilitado e aplique as alterações.
Depois de desabilitar a autenticação local no seu recurso, você verá as informações correspondentes no painel Visão Geral.
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-Azure Active Directory based 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-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')]"
}
}
}
}
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:
.