Autenticación de Microsoft Entra para Application Insights
Application Insights ahora admite la autenticación de Microsoft Entra. Mediante Microsoft Entra ID, puede asegurarse de que solo se ingieren los datos de telemetría autenticados en los recursos de Application Insights.
El uso de varios sistemas de autenticación puede ser complicado y suponer un riesgo, ya que es difícil administrar las credenciales a gran escala. Ahora puede optar por excluirse de la autenticación local para asegurarse de que solo la telemetría que se autentica exclusivamente mediante identidades administradas y Microsoft Entra ID se ingiera en el recurso. Esta característica es un paso para mejorar la seguridad y confiabilidad de la telemetría que se usa para realizar operaciones críticas (alertas y escalado automático) y decisiones empresariales.
Requisitos previos
Se requieren los siguientes pasos preliminares para habilitar la ingesta autenticada de Microsoft Entra. Necesita:
- Estar en la nube pública.
- Familiarícese con:
- Conceder acceso mediante roles integrados de Azure requiere tener un rol propietario para el grupo de recursos.
- Entienda los escenarios no admitidos.
Escenarios no admitidos
Las siguientes características y kits de desarrollo de software (SDK) no son compatibles para su uso con la ingesta autenticada de Microsoft Entra:
- SDK de Java 2.x para Application Insights.
La autenticación de Microsoft Entra solo está disponible para el agente de Java de Application Insights versión 3.2.0 o superior. - SDK web de JavaScript para Application Insights.
- SDK de Python de OpenCensus para Application Insights con Python versión 3.4 y 3.5.
- AutoInstrumentation para Python en Azure App Service
- Profiler.
Configuración y habilitación de la autenticación basada en Microsoft Entra ID
Si aún no tiene una identidad, cree una mediante una identidad administrada o una entidad de servicio.
Se recomienda usar una identidad administrada:
Configure una identidad administrada para el servicio de Azure (Virtual Machines o App Service).
No se recomienda usar una entidad de servicio:
Para más información sobre cómo crear una entidad de servicio y una aplicación de Microsoft Entra que puedan acceder a los recursos, consulte Creación de una entidad de servicio.
Asigne el rol de control de acceso basado en rol (RBAC) necesario a la identidad de Azure, entidad de servicio o cuenta de usuario de Azure.
Siga los pasos descritos en Asignación de roles de Azure para agregar el rol Publicador de métricas de supervisión a la identidad esperada, entidad de servicio o cuenta de usuario de Azure estableciendo el recurso de Application Insights de destino como ámbito de rol.
Nota:
Aunque el rol Supervisión del publicador de métricas indica métricas, publicará toda la telemetría en el recurso de Application Insights.
Siga las instrucciones de configuración de acuerdo con el lenguaje de programación siguiente.
Nota:
La compatibilidad con Microsoft Entra ID en el SDK de .NET de Application Insights se incluye a partir de la versión 2.18-Beta3.
El SDK de .NET de Application Insights admite las clases de credenciales proporcionadas por Azure Identity.
- Se recomienda
DefaultAzureCredential
para el desarrollo local. - Autentíquese en Visual Studio con la cuenta de usuario de Azure esperada. Para más información, consulte Autenticación mediante Visual Studio.
- Se recomienda
ManagedIdentityCredential
para identidades administradas asignadas por el sistema y asignadas por el usuario.- En el caso de las asignadas por el sistema, use el constructor predeterminado sin parámetros.
- En el caso de los asignados por el usuario, proporcione el valor del Id. de cliente al constructor.
En el ejemplo siguiente se muestra cómo crear y configurar TelemetryConfiguration
manualmente mediante .NET:
TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);
En el ejemplo siguiente se muestra cómo configurar TelemetryConfiguration
mediante .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/"
});
Configuración de la variable de entorno
Use la variable de entorno APPLICATIONINSIGHTS_AUTHENTICATION_STRING
para permitir que Application Insights se autentique en Microsoft Entra ID y envíe telemetría al usar la implementación automática de Azure App Services.
- Para la identidad asignada por el sistema:
Configuración de aplicación | Value |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD |
- Para la identidad asignada por el usuario:
Configuración de aplicación | Value |
---|---|
APPLICATIONINSIGHTS_AUTHENTICATION_STRING | Authorization=AAD;ClientId={Client id of the User-Assigned Identity} |
Consulta de Application Insights mediante la autenticación de Microsoft Entra
Puede enviar una solicitud de consulta mediante el punto de conexión de Azure Monitor Application Insights https://api.applicationinsights.io
. Para acceder al punto de conexión, debe autenticarse mediante Microsoft Entra ID.
Configuración de la autenticación
Para acceder a la API, registre una aplicación cliente en Microsoft Entra ID y solicite un token.
En la página de información general de la aplicación, seleccione Permisos de API.
Seleccione Agregar un permiso.
En la pestaña API que usa mi organización, busque Application Insights y seleccione API de Application Insights de la lista.
Seleccione Permisos delegados.
Seleccione la casilla Data.Read.
Seleccione Agregar permisos.
Ahora que la aplicación está registrada y tiene los permisos para usar la API, concédale a la aplicación acceso al recurso de Application Insights.
En la página de información general del Recurso de Application Insights, seleccione Control de acceso (IAM).
Seleccione Agregar asignación de roles.
Seleccione el rol Lector y, a continuación, seleccione Miembros.
En la pestaña Miembros, elija Seleccionar miembros.
Escriba el nombre de la aplicación en el cuadro Seleccionar.
Seleccione la aplicación y elija Seleccionar.
Seleccione Revisar y asignar.
Después de finalizar la configuración de Active Directory y los permisos, solicite un token de autorización.
Nota
En este ejemplo, hemos aplicado el rol Lector. Este rol es uno de los muchos roles integrados y puede incluir más permisos de los que necesita. Se pueden crear roles y permisos más granulares.
Solicitud de un token de autorización
Antes de comenzar, asegúrese de que tiene todos los valores necesarios para realizar la solicitud correctamente. Todas las solicitudes requieren:
- Identificador del inquilino de Microsoft Entra.
- Identificador de aplicación de App Insights: si actualmente usa claves de API, es el mismo identificador de aplicación.
- Identificador del cliente de Microsoft Entra para la aplicación.
- Un secreto de cliente de Microsoft Entra para la aplicación.
La API de Application Insights admite la autenticación de Microsoft Entra con tres flujos distintos de OAuth2 de Microsoft Entra ID:
- Credenciales de cliente
- Código de autorización
- Implícita
Flujo de credenciales de cliente
En el flujo de credenciales del cliente, el token se usa con el punto de conexión de Application Insights. Se realiza una sola solicitud para recibir un token mediante las credenciales proporcionadas para la aplicación en el paso anterior al registrar una aplicación en Microsoft Entra ID.
Use el punto de https://api.applicationinsights.io
conexión.
Dirección URL del token de credenciales de cliente (solicitud 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>
Una solicitud correcta recibe un token de acceso en la respuesta:
{
token_type": "Bearer",
"expires_in": "86399",
"ext_expires_in": "86399",
"access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax"
}
Use el token en las solicitudes al punto de conexión de 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"
}
Respuesta de ejemplo:
"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"
]
]
}
]
}
Flujo del código de autorización
El flujo principal de OAuth2 admitido es a través de códigos de autorización. Este método requiere dos solicitudes HTTP para adquirir un token con el cual llamar a la API de Azure Monitor Application Insights. Hay dos direcciones URL, con un punto de conexión por solicitud. Los formatos se describen en las secciones siguientes.
Dirección URL del código de autorización (solicitud 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
Al enviar una solicitud a la dirección URL autorizada, client\_id
es el id. de la aplicación de Microsoft Entra, copiado del menú de propiedades de la aplicación. El redirect\_uri
es la dirección URL homepage/login
de la misma aplicación de Microsoft Entra. Cuando una solicitud se realiza correctamente, este punto de conexión le redirige a la página de inicio de sesión que proporcionó en el registro con el código de autorización anexado a la dirección URL. Observe el ejemplo siguiente:
http://<app-client-id>/?code=AUTHORIZATION_CODE&session_state=STATE_GUID
En este momento, habrá obtenido un código de autorización, que ahora debe solicitar un token de acceso.
Dirección URL del token de código de autorización (solicitud 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 los valores son los mismos que antes, con algunas adiciones. El código de autorización es el mismo código que recibió en la solicitud anterior después de un redireccionamiento correcto. El código se combina con la clave obtenida de la aplicación de Microsoft Entra. Si no ha guardado la clave, puede eliminarla y crear una nueva desde la pestaña de claves del menú de la aplicación de Microsoft Entra. La respuesta es una cadena JSON que contiene el token con el esquema siguiente. Los tipos se indican para los valores del token.
Ejemplo de respuesta:
{
"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"
}
La parte del token de acceso de esta respuesta es la que se presenta a la API de Application Insights en el encabezado Authorization: Bearer
. También puede usar el token de actualización en el futuro para adquirir un nuevo access_token y refresh_token cuando el suyo esté obsoleto. Para esta solicitud, el formato y el punto de conexión son:
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>
Ejemplo de respuesta:
{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1460404526",
"resource": "https://api.applicationinsights.io",
"access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
"refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az"
}
Flujo de código implícito
La API de Application Insights admite el flujo implícito de OAuth2. Para este flujo, solo se requiere una única solicitud, pero no se puede adquirir ningún token de actualización.
Dirección URL de autorización de código implícita
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
Una solicitud correcta producirá un redireccionamiento al URI de redirección con el token en la dirección URL:
http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID
Este access_token actúa como el valor de encabezado Authorization: Bearer
cuando pasa a la API de Application Insights para autorizar las solicitudes.
Deshabilitación de la autenticación local
Después de habilitar la autenticación de Microsoft Entra, puede optar por deshabilitar la autenticación local. Esta configuración le permite ingerir telemetría autenticada exclusivamente mediante Microsoft Entra ID y afectará al acceso a los datos (por ejemplo, a través de claves de API).
Puede deshabilitar la autenticación local mediante el Azure Portal, Azure Policy o mediante programación.
Azure portal
En el recurso de Application Insights, seleccione Propiedades en Configurar en el menú de la izquierda. Seleccione Habilitado (haga clic para cambiar) si la autenticación local está habilitada.
Seleccione Deshabilitado y aplique los cambios.
Una vez que haya deshabilitado la autenticación local en el recurso, verá la información correspondiente en el panel Información general.
Azure Policy
Azure Policy para DisableLocalAuth
deniega a los usuarios la creación de un recurso de Application Insights si esta propiedad no está configurada en true
. El nombre de la directiva es Application Insights components should block non-Azure Active Directory based ingestion
.
Para aplicar esta definición de directiva a la suscripción, cree una nueva asignación de directiva y asigne la directiva.
En el ejemplo siguiente se muestra la definición de la plantilla de directiva:
{
"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')]"
}
}
}
}
Habilitación mediante programación
La propiedad DisableLocalAuth
se usa para deshabilitar cualquier autenticación local en el recurso de Application Insights. Cuando esta propiedad se establece en true
, exige que la autenticación de Microsoft Entra se use para todos los accesos.
El siguiente ejemplo muestra una plantilla de Azure Resource Manager que puede usar para crear un recurso de Application Insights basado en área de trabajo con LocalAuth
deshabilitada.
{
"$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 del token
Al desarrollar un cliente personalizado para que obtenga un token de acceso de Microsoft Entra ID con el fin de enviar telemetría a Application Insights, consulte la tabla siguiente para determinar la cadena de audiencia adecuada para su entorno host concreto.
Versión de la nube de Azure | Valor de audiencia del token |
---|---|
Nube pública de Azure | https://monitor.azure.com |
Microsoft Azure operado por la nube 21Vianet | https://monitor.azure.cn |
Nube de Azure US Government | https://monitor.azure.us |
Si usa nubes soberanas, también puede encontrar la información de audiencia en la cadena de conexión. La cadena de conexión sigue esta estructura:
InstrumentationKey={profile.InstrumentationKey};IngestionEndpoint={ingestionEndpoint};LiveEndpoint={liveDiagnosticsEndpoint};AADAudience={aadAudience}
El parámetro de audiencia, AADAudience, puede variar en función de su entorno específico.
Solución de problemas
En esta sección se proporcionan distintos escenarios de solución de problemas y pasos que puede seguir para resolver cualquier problema antes de generar una incidencia de soporte técnico.
Errores HTTP de ingesta
El servicio de ingesta devolverá errores específicos, independientemente del lenguaje del SDK. El tráfico de red se puede recopilar mediante una herramienta como Fiddler. Debe filtrar el tráfico al punto de conexión de ingesta establecido en la cadena de conexión.
No se admite la autenticación HTTP/1.1 400
Este error muestra que el recurso está establecido solo para Microsoft Entra. Debe configurar correctamente el SDK porque se está enviando a la API incorrecta.
Nota:
"v2/track" no admite la autenticación de Microsoft Entra ID. Cuando el SDK esté configurado correctamente, la telemetría se enviará a "v2.1/track".
Después, revise la configuración del SDK.
Se requiere autorización de HTTP/1.1 401
Este error indica que el SDK se configuró correctamente, pero no pudo adquirir un token válido. Este error podría indicar un problema con Microsoft Entra ID.
Seguidamente, debe identificar las excepciones en los registros del SDK o los errores de red de la identidad de Azure.
HTTP/1.1 403 no autorizado
Este error significa que el SDK usa credenciales sin permiso para el recurso o la suscripción de Application Insights.
Primero, revise el control de acceso del recurso de Application Insights. Debe configurar el SDK con credenciales que tengan el rol Publicador de métricas de supervisión.
Solución de problemas específicos del lenguaje
Origen del evento
El SDK de .NET de Application Insights emite registros de errores mediante el origen del evento. Para obtener más información sobre la recopilación de registros de origen del evento, visite Solución de problemas cuando no hay datos: recopilación de registros con PerfView.
Si el SDK no puede obtener un token, el mensaje de excepción se registra como Failed to get AAD Token. Error message:
.