Поделиться через


Аутентификация Microsoft Entra для Application Insights.

Application Insights теперь поддерживает проверку подлинности Microsoft Entra. Используя идентификатор Microsoft Entra, вы можете убедиться, что в ресурсах Application Insights выполняется только проверка подлинности телеметрии.

Использование различных систем проверки подлинности может быть обременительным и создавать риски, так как трудно управлять учетными данными в большом масштабе. Теперь вы можете отказаться от локальной проверки подлинности чтобы телеметрия, аутентифицированная только с помощью управляемых удостоверений и Microsoft Entra ID, использовалась в вашем ресурсе. Эта функция является шагом для повышения безопасности и надежности телеметрии, используемой для принятия критически важных операционных (оповещений и автомасштабирования) и бизнес-решений.

Предварительные условия

Для активации проверки подлинности при приеме с использованием Microsoft Entra необходимо выполнить следующие предварительные действия. Вам нужно:

Неподдерживаемые сценарии

Следующие пакеты средств разработки программного обеспечения (ПАКЕТЫ SDK) и функции не поддерживаются для использования с проверкой подлинности Microsoft Entra.

Настройка и включение проверки подлинности на основе идентификатора Microsoft Entra

  1. Создайте учетную запись, используя управляемую учетную запись или учетную запись службы, если у вас еще нет учетной записи.

  2. Назначьте необходимую роль управления доступом на основе ролей (RBAC) удостоверению Azure, служебному принципалу или учетной записи пользователя Azure.

    Выполните действия, описанные в разделе "Назначение ролей Azure", чтобы добавить роль издателя метрик мониторинга в ожидаемый идентификатор, субъект-службу или учетную запись пользователя Azure, задав целевой ресурс Application Insights в качестве области роли.

    Примечание.

    Несмотря на то что роль "издатель метрик мониторинга" содержит слово "метрики", она публикует все телеметрические данные в ресурс Application Insights.

  3. Следуйте инструкциям по настройке в соответствии с приведенным ниже языком.

Примечание.

  • Поддержка идентификатора Microsoft Entra в пакете SDK для .NET Application Insights включается начиная с версии 2.18-Beta3.
  • Мы поддерживаем классы учетных данных, предоставляемые удостоверением Azure.
  • Мы рекомендуем DefaultAzureCredential для локальной разработки.
  • Проверка подлинности в Visual Studio с помощью ожидаемой учетной записи пользователя Azure. Дополнительные сведения см. в разделе "Проверка подлинности с помощью Visual Studio".
  • Рекомендуется ManagedIdentityCredential использовать управляемые удостоверения, назначенные системой и назначаемые пользователем.
    • Для объектов, назначаемых системой, используйте конструктор по умолчанию без параметров.
    • Для назначаемого пользователем укажите идентификатор клиента конструктору.
  1. Установите последний пакет Azure.Identity :

    dotnet add package Azure.Identity
    
  2. Укажите нужный класс учетных данных:

    // Create a new ASP.NET Core web application builder.    
    var builder = WebApplication.CreateBuilder(args);
    
    // Add the OpenTelemetry telemetry service to the application.
    // This service will collect and send telemetry data to Azure Monitor.
    builder.Services.AddOpenTelemetry().UseAzureMonitor(options => {
        // Set the Azure Monitor credential to the DefaultAzureCredential.
        // This credential will use the Azure identity of the current user or
        // the service principal that the application is running as to authenticate
        // to Azure Monitor.
        options.Credential = new DefaultAzureCredential();
    });
    
    // Build the ASP.NET Core web application.
    var app = builder.Build();
    
    // Start the ASP.NET Core web application.
    app.Run();
    

Конфигурация переменной среды

Используйте переменную среды APPLICATIONINSIGHTS_AUTHENTICATION_STRING, чтобы Application Insights мог проходить проверку подлинности в идентификатору Microsoft Entra ID и отправлять данные телеметрии при использовании автоинструментации служб приложений Azure App Services.

  • Для назначаемой системой учетной записи:
Параметр приложения Значение
Строка аутентификации ApplicationInsights Authorization=AAD
  • Для назначаемого пользователем удостоверения:
Параметр приложения Значение
Строка аутентификации ApplicationInsights Authorization=AAD;ClientId={Client id of the User-Assigned Identity}

Классический API

В следующем примере показано, как настроить TelemetryConfiguration с помощью .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/"
});

Запрос Application Insights с использованием аутентификации Microsoft Entra

Вы можете отправить запрос, используя конечную точку Azure Monitor Application Insights https://api.applicationinsights.io. Чтобы получить доступ к конечной точке, необходимо пройти проверку подлинности с помощью идентификатора Microsoft Entra.

Настройка проверки подлинности

Чтобы получить доступ к API, зарегистрируйте клиентское приложение с помощью идентификатора Microsoft Entra и запросите маркер.

  1. Зарегистрируйте приложение в идентификаторе Microsoft Entra.

  2. На странице обзора приложения выберите разрешения API.

  3. Выберите Добавить разрешение.

  4. На вкладке API, используемые моей организацией найдите Application Insights и выберите API Application Insights из списка.

  5. Выберите Делегированные разрешения.

  6. Установите флажок Data.Read.

  7. Выберите Добавить разрешения.

Теперь, когда приложение зарегистрировано и имеет разрешения на использование API, предоставьте приложению доступ к ресурсу Application Insights.

  1. На странице обзора вашего ресурса Application Insights выберите Управление доступом (IAM).

  2. выберите Добавить назначение ролей.

  3. Выберите роль читателя и выберите "Участники".

  4. На вкладке "Члены" выберите "Выбрать участников".

  5. Введите имя приложения в поле "Выбор ".

  6. Выберите приложение и нажмите кнопку "Выбрать".

  7. Выберите Проверить + назначить.

  8. После завершения установки и разрешений Active Directory запросите маркер авторизации.

Примечание.

В этом примере мы применили роль читателя. Эта роль является одной из многих встроенных ролей и может включать больше разрешений, чем требуется. Можно создать более детализированные роли и разрешения.

Запрос токена авторизации

Прежде чем начать, убедитесь, что у вас есть все необходимые значения для успешного выполнения запроса. Для всех запросов требуется:

  • Идентификатор клиента Microsoft Entra.
  • Идентификатор приложения App Insights. Если вы используете ключи API, это тот же идентификатор приложения.
  • Идентификатор клиента Microsoft Entra для приложения.
  • Секрет клиента Microsoft Entra для приложения.

API Application Insights поддерживает проверку подлинности Microsoft Entra с тремя различными потоками OAuth2 идентификатора Microsoft.

  • Учетные данные клиента
  • Код авторизации
  • Неявный

Поток учетных данных клиента

В потоке учетных данных клиента токен используется с эндпойнтом Application Insights. Один запрос выполняется для получения токена с использованием учетных данных, предоставленных вашему приложению на предыдущем шаге при регистрации приложения в Microsoft Entra ID.

Используйте конечную точку https://api.applicationinsights.io .

URL-адрес токена клиентских учетных данных (HTTP-запрос 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>

Успешный запрос получает маркер доступа в ответе:

    {
        token_type": "Bearer",
        "expires_in": "86399",
        "ext_expires_in": "86399",
        "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax"
    }

Используйте маркер в запросах к конечной точке 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"
    }

Пример ответа:

  "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"
        ]
      ]
    }
  ]
}

Поток кода авторизации

Основной поддерживаемый поток OAuth2 — через коды авторизации. Для этого метода требуется два HTTP-запроса для получения маркера, с помощью которого необходимо вызвать API Azure Monitor Application Insights. Существует два URL-адреса с одной конечной точкой для каждого запроса. Их форматы описаны в следующих разделах.

URL-адрес кода авторизации (запрос 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

Когда запрос выполняется по авторизованному URL-адресу, client\_id это идентификатор приложения из приложения Microsoft Entra, скопированный из меню свойств приложения. Это redirect\_urihomepage/login URL-адрес из того же приложения Microsoft Entra. При успешном выполнении запроса эта конечная точка перенаправляет вас на страницу входа, предоставленную при регистрации с кодом авторизации, добавленным к URL-адресу. См. следующий пример.

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

На этом этапе вы получаете код авторизации, который теперь используется для запроса токена доступа.

URL-адрес токена кода авторизации (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>

Используются те же значения с некоторыми дополнениями. Код авторизации — это тот же код, который вы получили в предыдущем запросе после успешного перенаправления. Код сочетается с ключом, полученным из приложения Microsoft Entra. Если ключ не сохранен, его можно удалить и создать на вкладке "Ключи" в меню приложения Microsoft Entra. Ответ — это строка JSON, содержащая маркер со следующей схемой. Типы указаны для значений токенов.

Пример ответа:

    {
        "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"
    }

Часть маркера доступа этого ответа представляет собой то, что вы представляете API Application Insights в заголовке Authorization: Bearer . Вы также можете использовать маркер обновления в будущем, чтобы получить новый access token и refresh token, когда они становятся устаревшими. Формат и конечная точка для этого запроса:

    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>

Пример ответа:

    {
      "token_type": "Bearer",
      "expires_in": "3600",
      "expires_on": "1460404526",
      "resource": "https://api.applicationinsights.io",
      "access_token": "eyJ0eXAiOiJKV1QiLCJ.....Ax",
      "refresh_token": "eyJ0esdfiJKV1ljhgYF.....Az"
    }

Неявный поток кода

API службы Application Insights поддерживает неявный поток OAuth2. Для этого потока требуется только один запрос, но не может быть получен маркер обновления.

URL-адрес авторизации неявного кода
    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

Успешный запрос приводит к перенаправлению на ваш URI перенаправления с токеном в URL-адресе.

    http://YOUR_REDIRECT_URI/#access_token=YOUR_ACCESS_TOKEN&token_type=Bearer&expires_in=3600&session_state=STATE_GUID

Этот access_token используется в качестве значения Authorization: Bearer заголовка при его передаче в API Application Insights для авторизации запросов.

Отключение локальной проверки подлинности

После включения проверки подлинности Microsoft Entra можно отключить локальную проверку подлинности. Эта конфигурация позволяет получать данные телеметрии, прошедшие проверку подлинности исключительно идентификатором Microsoft Entra и влиять на доступ к данным (например, с помощью ключей API).

Вы можете отключить локальную проверку подлинности с помощью портала Azure, политики Azure или программно.

Портал Azure

  1. В ресурсе Application Insights выберите "Свойства " в разделе "Настройка " в меню слева. Выберите "Включено" (щелкните, чтобы изменить), если включена локальная проверка подлинности.

    Снимок экрана, показывающий свойства в разделе

  2. Щелкните Отключено и примените изменения.

    Снимок экрана: локальная проверка подлинности с кнопкой

  3. После отключения локальной проверки подлинности на ресурсе вы увидите соответствующие сведения на панели обзора .

    Снимок экрана, показывающий вкладку

Политика Azure

Политика Azure для DisableLocalAuth запрещает пользователям создавать новый ресурс Application Insights, если это свойство не установлено на true. Имя политики — Application Insights components should block non-Azure Active Directory based ingestion.

Чтобы применить это определение политики к подписке, создайте назначение политики и назначьте эту политику.

В следующем примере показано определение шаблона политики:

{
    "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')]"
            }
        }
    }
}

Программное включение

DisableLocalAuth Свойство используется для отключения локальной проверки подлинности в ресурсе Application Insights. Если для этого свойства задано trueзначение, оно применяет проверку подлинности Microsoft Entra для всех доступа.

В следующем примере показан шаблон Azure Resource Manager, который можно использовать для создания ресурса Application Insights на основе рабочей области с LocalAuth отключенным.

{
    "$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')]"
            }
    }
 ]
}

Аудитория токена

При разработке пользовательского клиента для получения маркера доступа от Microsoft Entra ID для отправки телеметрии в Application Insights обратитесь к следующей таблице, чтобы определить соответствующую строку аудитории для вашей конкретной среды размещения.

Облачная версия Azure Значение аудитории токена
Общедоступное облако Azure https://monitor.azure.com
Microsoft Azure, управляемый облаком 21Vianet https://monitor.azure.cn
Облако Azure для государственных организаций США https://monitor.azure.us

Если вы используете суверенные облака, вы также можете найти информацию об аудитории в строке подключения. Строка подключения следует этой структуре:

InstrumentationKey={profile.InstrumentationKey}; IngestionEndpoint={ingestionEndpoint}; LiveEndpoint={liveDiagnosticsEndpoint}; AADAudience={aadAudience}

Параметр аудитории AADAudience может отличаться в зависимости от конкретной среды.

Устранение неполадок

В этом разделе приведены различные сценарии устранения неполадок и действия, которые можно предпринять для устранения проблемы перед вызовом запроса в службу поддержки.

Ошибки HTTP при приеме

Служба приема возвращает конкретные ошибки независимо от языка SDK. Сетевой трафик можно собирать с помощью такого средства, как Fiddler. Необходимо отфильтровать трафик к конечной точке приема, указанной в строке подключения.

HTTP/1.1 400 Аутентификация не поддерживается

Эта ошибка показывает, что ресурс задан только для Microsoft Entra. Необходимо правильно настроить пакет SDK, так как он отправляется в неправильный API.

Примечание.

"v2/track" не поддерживает идентификатор Microsoft Entra. При правильной настройке пакета SDK данные телеметрии отправляются в v2.1/track.

Затем необходимо проверить конфигурацию пакета SDK.

HTTP/1.1 401 Требуется авторизация

Эта ошибка указывает, что пакет SDK настроен правильно, но он не может получить действительный маркер. Эта ошибка может указывать на проблему с идентификатором Microsoft Entra.

Затем необходимо определить исключения в журналах пакета SDK или сетевые ошибки от Azure Identity.

HTTP/1.1 403 Запрещён

Эта ошибка означает, что пакет SDK использует учетные данные без разрешения для ресурса Или подписки Application Insights.

Сначала проверьте управление доступом к ресурсу Application Insights. Необходимо настроить пакет SDK с учетными данными, имеющими роль публикации метрик мониторинга.

Устранение неполадок, связанных с языком

Пакет SDK Application Insights для .NET генерирует журналы ошибок, используя источник событий. Дополнительные сведения о сборе журналов источников событий см. в статье "Устранение неполадок без данных" — сбор журналов с помощью PerfView.

Если SDK не удаётся получить токен, сообщение об исключении регистрируется как Failed to get AAD Token. Error message:.

Следующие шаги