我正在尝试将 kusto 查询结果导出到具有托管身份的 azure blob。我按照 copilot 提供的步骤进行操作,并在 kusto 中启用了系统托管身份,然后将其分配为我的存储帐户的存储 Blob 数据贡献者角色。我还使用 'AllowedUsages': 'All' 设置托管身份策略。并授予托管标识数据库查看者权限。但是,当在 kusto 查询中运行导出命令时,我收到错误:export_to_blob:此流程禁用了托管身份验证。
.将异步导出为 json (h@https://.blob.core.windows.net//;management_identity=system) <| YourKustoQuery
根据文档,
模拟、SAS 令牌、Microsoft Entra 访问令牌和存储帐户访问密钥,仅支持这些作为
云存储的身份验证和授权。.export
这就是您收到上述错误的原因,因为不支持导出到云存储的托管身份。
如果您有访问SAS或存储帐户访问密钥,您可以使用它来实现您的要求。
使用SAS:
.export
async to json (
h@"https://<storage_account_name>.blob.core.windows.net/<container_name>/test.json?<SAS_of_container>"
)
<|
mytable1
使用存储帐户访问密钥:
.export
async to json (
h@"https://<storage_account_name>.blob.core.windows.net/<container_name>/test.json;<access_key>"
)
<|
mytable1
如果您只想使用系统管理身份来实现您的要求,您可以使用外部表。
首先将 AllDatabaseadmin 权限分配给您的主体 ID。这是更改托管身份策略所必需的。
现在,更改数据库管理身份策略,如下所示。
.alter-merge database <Database_name> policy managed_identity ```[
{
"ObjectId": "system",
"AllowedUsages": "All"
}
]```
然后,使用托管标识创建外部表,如下所示。
.create external table <external_table_name> (x:int, y:string) kind=blob dataformat=json
(
h@'https://<storage_account_name>.blob.core.windows.net/<container>/path/<filename>.json;managed_identity=system'
)
现在,将 Kusto 表导出到此外部表。
.export to table <external_table_name> <| mytable1;
Blob 中的结果 JSON 文件: