Partage via


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 :

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 :

Configurer et activer l’authentification basée sur Microsoft Entra ID

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

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

  3. 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.
  • Vérifiez que vous êtes authentifié 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.

  1. Inscrivez une application dans Microsoft Entra ID.

  2. Dans la page de présentation de l’application, sélectionnez Autorisations API.

  3. Sélectionnez Ajouter une autorisation.

  4. Sous l’onglet API utilisées par mon organisation, recherchez Application Insights, puis sélectionnez API Application Insights dans la liste.

  5. Sélectionnez Autorisations déléguées.

  6. Cochez la case Data.Read.

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

  1. Dans la page de présentation de votre Ressource Application Insights, sélectionnez Contrôle d’accès (IAM).

  2. Sélectionnez Ajouter une attribution de rôle.

  3. Sélectionnez le rôle Lecteur, puis sélectionnez Membres.

  4. Dans l’onglet Membres, sélectionnez Sélectionner des membres.

  5. Entrez le nom de votre application dans la zone Sélectionner.

  6. Sélectionnez votre application, puis choisissez Sélectionner.

  7. Sélectionnez Vérifier + attribuer.

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

Lorsque vous adressez une requête à l’URL d’autorisation, l’ID client (client_id) est l’ID d’application de votre application Microsoft Entra, copié depuis le menu des propriétés de l’application. L’URI de redirection (redirect_uri) est l’URL de connexion/page d’accueil 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

  1. À 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.

    Capture d’écran montrant les propriétés sous la section Configurer et le bouton d’authentification locale Activé (sélectionner pour modifier).

  2. Sélectionnez Désactivé et appliquez les modifications.

    Capture d’écran de l’authentification locale avec le bouton activé/désactivé.

  3. Après avoir désactivé l’authentification locale sur votre ressource, les informations correspondantes s’affichent dans le volet Vue d’ensemble .

    Capture d’écran montrant l’onglet Vue d’ensemble avec le bouton d’authentification locale Désactivé (sélectionner pour modifier).

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