python 如何验证免费Azure Data Explorer for Ubuntu服务器

kd3sttzy  于 2023-04-28  发布在  Python
关注(0)|答案(2)|浏览(165)

我正在使用免费的Azure集群来使用Azure Data Explorer查询我的数据。我正在运行以下代码将数据上传到Azure集群。当在本地运行时,我可以使用设备登录方法进行身份验证。在这个方法中,它为我提供了一个代码时运行这个脚本,我需要把代码转到URL https://www.microsoft.com/devicelogin并登录到我的帐户,它工作。

import json

from azure.kusto.data.data_format import DataFormat
from azure.kusto.ingest import (
    IngestionProperties,
    QueuedIngestClient
)

from azure.kusto.data import KustoConnectionStringBuilder

cluster = ""
database = ""
table = ""

kcsb = KustoConnectionStringBuilder.with_aad_device_authentication(cluster)

client = QueuedIngestClient(kcsb)

ingestion_props = IngestionProperties(
    database=database,
    table=table,
    data_format=DataFormat.JSON,
    ingestion_mapping_reference= ""
)

def upload_to_azure_cluster(json_data):
    with open("managedDevices.tmp", "w") as file:
        file.write(json.dumps(json_data) + "\n")

    client.ingest_from_file("managedDevices.tmp", ingestion_properties=ingestion_props)

upload_to_azure_cluster({'title' : 'abcd'})

现在我想在我的ubuntu服务器上以后台模式运行这个脚本。当使用以下命令运行此脚本时,它不会提示代码进行登录。它会卡在那里。

nohup python3 azure_upload.py &
mrzz3bfm

mrzz3bfm1#

您应该在Azure AD中创建服务主体,并将其与后台工作进程一起使用。This page显示了多个不同身份验证方式的示例。
例如,基于证书的身份验证:

kcsb = KustoConnectionStringBuilder.with_aad_application_certificate_authentication(cluster, client_id, PEM, thumbprint, authority_id)
zfycwa2u

zfycwa2u2#

现在我想在Ubuntu服务器上以后台模式运行这个脚本。当使用以下命令运行此脚本时,它不会提示代码进行登录。它会卡在那里。
运行脚本Ubuntu服务器(non-interactive server)时,可以使用Azure AD应用程序和客户端密码对连接进行身份验证。
您与Azure Data Explorer的连接似乎已使用**Azure AD device authentication进行身份验证。另一方面,您正在使用的身份验证流是为交互式使用而构建的,使您能够手动输入设备登录机制给出的代码。
您可以按照MS-Document创建一个应用程序进行身份验证。
创建一个具有必要API权限
user_impersation**的应用程序以访问Azure数据资源管理器,并确保授予管理员权限,如下所示。

添加您的应用程序以访问数据库,如下所示:

添加后,您可以在Ubuntu服务器中使用以下代码**.with_aad_application_key_authentication**。

验证码:

import json

from azure.kusto.data.data_format import DataFormat
from azure.kusto.ingest import (
    IngestionProperties,
    QueuedIngestClient
)

from azure.kusto.data import KustoConnectionStringBuilder

cluster = ""
database = ""
table = ""

client_id="your-application-id"
client_secret="your-app-secret" 
authority_id="your-tenant-id"

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

ingestion_props = IngestionProperties(
    database=database,
    table=table,
    data_format=DataFormat.JSON
)

def upload_to_azure_cluster(json_data):
    with open("managedDevices.tmp", "w") as file:
        file.write(json.dumps(json_data) + "\n")

    client.ingest_from_file("managedDevices.tmp", ingestion_properties=ingestion_props)
upload_to_azure_cluster({'title' : 'abcd'})
print("Uploaded successfully")

输出:

Uploaded successfully

相关问题