Бөлісу құралы:


Проверка подлинности Microsoft Entra для Application Insights.

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

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

Необходимые компоненты

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

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

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

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

  1. Если у вас еще нет удостоверения, создайте его с помощью управляемого удостоверения или субъекта-службы.

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

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

    Примечание.

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

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

Примечание.

Поддержка идентификатора Microsoft Entra в пакете SDK для приложений Аналитика .NET включается начиная с версии 2.18-Beta3.

Пакет SDK .NET для Application Insights поддерживает классы учетных данных, предоставляемые удостоверением Azure.

  • Рекомендуется DefaultAzureCredential для локальной разработки.
  • Убедитесь, что вы прошли проверку подлинности в Visual Studio с ожидаемой учетной записью пользователя Azure. Дополнительные сведения см. в разделе "Проверка подлинности с помощью Visual Studio".
  • Рекомендуется ManagedIdentityCredential использовать управляемые удостоверения, назначенные системой и назначаемые пользователем.
    • Для удостоверений, назначаемых системой, используйте конструктор по умолчанию без параметров.
    • Для назначаемого пользователем укажите идентификатор клиента конструктору.

В следующем примере показано, как вручную создать и настроить TelemetryConfiguration с помощью .NET:

TelemetryConfiguration.Active.ConnectionString = "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://xxxx.applicationinsights.azure.com/";
var credential = new DefaultAzureCredential();
TelemetryConfiguration.Active.SetAzureTokenCredential(credential);

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

Запрос приложения Аналитика с помощью проверки подлинности Microsoft Entra

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

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

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

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

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

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

  4. На вкладке API моей организации найдитеприложение Аналитика и выберите API приложения Аналитика из списка.

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

  6. Выберите поле Data.Read проверка box.

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

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

  1. На странице обзора ресурсов приложения Аналитика выберите элемент управления доступом (IAM).

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

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

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

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

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

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

Используйте маркер в запросах к конечной точке приложения Аналитика:

    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 Аналитика. Существует два 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_uri — это 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 приложения Аналитика в заголовке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 приложения Аналитика поддерживает неявный поток 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 приложения Аналитика для авторизации запросов.

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

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

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

Портал Azure

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

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

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

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

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

    Снимок экрана: вкладка

Политика Azure

Политика Azure для DisableLocalAuth пользователей запрещает возможность создания нового ресурса application Аналитика без этого свойстваtrue. Имя политики — Application Insights components should block non-AAD auth ingestion.

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

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

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

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

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

В следующем примере показан шаблон Azure Resource Manager, который можно использовать для создания ресурса приложения на основе рабочей области Аналитика с 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 для отправки телеметрии в приложение Аналитика см. в следующей таблице, чтобы определить соответствующую строку аудитории для конкретной среды узла.

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

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

InstrumentationKey={profile. Инструментирование}; IngestionEndpoint={ingestionEndpoint}; LiveEndpoint={liveDiagnosticsEndpoint}; AADAudience={aadAudience}

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

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

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

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

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

HTTP/1.1 400 Authentication not supported

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

Примечание.

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

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

HTTP/1.1 401 Authorization required

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

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

HTTP/1.1 403 Unauthorized

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

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

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

Источник событий

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

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

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