在 Azure Data Explorer 中创建 Microsoft Entra 应用程序注册

使用Microsoft Entra 应用程序身份验证,用于无需用户在场的应用程序(例如无人参与的服务或计划流)访问 Azure Data Explorer。 如果要使用应用程序(如 Web 应用)连接到Azure Data Explorer数据库,请使用服务主体身份验证进行身份验证。 本文介绍如何创建和注册 Microsoft Entra 服务主体,然后授权其访问 Azure Data Explorer 数据库。

创建 Microsoft Entra 应用程序注册

Microsoft Entra 应用程序身份验证要求创建应用程序并将其注册到Microsoft Entra ID。 在 Microsoft Entra 租户中创建应用程序注册时,会自动创建服务主体。

可以在Azure portal中创建应用注册,也可以以编程方式使用Azure CLI创建。 选择适合你的方案的选项卡。

注册应用

  1. 登录到 Azure portal 并打开 Microsoft Entra ID

  2. 在左侧导航窗格中,转到 “管理”。 选择 App registrations,然后新注册

    显示如何开始新应用注册的屏幕截图。

  3. 输入应用程序的名称,例如“example-app”。

  4. 选择支持的帐户类型,它决定了谁可以使用应用程序。

  5. 在“重定向 URI”下,选择“Web”作为要创建的应用程序类型。 URI 是可选的,本例中将其留空。

    显示如何注册新应用的屏幕截图。

  6. 选择“注册”。

设置身份验证

两种类型的身份验证可用于服务主体:基于密码的身份验证(应用程序机密)和基于证书的身份验证。 以下部分介绍如何对应用程序的凭据使用基于密码的身份验证。 或者可以使用 X509 证书对应用程序进行身份验证。

在本部分中,将复制以下值: 应用程序 ID密钥值。 将这些值粘贴到某个位置(如文本编辑器),以便在步骤 配置数据库的客户端凭据

  1. 浏览到 “概述 ”部分。

  2. 复制 应用程序(客户端)ID目录(租户)ID

    注释

    需要应用程序 ID 和租户 ID 才能授权服务主体访问数据库

  3. 在左侧导航窗格中,转到 “管理”。 选择 “证书和机密 ”和 “新建客户端机密”。

    显示如何开始创建客户端密码的屏幕截图。

  4. 输入说明和到期时间。

  5. 选择 并添加

  6. 复制密钥值。

    注释

    离开此页面时,无法访问键值。

你创建了Microsoft Entra 应用程序和服务主体。

为应用程序配置委托的权限 - 可选

如果应用程序需要使用调用用户的凭据来访问数据库,请为应用程序配置委托权限。 例如,如果要生成 Web API,并且想要使用 调用 API 的用户的凭据进行身份验证。

如果您只需要访问授权的数据资源,可以跳过本部分,继续授予服务主体数据库访问权限

  1. 浏览到应用注册API 权限部分。

  2. 选择“添加权限”。

  3. 选择“我的组织使用的 API”。

  4. 搜索并选择Azure Data Explorer

    截图显示如何添加 Azure Data Explorer API 权限。

  5. 在“委托的权限”中,选择“user_impersonation”选项框。

  6. 选择“添加权限”。

    显示如何通过用户模拟选择委托权限的屏幕截图。

向数据库授予服务主体的访问权限

创建应用程序注册后,向数据库授予相应的服务主体对象访问权限。 以下示例授予查看权限。 对于其他角色,请参阅管理数据库权限

  1. 使用上一步骤中复制的应用程序 ID 和租户 ID 的值。

  2. 在query editor中执行以下命令,将占位符值ApplicationIDTenantID替换为实际值:

    .add database <DatabaseName> viewers ('aadapp=<ApplicationID>;<TenantID>') '<Notes>'
    

    例如:

    .add database Logs viewers ('aadapp=1234abcd-e5f6-g7h8-i9j0-1234kl5678mn;9876abcd-e5f6-g7h8-i9j0-1234kl5678mn') 'App Registration'
    

    最后一个参数是字符串,当查询与数据库关联的角色时,该字符串会显示为注释。

    注释

    创建应用程序注册后,可能需要等待几分钟才能引用它。 如果收到找不到应用程序的错误,请等待并重试。

有关角色的更多信息,请参阅基于角色的访问控制

使用应用程序凭据访问数据库

使用应用程序凭据,通过<客户端库>以编程方式访问您的数据库。

. . .
string applicationClientId = "<myClientID>";
string applicationKey = "<myApplicationKey>";
string authority = "<myApplicationTenantID>";
. . .
var kcsb = new KustoConnectionStringBuilder($"https://{clusterName}.kusto.chinacloudapi.cn/{databaseName}")
    .WithAadApplicationKeyAuthentication(
        applicationClientId,
        applicationKey,
        authority);
var client = KustoClientFactory.CreateCslQueryProvider(kcsb);
var queryResult = client.ExecuteQuery($"{query}");

注释

指定之前创建的应用程序注册(服务主体)的应用程序 ID 和密钥。

有关详细信息,请参阅如何在应用中使用Microsoft身份验证库(MSAL)进行身份验证通过 .NET Core Web 应用使用Azure Key Vault

故障排除

“资源无效”错误

如果您的应用程序对用户或应用程序进行身份验证以进行访问,请为服务应用程序设置委派权限。 声明您的应用程序可以对用户或应用程序进行身份验证,以供访问。 否则,尝试身份验证时将发生错误。 错误消息类似于以下消息:

AADSTS650057: Invalid resource. The client has requested access to a resource which is not listed in the requested permissions in the client's application registration...

请遵循在 为应用程序配置委派权限中的说明。

你的 Microsoft Entra 租户管理员可以制定一种策略,阻止租户用户向应用程序提供同意。 当用户尝试登录你的应用程序时,会出现类似以下错误的情况:

AADSTS65001: The user or administrator has not consented to use the application with ID '<App ID>' named 'App Name'

请联系Microsoft Entra 管理员,为租户中的所有用户授予许可,或为特定应用程序启用用户同意。