Аутентификация AAD с помощью Azure Data Explorer (Kusto) не работает для простого запроса через API - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь получить доступ к Kusto через API с Python (другими словами, «безголовый» скрипт) и хотел бы использовать приложение AAD для аутентификации. Я специально работаю с примером кода на https://github.com/Azure/azure-kusto-python/blob/master/azure-kusto-data/tests/sample.py,, который пытается запросить таблицу Samples> StormEvents на кластере https://help.kusto.windows.net. Я могу выполнить запрос в проводнике Kusto просто отлично, но я при попытке запустить пример кода «вызывающий абонент не авторизован для выполнения этого действия».

Я следовал инструкциям https://kusto.azurewebsites.net/docs/management/access-control/aad.html и https://kusto.azurewebsites.net/docs/management/access-control/how-to-provision-aad-app.html, чтобы создать приложение AAD на портале Azure и добавить разрешения API для обозревателя данных Azure. В коде у меня есть «Идентификатор приложения (клиента)» с портала в поле client_id и соответствующий секретный ключ в поле client_secret. Поле author_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 просто отлично.

Таким образом, код выглядит следующим образом (без импорта и конкретных секретов):

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 = (опущен)" не авторизован для доступа к базе данных "Samples". "," @context ': { 'timestamp': '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': 'efd-969 4d5f-b739-54661e7002e3 ',' subActivityId ':' 33f89e2b-2347-447a-abe9-81e586d0e2a0 ',' activityType ':' DN-FE-ExecuteQuery ',' parentActivityId ':' 438b2135-b3-bc6ff , 'activityStack': '(Стек активности: CRID = KPC.execute; 9ede2b2d-5fba-478c-ad8f-8306284cf6e9 ARID = efdb96c9-da46-4d5f-b739-54661e7002e3> KD-Query-Client- ExecuteQueryAsKustoDataStream / 5ddd9239-e742-4edc-ab3e-55d59a1f2c99> P-ФОС-Сервис-ExecuteQueryInternalAsKustoDataStream - IClientServiceCommunicationContract / 438b2bb3-26fb-4f7e-813d-bc8a5c39ce1c> DN-FE ExecuteQuery / 33f89e2b-2347-447a-abe9-81e586d0e2a0)» }, '@permanent': True}}])

Я также добавил образец кластера в Kusto Explorer, как говорят документы.

Я все еще что-то упускаю?

1 Ответ

2 голосов
/ 06 июня 2019

https://help.kusto.windows.net - это URL-адрес кластера ADX, который является вспомогательным средством и позволяет только интерактивный доступ пользователям AAD (не приложениям AAD).

для запуска автоматизации с использованием аутентификации приложения AAD вы должны перенаправить свой код в свой собственный кластер / базу данных, для которой вы предоставляете приложению AAD необходимые разрешения (пользователь базы данных / программа просмотра)

...