Authentification Microsoft Entra pour Application Insights
Application Insights prend désormais en charge l’authentification Microsoft Entra. À l’aide de Microsoft Entra ID, vous pouvez désormais vous assurer que seules les données de télémétrie authentifiées sont ingérées dans les ressources de vos Application Insights.
L’utilisation de différents systèmes d’authentification peut être fastidieuse et risquée, car il est difficile de gérer des informations d’identification à grande échelle. Vous pouvez maintenant choisir de ne pas utiliser l'authentification locale pour vous assurer que seule la télémétrie exclusivement authentifiée à l’aide des identités managées et de Microsoft Entra ID est ingérée dans votre ressource. Cette fonctionnalité est une étape permettant d’améliorer la sécurité et la fiabilité des données de télémétrie utilisées pour prendre les décisions opérationnelles critiques (alertes et mise à l’échelle automatique) et des décisions métier.
Prérequis
Les étapes préliminaires suivantes permettent d’active l’ingestion authentifiée Microsoft Entra. Vous devez :
- Être dans le cloud public.
- Familiarisez-vous avec :
- L’octroi d’un accès à l’aide de rôles intégrés Azure nécessite d’avoir un rôle Propriétaire au groupe de ressources.
- Comprenez les scénarios non pris en charge.
Scénarios non pris en charge
Les kits de développement logiciel suivants (SDK) et les fonctionnalités ne sont pas pris en charge pour une utilisation avec l’ingestion authentifiée de Microsoft Entra :
- SDK Application Insights Java 2.x.
L'authentification Microsoft Entra est uniquement disponible à partir de la version 3.2.0 d’Application Insights Java Agent. - SDK web JavaScript ApplicationInsights.
- Application Insights OpenCensus Python SDK avec Python version 3.4 et 3.5.
- Surveillance sans code/instrumentation automatique activée par défaut (pour les langues) pour Azure App Service, Machines Virtuelles Microsoft Azure/Microsoft Azure Virtual Machine Scale Sets et Azure Functions.
- Profiler.
Configurer et activer l’authentification basée sur Microsoft Entra ID
Si vous n’avez pas encore d’identité, créez-en une à l’aide d’une identité managée ou d’un principal de service.
Nous vous recommandons d’utiliser une identité managée :
Configurez une identité managée pour votre service Azure (Machines Virtuelles ou App Service).
Nous vous déconseillons d’utiliser un principal de service :
Pour plus d'informations sur la création d'une application et d’un principal de service Microsoft Entra pouvant accéder aux ressources, voir Créer un principal de service.
Attribuez le rôle de contrôle d’accès en fonction du rôle (RBAC) requis à l’identité Azure, au principal de service ou au compte d’utilisateur Azure.
Suivez les étapes de Attribuer des rôles Azure pour ajouter le rôle Serveur de publication des métriques de surveillance au compte d’utilisateur d’identité, de principal de service ou d’utilisateur Azure attendu en définissant la ressource Application Insights cible comme étendue de rôle.
Remarque
Bien que le rôle Éditeur des métriques de surveillance indique « mesures », il publie toutes les données de télémétrie dans la ressource Application Insights.
Suivez les instructions de configuration conformément à la langue qui suit.
Remarque
La prise en charge de Microsoft Entra ID dans le kit de développement logiciel (SDK) Application Insights .NET est incluse à partir de la version 2.18-Beta3.
Application Insights SDK .net prend en charge les classes d’informations d’identification fournies par l' identité Azure.
- Nous vous recommandons
DefaultAzureCredential
pour le développement local. - Authentifiez-vous sur Visual Studio avec le compte d’utilisateur Azure attendu. Pour plus d’informations, consultez Authentifier via Visual Studio.
- Nous vous recommandons
ManagedIdentityCredential
pour les identités managées attribuées par le système et par l'utilisateur.- Pour l’affectation par le système, utilisez le constructeur par défaut sans paramètres.
- Pour la valeur assignée à l’utilisateur, fournissez l’ID client au constructeur.
L’exemple suivant montre comment créer et configurer TelemetryConfiguration
manuellement à l’aide de .NET :
TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);
L’exemple suivant montre comment configurer TelemetryConfiguration
à l’aide de .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/"
});
Interroger Application Insights à l’aide de l’authentification Microsoft Entra
Vous pouvez soumettre une demande de requête en utilisant le point de terminaison Azure Monitor Application Insights https://api.applicationinsights.io
. Pour accéder au point de terminaison, vous devez vous authentifier par le biais de Microsoft Entra ID.
Configurer l’authentification
Pour accéder à l’API, vous inscrivez une application cliente avec Microsoft Entra ID et demandez un jeton.
Dans la page de présentation de l’application, sélectionnez Autorisations API.
Sélectionnez Ajouter une autorisation.
Sous l’onglet API utilisées par mon organisation, recherchez Application Insights, puis sélectionnez API Application Insights dans la liste.
Sélectionnez Autorisations déléguées.
Cochez la case Data.Read.
Sélectionnez Ajouter des autorisations.
Maintenant que votre application est inscrite et autorisée à utiliser l’API, accordez-lui l’accès à votre ressource Application Insights.
Dans la page de présentation de votre Ressource Application Insights, sélectionnez Contrôle d’accès (IAM).
Sélectionnez Ajouter une attribution de rôle.
Sélectionnez le rôle Lecteur, puis sélectionnez Membres.
Dans l’onglet Membres, sélectionnez Sélectionner des membres.
Entrez le nom de votre application dans la zone Sélectionner.
Sélectionnez votre application, puis choisissez Sélectionner.
Sélectionnez Vérifier + attribuer.
Après avoir configuré Active Directory et accordé les autorisations, demandez un jeton d’autorisation.
Notes
Pour cet exemple, nous avons appliqué le rôle Lecteur. Ce rôle est l’un des nombreux rôles intégrés et pourrait inclure des autorisations dont vous n’avez pas besoin. Des rôles et des autorisations plus précis peuvent être créés.
Demander un jeton d’autorisation
Avant de commencer, vérifiez que vous disposez de toutes les valeurs requises pour que la requête aboutisse. Toutes les requêtes nécessitent :
- Votre ID de locataire Microsoft Entra.
- Votre ID d’application Application Insights – Si vous utilisez actuellement des clés API, il s’agit du même ID d’application.
- Votre ID client Microsoft Entra pour l’application.
- Une clé secrète client Microsoft Entra pour l’application.
L’API Application Insights prend en charge l’authentification Microsoft Entra avec trois flux OAuth2 Microsoft Entra ID différents :
- Informations d'identification du client
- Code d’autorisation.
- Implicite
Flux des informations d’identification du client
Dans le flux d’informations d’identification du client, le jeton est utilisé avec le point de terminaison Application Insights. Une seule requête est effectuée pour recevoir un jeton, avec les informations d’identification fournies pour votre application à l’étape précédente lorsque vous inscrivez une application dans Microsoft Entra ID.
Utilisez le point de terminaison https://api.applicationinsights.io
.
URL du jeton d’informations d’identification du client (requête 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>
Une demande qui aboutit reçoit un jeton d’accès dans la réponse :
{
token_type": "Bearer",
"expires_in": "86399",
"ext_expires_in": "86399",
"access_token": ""eyJ0eXAiOiJKV1QiLCJ.....Ax"
}
Utilisez le jeton dans les demandes adressées au point de terminaison 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"
}
Exemple de réponse :
"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"
]
]
}
]
}
Flux du code d’autorisation
Le flux OAuth2 principal pris en charge est celui qui fait appel à des codes d’autorisation. Avec cette méthode, l’acquisition d’un jeton avec lequel appeler l’API Azure Monitor Application Insights nécessite deux requêtes HTTP. Il y a deux URL, avec un point de terminaison par requête. Ces formats sont décrits dans les sections suivantes.
URL du code d’autorisation (requête 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
Lorsqu’une requête est adressée à l’URL d’autorisation, client\_id
est l’ID d’application de votre application Microsoft Entra, copié depuis le menu des propriétés de l’application. redirect\_uri
est l’URL homepage/login
de la même application Microsoft Entra. Quand une demande aboutit, ce point de terminaison vous redirige vers la page de connexion que vous avez fournie à l’inscription avec le code d’autorisation ajouté à l’URL. Voir l’exemple suivant :
http://<app-client-id>/?code=AUTHORIZATION_CODE&session_state=STATE_GUID
Vous obtenez alors un code d'autorisation, que vous utilisez pour demander un jeton d'accès.
URL du jeton de code d’autorisation (requête 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>
Toutes les valeurs sont les mêmes qu’avant, avec quelques ajouts. Le code d’autorisation est le même que celui que vous avez reçu dans la requête précédente après une redirection réussie. Le code est combiné à la clé obtenue à partir de l’application Microsoft Entra. Si vous n’avez pas enregistré la clé, vous pouvez la supprimer, puis en créer une depuis l’onglet Clés du menu de l’application Microsoft Entra. La réponse est une chaîne JSON qui contient le jeton avec le schéma suivant. Les types sont indiqués pour les valeurs de jeton.
Exemple de réponse :
{
"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"
}
C’est la partie jeton d’accès de cette réponse que vous présentez à l’API Application Insights dans l’en-tête Authorization: Bearer
. Vous pouvez également utiliser le jeton d’actualisation à l’avenir pour acquérir un nouveau jeton d’accès (access_token) et un nouveau jeton d’actualisation (refresh_token) quand les vôtres sont périmés. Pour cette requête, le format et le point de terminaison sont les suivants :
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>
Exemple de réponse :
{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1460404526",
"resource": "https://api.applicationinsights.io",
"access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
"refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az"
}
Flux de code implicite
L’API Application Insights prend en charge le flux implicite OAuth2. Pour ce processus, une seule requête est requise, mais aucun jeton d’actualisation ne peut être acquis.
URL d’autorisation de code implicite
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
Une requête qui aboutit produit une redirection vers votre URI de redirection avec le jeton dans l’URL :
http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID
Ce jeton d’accès (access_token) peut être utilisé comme valeur d’en-tête Authorization: Bearer
lorsqu’il est transmis à l’API Application Insights pour autoriser les demandes.
Désactiver l’authentification locale
Une fois l’authentification Microsoft Entra activée, vous pouvez choisir de désactiver l’authentification locale. Cette configuration vous permet d’ingérer des données de télémétrie exclusivement authentifiées par Microsoft Entra ID et affecte l’accès aux données (par exemple, via des clés API).
Vous pouvez désactiver l’authentification locale à l’aide du Portail Azure, Azure Policy ou par programmation.
Portail Azure
À partir de votre ressource Application Insights, sélectionnez Propriétés sous le titre Configurer dans le menu de gauche. Sélectionnez Activé (cliquez pour modifier) si l'authentification locale est activée.
Sélectionnez Désactivé et appliquez les modifications.
Après avoir désactivé l’authentification locale sur votre ressource, les informations correspondantes s’affichent dans le volet Vue d’ensemble .
Azure Policy
Azure Policy pour DisableLocalAuth
empêche les utilisateurs de créer une ressource Application Insights sans définir cette propriété sur true
. Le nom de la stratégie est Application Insights components should block non-AAD auth ingestion
.
Pour appliquer cette définition de stratégie à votre abonnement, créez une nouvelle affectation de stratégie, puis affectez la stratégie.
L’exemple suivant montre la définition du modèle de stratégie :
{
"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')]"
}
}
}
}
Activation par programmation
La propriété DisableLocalAuth
est utilisée pour désactiver toute authentification locale sur votre ressource Application Insights. Lorsque la valeur est true
, cette propriété impose l’utilisation de l’authentification Microsoft Entra pour tous les accès.
L’exemple suivant montre le modèle Azure Resource Manager que vous pouvez utiliser pour créer une ressource d’Application Insights basée sur un espace de travail avec LocalAuth
désactivé.
{
"$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')]"
}
}
]
}
Audience du jeton
Lorsque vous développez un client personnalisé pour obtenir un jeton d’accès auprès de Microsoft Entra ID dans le but d’envoyer des données de télémétrie à Application Insights, reportez-vous au tableau suivant pour déterminer la chaîne d’audience appropriée pour votre environnement hôte particulier.
Version cloud Azure | Valeur d’audience du jeton |
---|---|
Cloud public Azure | https://monitor.azure.com |
Cloud Microsoft Azure géré par 21Vianet | https://monitor.azure.cn |
Cloud Azure US Government | https://monitor.azure.us |
Si vous utilisez des clouds souverains, vous trouverez également les informations d’audience dans la chaîne de connexion. La chaîne de connexion suit cette structure :
InstrumentationKey={profile.InstrumentationKey};IngestionEndpoint={ingestionEndpoint};LiveEndpoint={liveDiagnosticsEndpoint};AADAudience={aadAudience}
Le paramètre d’audience, AADAudience, peut varier en fonction de votre environnement spécifique.
Dépannage
Cette section fournit des scénarios de résolution des problèmes distincts et des étapes que vous pouvez entreprendre pour résoudre les problèmes avant de générer un ticket de support.
Erreurs HTTP d’ingestion
Le service d'ingestion renvoie des erreurs spécifiques, quelle que soit la langue du SDK. Le trafic réseau peut être collecté à l’aide d’un outil comme Fiddler. Filtrez le trafic destiné au point de terminaison d’ingestion défini dans la chaîne de connexion.
Authentification HTTP/1.1 400 non prise en charge
Cette erreur indique que la ressource est définie pour Microsoft Entra-seulement. Vous devez configurer correctement le Kit de développement logiciel (SDK), car il envoie à l’API incorrecte.
Remarque
« v2/track » ne prend pas en charge Microsoft Entra ID. Lorsque le SDK est correctement configuré, la télémétrie sera envoyée à "v2.1/track".
Ensuite, vous devriez passer en revue la configuration du kit de développement (SDK).
HTTP/1.1 401 Autorisation requise
Cette erreur indique que le kit SDK est correctement configuré, mais qu’il ne parvient pas à acquérir de jeton valide. Cette erreur peut indiquer un problème avec Microsoft Entra ID.
Ensuite, vous devriez identifier les exceptions dans les journaux du kit SDK ou les erreurs réseau provenant de l’identité Azure.
HTTP/1.1 403 Non autorisé
Cette erreur signifie que le Kit de développement logiciel (SDK) utilise des informations d’identification sans autorisation pour la ressource ou l’abonnement Application Insights.
Tout d’abord, vérifiez le contrôle d’accès de la ressource Application Insights. Vous devez configurer le Kit de développement logiciel (SDK) avec les informations d’identification qui ont le rôle Serveur de publication des métriques de surveillance.
Résolution des problèmes propres à la langue
Source de l'événement
Le kit SDK .NET Application Insights émet des journaux d’erreurs à l’aide de la source de l’événement. Pour en savoir plus sur la collecte des journaux des sources d’événements, consultez la section Dépannage des journaux de collecte de données avec PerfView.
Si le kit SDK ne parvient pas à obtenir de jeton, le message d’exception est enregistré Failed to get AAD Token. Error message:
.
Étapes suivantes
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour