我正在尝试使用(预览)ADXProxy功能通过Redash访问Azure Application Insights资源。
我已经在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的资源主体。如果租户的管理员未安装该应用程序,或者该租户中的任何用户未同意该应用程序,则可能会发生这种情况。您可能已将身份验证请求发送给错误的租户。
我可以在代码或Azure门户配置中做些什么来将我的“租户”连接到ade.applicationinsights.io
资源主体,并使该连接正常工作?
答案 0 :(得分:1)
Adxproxy仅支持Azure Active Directory(AAD)铸造的令牌。必须为您拥有的Azure数据资源管理器群集(ADX)创建令牌。如果您没有自己的ADX群集,并且出于任何原因想要通过Adxproxy访问Application Insights资源,则始终可以验证为“ https://help.kusto.windows.net”并使用该令牌。