Как я могу пройти аутентификацию с помощью ADXProxy, используя аутентификацию по ключу приложения?

Я пытаюсь получить доступ к ресурсу Azure Application Insights через Redash, используя функцию ADXProxy (предварительная версия).

Я создал регистрацию приложения в Azure, и у меня есть проверочный код Python, который может успешно получить доступ к моему ресурсу Application Insights и выполнить запрос Kusto (traces | take 1) с использованием токена приложения:

import azure.kusto
import azure.kusto.data.request
import msal

cluster = 'https://ade.applicationinsights.io/subscriptions/<MY_SUBSCRIPTION>/resourcegroups/<MY_RESOURCE_GROUP>/providers/microsoft.insights/components/<MY_APP_INSIGHTS_RESOURCE>'
app_id = '<MY_APP_ID>'
app_key = '<MY_SECRET>'
authority_id = '<MY_AAD_SUBSCRIPTION_ID>'

def run():

    app = msal.ConfidentialClientApplication(
        client_id=app_id, 
        client_credential=app_key, 
        authority='https://login.microsoftonline.com/<MY_AAD_SUBSCRIPTION_ID>')

    token = app.acquire_token_for_client(['https://help.kusto.windows.net/.default'])

    kcsb = azure.kusto.data.request.KustoConnectionStringBuilder.with_aad_application_token_authentication(
        connection_string=cluster,
        application_token=token['access_token']
    )

    client = azure.kusto.data.request.KustoClient(kcsb)

    result = client.execute('<MY_APP_INSIGHTS_RESOURCE>', 'traces | take 1')

    for res in result.primary_results:
        print(res)

    return 1

if __name__ == "__main__":
    run()

Однако Redash не поддерживает аутентификацию токена приложения: он использует аутентификацию по ключу приложения, выполняя такой вызов, как:

    kcsb = azure.kusto.data.request.KustoConnectionStringBuilder.with_aad_application_key_authentication(
        connection_string = cluster,
        aad_app_id = app_id,
        app_key = app_key,
        authority_id = '<MY_AAD_SUBSCRIPTION_ID>'
    )

Я не могу успешно подключиться к своему ресурсу App Insights с помощью этого типа потока. Если я заменю этот KustoConnectionStringBuilder в свою программу выше, я получаю исключение, сообщающее мне:

Участник ресурса с именем https://ade.applicationinsights.io не найден в клиенте с именем ‹MY_AAD_SUBSCRIPTION_ID›. Это может произойти, если приложение не было установлено администратором клиента или с согласия какого-либо пользователя в клиенте. Возможно, вы отправили запрос аутентификации не тому клиенту.

Могу ли я что-то сделать в коде или конфигурации портала Azure, чтобы подключить моего «клиента» к ade.applicationinsights.io участнику ресурса и заставить это соединение работать?


person Peter    schedule 26.02.2020    source источник


Ответы (1)


Adxproxy поддерживает только токены, созданные Azure Active Directory (AAD). Маркер должен быть создан для принадлежащего вам кластера обозревателя данных Azure (ADX). Если у вас нет собственного кластера ADX и по какой-либо причине вы хотите получить доступ к своим ресурсам Application Insights через Adxproxy, вы всегда можете пройти аутентификацию на 'https://help.kusto.windows.net 'и используйте этот токен.

person Michael Binshtock    schedule 29.02.2020
comment
Круто, если это единственный тип авторизации, который он принимает, мне просто придется с ним поработать. Я могу создать источник данных Redash, который будет работать с токенами, а не с аутентификацией ключа приложения. - person Peter; 29.02.2020