Проверка подлинности Microsoft Entra для Application Insights.
Application Insights теперь поддерживает проверку подлинности Microsoft Entra. Используя идентификатор Microsoft Entra, вы можете убедиться, что в ресурсах Application Insights выполняется только проверка подлинности телеметрии.
Использование различных систем проверки подлинности может быть обременительным и создавать риски, так как трудно управлять учетными данными в большом масштабе. Теперь вы можете отказаться от локальной проверки подлинности , чтобы обеспечить только проверку подлинности телеметрии с помощью управляемых удостоверений и идентификатора Microsoft Entra в ресурсе. Эта функция является шагом для повышения безопасности и надежности телеметрии, используемой для принятия критически важных операционных (оповещений и автомасштабирования) и бизнес-решений.
Для включения приема с проверкой подлинности Microsoft Entra необходимо выполнить следующие предварительные действия. Вам нужно:
- Будьте в общедоступном облаке.
- Ознакомьтесь со следующими сведениями:
- Для предоставления доступа с помощью встроенных ролей Azure требуется роль владельца в группу ресурсов.
- Изучите неподдерживаемые сценарии.
Следующие пакеты средств разработки программного обеспечения (ПАКЕТЫ SDK) и функции не поддерживаются для использования с проверкой подлинности Microsoft Entra.
- Пакет SDK для Java 2.x Application Insights.
Проверка подлинности Microsoft Entra доступна только для агента Java Application Insights больше или равно 3.2.0. - Веб-пакет SDK Для JavaScript для ApplicationInsights.
- Пакет SDK Python для OpenCensus для Application Insights с Python версий 3.4 и 3.5.
- Автоинструментация для Python в службе приложение Azure
- Application Insights Profiler для .NET.
Если у вас еще нет удостоверения, создайте его с помощью управляемого удостоверения или субъекта-службы.
Рекомендуется использовать управляемое удостоверение:
Настройте управляемое удостоверение для службы Azure (Виртуальные машины или Служба приложений).
Не рекомендуется использовать субъект-службу:
Дополнительные сведения о создании приложения Microsoft Entra и субъекта-службы, доступ к ресурсам см. в статье "Создание субъекта-службы".
Назначьте необходимую роль управления доступом на основе ролей (RBAC) удостоверению Azure, субъекту-службе или учетной записи пользователя Azure.
Выполните действия, описанные в разделе "Назначение ролей Azure", чтобы добавить роль издателя метрик мониторинга в ожидаемый идентификатор, субъект-службу или учетную запись пользователя Azure, задав целевой ресурс Application Insights в качестве области роли.
Примечание
Хотя роль издателя метрик мониторинга говорит "метрики", она будет публиковать все данные телеметрии в ресурс Application Insights.
Следуйте инструкциям по настройке в соответствии с приведенным ниже языком.
Примечание
Поддержка идентификатора 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} |
Запрос можно отправить с помощью конечной точки https://api.applicationinsights.io
Azure Monitor Application Insights. Чтобы получить доступ к конечной точке, необходимо пройти проверку подлинности с помощью идентификатора Microsoft Entra.
Чтобы получить доступ к API, зарегистрируйте клиентское приложение с помощью идентификатора Microsoft Entra и запросите маркер.
Зарегистрируйте приложение в идентификаторе Microsoft Entra.
На странице обзора приложения выберите разрешения API.
Выберите Добавить разрешение.
На вкладке API моей организации найдите Application Insights и выберите API Application Insights из списка.
Выберите Делегированные разрешения.
Установите флажок Data.Read.
Выберите Добавить разрешения.
Теперь, когда приложение зарегистрировано и имеет разрешения на использование API, предоставьте приложению доступ к ресурсу Application Insights.
На странице обзора ресурсов Application Insights выберите элемент управления доступом (IAM).
выберите Добавить назначение ролей.
Выберите роль читателя и выберите "Участники".
На вкладке "Члены" выберите "Выбрать участников".
Введите имя приложения в поле "Выбор ".
Выберите приложение и нажмите кнопку "Выбрать".
Выберите Проверить + назначить.
После завершения установки и разрешений 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
.
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-адреса с одной конечной точкой для каждого запроса. Их форматы описаны в следующих разделах.
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
На этом этапе вы получите код авторизации, который теперь используется для запроса маркера доступа.
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. Для этого потока требуется только один запрос, но не может быть получен маркер обновления.
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 или программно.
В ресурсе Application Insights выберите "Свойства " в разделе "Настройка " в меню слева. Выберите "Включено" (щелкните, чтобы изменить), если включена локальная проверка подлинности.
Щелкните Отключено и примените изменения.
После отключения локальной проверки подлинности на ресурсе вы увидите соответствующие сведения на панели обзора .
Политика 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 может отличаться в зависимости от конкретной среды.
В этом разделе приведены различные сценарии устранения неполадок и действия, которые можно предпринять для устранения проблемы перед вызовом запроса в службу поддержки.
Служба приема возвращает определенные ошибки независимо от языка ПАКЕТА SDK. Сетевой трафик можно собирать с помощью такого средства, как Fiddler. Необходимо отфильтровать трафик к конечной точке приема, заданной в строка подключения.
Эта ошибка показывает, что ресурс задан только для Microsoft Entra. Необходимо правильно настроить пакет SDK, так как он отправляется в неправильный API.
Примечание
"v2/track" не поддерживает идентификатор Microsoft Entra. Если пакет SDK настроен правильно, данные телеметрии будут отправляться в v2.1/track.
Затем необходимо проверить конфигурацию пакета SDK.
Эта ошибка указывает, что пакет SDK настроен правильно, но он не может получить действительный маркер. Эта ошибка может указывать на проблему с идентификатором Microsoft Entra.
Затем необходимо определить исключения в журналах пакета SDK или сетевых ошибках из удостоверений Azure.
Эта ошибка означает, что пакет SDK использует учетные данные без разрешения для ресурса Или подписки Application Insights.
Сначала проверьте управление доступом к ресурсу Application Insights. Необходимо настроить пакет SDK с учетными данными, имеющими роль издателя метрик мониторинга.
Пакет SDK для Application Insights для .NET выдает журналы ошибок с помощью источника событий. Дополнительные сведения о сборе журналов источников событий см. в статье "Устранение неполадок без данных" — сбор журналов с помощью PerfView.
Если пакет SDK не получит маркер, сообщение об исключении регистрируется как Failed to get AAD Token. Error message:
.