你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Application Insights 的 Microsoft Entra 身份验证

Application Insights 现在支持 Microsoft Entra 身份验证。 通过使用 Microsoft Entra ID,可以确保在 Application Insights 资源中仅引入经过身份验证的遥测数据。

使用各种身份验证系统可能既麻烦又有风险,因为很难大规模管理凭据。 你现在可以选择退出本地身份验证,以确保只在资源中引入使用托管标识Microsoft Entra ID 专门进行身份验证的遥测数据。 此功能是增强用于执行关键操作(警报自动缩放)和业务决策的遥测的安全性和可靠性的一个步骤。

注意

本文档介绍了如何使用基于 Microsoft Entra ID 的身份验证将数据引入 Application Insights。 有关查询 Application Insights 中数据的信息,请参阅使用 Microsoft Entra 身份验证查询 Application Insights

先决条件

若要启用经由 Microsoft Entra 身份验证的引入,需要执行以下初步步骤。 你需要:

不支持的方案

不支持将以下软件开发工具包 (SDK) 和功能用于 Microsoft Entra 身份验证引入:

配置和启用基于 Microsoft Entra ID 的身份验证

  1. 如果你还没有标识,请使用托管标识或服务主体创建一个。

  2. 向 Azure 服务分配角色。

    按照分配 Azure 角色中的步骤,将“监视指标发布者”角色从目标 Application Insights 资源添加到发送遥测数据的 Azure 资源。

    注意

    尽管“监视指标发布者”角色名字里有“指标”,但它会将所有遥测数据发布到 Application Insights 资源。

  3. 遵循配置指南,并按照后面的语言进行操作。

注意

版本 2.18-Beta3 开始,包含对 Application Insights .NET SDK 中 Microsoft Entra ID 的支持。

Application Insights .NET SDK 支持 Azure 标识提供的凭据类。

  • 建议使用 DefaultAzureCredential 进行本地开发。
  • 建议使用 ManagedIdentityCredential 处理系统分配和用户分配的托管标识。
    • 对于系统分配的托管标识,使用不带参数的默认构造函数。
    • 对于用户分配的托管标识,请向构造函数提供客户端 ID。

以下示例演示如何使用 .NET 手动创建和配置 TelemetryConfiguration

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

以下示例演示如何使用 .NET Core 配置 TelemetryConfiguration

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 身份验证后,可以选择禁用本地身份验证。 使用此配置可以引入由 Microsoft Entra ID 专门验证的遥测数据,这将影响数据访问(例如通过 API 密钥访问数据)。

可以使用 Azure 门户、Azure Policy 或以编程方式禁用本地身份验证。

Azure 门户

  1. 在 Application Insights 资源的左侧菜单中的“配置”标题下选择“属性”。 如果已启用本地身份验证,请选择“已启用(单击更改)”。

    屏幕截图显示了“配置”部分下的“属性”和“已启用(单击更改)”本地身份验证按钮。

  2. 选择“已禁用”并应用更改。

    显示本地身份验证的屏幕截图,其中有“已启用”/“已禁用”按钮。

  3. 在资源上禁用本地身份验证后,“概述”窗格中将显示相应的信息

    屏幕截图显示了“概述”选项卡,其中突出显示了“已禁用(单击更改)”本地身份验证按钮。

Azure Policy

DisableLocalAuth 的 Azure Policy 拒绝用户在未将此属性设置为 true 的情况下创建新的 Application Insights 资源。 策略名称为 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 Insights 资源上的任何本地身份验证。 设置为 true 时,此属性强制所有访问都必须使用 Microsoft Entra 身份验证。

下面的示例展示了 Azure 资源管理器模板,可用于创建禁用 LocalAuth 的基于工作区的 Application Insights 资源。

{
    "$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 云 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 ID。 正确配置 SDK 后,遥测数据将发送到“v2.1/track”。

接下来,你应该查看 SDK 配置。

需要 HTTP/1.1 401 授权

此错误表示 SDK 已正确配置,但无法获取有效的令牌。 此错误可能表示 Microsoft Entra ID 存在问题。

接下来,需要识别 SDK 日志中的异常或来自 Azure 标识的网络错误。

HTTP/1.1 403 未授权

此错误表示 SDK 使用的凭据没有 Application Insights 资源或订阅的权限。

首先,检查 Application Insights 资源的访问控制。 必须使用具有“监视指标发布者”角色的凭据配置 SDK。

特定于语言的疑难解答

事件源

Application Insights .NET SDK 使用事件源发出错误日志。 若要详细了解如何收集事件源日志,请参阅疑难解答:无数据 - 使用 PerfView 收集日志

如果 SDK 未能获取令牌,则异常消息将记录为 Failed to get AAD Token. Error message:

后续步骤