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


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

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

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

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

Для включения приема с проверкой подлинности 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.

Пакет 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/"
});

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

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

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

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

Запрос можно отправить с помощью конечной точки https://api.applicationinsights.ioAzure Monitor Application Insights. Чтобы получить доступ к конечной точке, необходимо пройти проверку подлинности с помощью идентификатора 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.

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

Используйте маркер в запросах к конечной точке 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\_uri homepage/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 для отправки телеметрии в Application Insights см. в следующей таблице, чтобы определить соответствующую строку аудитории для конкретной среды узла.

Облачная версия 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 использует учетные данные без разрешения для ресурса Или подписки Application Insights.

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

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

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

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

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

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