Как правильно аутентифицировать Kusto с помощью клиента Python?

Я пытаюсь проверить соединение между моим узлом и обозревателем данных Azure (ADX/ Kusto). Я думаю создать таблицу на Kusto, используя скрипт на python.

Пожалуйста, имейте в виду, что я не очень знаком с этим, поэтому подробные шаги ниже.

Я следую этому краткому руководству по документам Microsoft.

Создать идентификатор приложения и ключ

Использование службы регистрации приложений:

  1. Создать новую регистрацию (называется Kusto Test):

  2. Создайте секреты клиента:

Создать Кусто БД

Из кластера создайте базу данных из пользовательского интерфейса (она называется kusto-test)

авторизация

В кластере ADX> Контроль доступа (IAM) > Добавить назначение роли.

Скрипт Python

from azure.kusto.data.request import KustoClient, KustoConnectionStringBuilder
from azure.kusto.data.exceptions import KustoServiceError
from azure.kusto.data.helpers import dataframe_from_result_table

KUSTO_DATABASE = "kusto-test"
CLUSTER = "https://mynode.myregion.kusto.windows.net"

CLIENT_ID = "KUSTO_TEST_APP_ID" # From image above
CLIENT_SECRET = "KUSTO_TEST_PASS" # From image above

AUTHORITY_ID = "<insert here your tenant id>" #Got from https://login.windows.net/<YourDomain>/.well-known/openid-configuration/

KCSB_DATA = KustoConnectionStringBuilder.with_aad_application_key_authentication(
    CLUSTER, CLIENT_ID, CLIENT_SECRET, AUTHORITY_ID
)


KUSTO_CLIENT = KustoClient(KCSB_DATA)
CREATE_TABLE_COMMAND = ".create table StormEvents (StartTime: datetime, EndTime: datetime, EpisodeId: int, EventId: int, State: string, EventType: string, InjuriesDirect: int, InjuriesIndirect: int, DeathsDirect: int, DeathsIndirect: int, DamageProperty: int, DamageCrops: int, Source: string, BeginLocation: string, EndLocation: string, BeginLat: real, BeginLon: real, EndLat: real, EndLon: real, EpisodeNarrative: string, EventNarrative: string, StormSummary: dynamic)"

RESPONSE = KUSTO_CLIENT.execute_mgmt(KUSTO_DATABASE, CREATE_TABLE_COMMAND)

dataframe_from_result_table(RESPONSE.primary_results[0])

Ожидаемое:

  • Успешно создать таблицу в ADX.

Актуально:

  • Получение ошибки UnauthorizedDatabaseAccessException.
azure.kusto.data.exceptions.KustoServiceError: (KustoServiceError(...), [{u'error': {u'code': u'Forbidden', u'@permanent': True, u'@message': u"Principal '....' is not authorized to access database 'kusto-test'.", ...}, u'message': u'Caller is not authorized to perform this action', u'@type': u'Kusto.DataNode.Exceptions.UnauthorizedDatabaseAccessException'}}])

2 ответа

Добавление владельца на портале Azure "управление доступом" предоставляет только этому объекту разрешение на управление ресурсом (также известное как "плоскость управления") и не применяется к разрешениям в самой базе данных (также известной как "плоскость данных". ').

Чтобы предоставить этому приложению разрешение на работу в плоскости данных, например, для выполнения запросов, создания таблиц и т. Д., Вам необходимо предоставить ему разрешение в соответствующем разделе "Разрешения" базы данных:

Еще одно решение, которое мне нравится больше всего, - это подключение к аутентификации AZ Cli:

      from azure.kusto.data import KustoClient, KustoConnectionStringBuilder
kcsb = KustoConnectionStringBuilder.with_az_cli_authentication(KUSTO_URI)
client = KustoClient(kcsb)

Готов грохотать в 3 строчках кода. Если вы не вошли в систему с учетными данными AD, вам будет предложено сделать это, открыв веб-браузер для входа в систему. В моей ситуации только разработчики программного обеспечения / специалисты по данным должны иметь доступ к Kusto с помощью python. В основном у них есть разрешения, которые уже унаследованы через группу ресурсов.

Другие вопросы по тегам