使用应用程序身份验证时的 KustoServiceError

KustoServiceError when using application authentication

我在尝试使用 Python 的 Kusto 客户端库设置到 Kusto 的连接器时遇到问题。

我设法使用 with_aad_device_authentication 方法使其工作,方法如下:

KCSB = KustoConnectionStringBuilder.with_aad_device_authentication(KUSTO_CLUSTER)
KCSB.authority_id = AAD_TENANT_ID

client = KustoClient(KCSB)

KUSTO_QUERY = "Table | take 10"
RESPONSE = client.execute(KUSTO_DATABASE, KUSTO_QUERY)

这需要我通过访问网页并输入图书馆提供的代码来进行身份验证。

但是,当我尝试使用 with_aad_application_key_authentication 方法连接到数据库时,它抛出

KustoServiceError: (KustoServiceError(...), [{'error': {'code': 'Forbidden', 'message': 'Caller is not authorized to perform this action', '@type': 'Kusto.DataNode.Exceptions.UnauthorizedDatabaseAccessException' ...

我不明白,因为我已授予我的应用程序以下权限:Azure 数据资源管理器(具有多因素验证)和 Azure 数据资源管理器。

我已经为此苦苦挣扎了一段时间,但我想不出解决办法。有谁知道这里的问题是什么?

可能有两个原因:

1) 您没有授予应用程序对数据库本身的权限。使用 "access control (IAM)" 按钮对 Azure 数据资源管理器资源(我们称之为 'control plane')的权限允许您的应用程序对集群进行管理操作(例如添加和删除数据库),而对数据库的权限本身允许在数据库中进行操作,例如创建表和进行查询(我们称之为 'data plane')。请注意,您还可以通过单击集群边栏选项卡中的 "permissions" 按钮来提供对集群中 所有数据库 的权限。

为了修复它,单击 Azure 门户中的数据库,进入数据库边栏选项卡后,单击 'permissions' 按钮并授予应用程序权限(管理员、用户、查看者等) .请参阅下面的屏幕截图。

2) 您没有正确提供三个必需的数据点中的任何一个(appId、appKey 和 authority id)

这是在特定数据库中添加权限的相关屏幕截图:

添加更多上下文。 授予您的应用程序对 ADX 的委派权限仅允许您的应用程序对 ADX 资源执行用户身份验证,但不会授予应用程序本身对您的特定 ADX 资源的任何角色。

上面的答案指导您如何做到这一点。