使用Azure数据资源管理器(Kusto)的AAD身份验证不适用于通过API进行简单查询

时间:2019-06-05 23:17:51

标签: authentication kusto azure-data-explorer

我正在尝试使用带有Python的API(换句话说就是“无头”脚本)通过API访问Kusto,并希望使用AAD应用程序进行身份验证。我正在专门研究https://github.com/Azure/azure-kusto-python/blob/master/azure-kusto-data/tests/sample.py上的示例代码,该示例代码试图查询集群https://help.kusto.windows.net上的Samples> StormEvents表。我可以在Kusto资源管理器中很好地运行查询,但是在尝试运行示例代码时出现“未授权调用者执行此操作”的消息。

我按照https://kusto.azurewebsites.net/docs/management/access-control/aad.htmlhttps://kusto.azurewebsites.net/docs/management/access-control/how-to-provision-aad-app.html上的说明在Azure门户上创建AAD应用程序并为Azure Data Explorer添加API权限。在代码中,我在client_id字段中具有来自门户的“应用程序(客户端)ID”,在client_secret字段中具有适当的机密。 Authority_id字段设置为72f988bf-86f1-41af-91ab-2d7cd011db47,这是门户网站上显示的内容,以及https://kusto.azurewebsites.net/docs/management/access-control/aad.html#authenticating-with-aad-programmatically上的表格在https://www.analytics.msftcloudes.com/support/directory上接受了应用程序名称(和客户端ID)很好。

因此,代码如下(省略了导入和特定机密):

cluster = "https://help.kusto.windows.net"

client_id = "<omitted>"
client_secret = "<omitted>"
authority_id = "72f988bf-86f1-41af-91ab-2d7cd011db47"

kcsb = KustoConnectionStringBuilder.with_aad_application_key_authentication(
    cluster, client_id, client_secret, authority_id
)

client = KustoClient(kcsb)
db = "Samples"
query = "StormEvents | take 10"
response = client.execute(db, query)

失败输出为:

azure.kusto.data.exceptions.KustoServiceError:((KustoServiceError(...),[{'error':{'code':'Forbidden','message':'呼叫者无权执行此操作' ,'@type':'Kusto.DataNode.Exceptions.UnauthorizedDatabaseAccessException','@message':“主体'AAD应用程序ID =(省略)'未被授权访问数据库'Samples'。”,'@context':{ '时间戳':'2019-06-05T19:39:17.3493255Z','serviceAlias':'HELP','machineName':'KEngine000000','processName':'Kusto.WinSvc.Svc','processId':18832 ,'threadId':25568,'appDomainName':'Kusto.WinSvc.Svc.exe','clientRequestd':'KPC.execute; 9ede2b2d-5fba-478c-ad8f-8306284cf6e9','activityId':'efdb96c9-da46- 4d5f-b739-54661e7002e3','subActivityId':'33f89e2b-2347-447a-abe9-81e586d0e2a0','activityType':'DN-FE-ExecuteQuery','parentActivityId':'438b2bb3-26fb-4f7e-813d-bc8'539 ,'activityStack':'(活动堆栈:CRID = KPC.execute; 9ede2b2d-5fba-478c-ad8f-8306284cf6e9 ARID = efdb96c9-da46-4d5f-b739-54661e7002e3> KD-Query-Client-Exe cuteQueryAsKustoDataStream / 5ddd9239-e742-4edc-ab3e-55d59a1f2c99> P-WCF-Service-ExecuteQueryInternalAsKustoDataStream--IClientServiceCommunicationContract / 438b2bb3-26fb-4f7e-813d-bc8a5c39ce1c> DN-FE-Executeb / e90-3209e3e0-3e9a3e03e03e0e2e03e0e92e0e0e0e0e2e0b0e0e0e2e0b0e0b0e0e0b0e0e0b0e2e0b0b0e0b0b0b0b0b0b0b0bb0fb0fb0fb0fb0f0b0b0b0b0b0b0b0b0b0f0b0bf },'@permanent':True}}])

我还像文档所说的那样在Kusto Explorer中添加了示例集群。

我还缺少什么吗?

1 个答案:

答案 0 :(得分:2)

https://help.kusto.windows.net是ADX群集的URL,它是一种探索性帮助,仅允许AAD用户(而非AAD应用程序)进行交互式访问。

要使用AAD应用程序身份验证运行自动化,您应该在自己的群集/数据库上重定向代码,并在其上为AAD应用程序授予必要的权限(数据库用户/查看者)