使用托管标识身份验证,对 Blob 进行排队以进行引入
将 Blob 排队来从你自己的存储帐户引入时,可使用托管标识来替代共享访问签名 (SAS) 和共享密钥身份验证方法。 托管标识是引入数据时更安全的方法,因为它们不需要你与服务共享客户 SAS 令牌或共享密钥。 相反,托管标识会分配给群集,并被授予用于引入数据的存储帐户的读取权限。 你可随时撤销这些权限。
注意
- 此身份验证方法仅适用于驻留在客户拥有的存储帐户中的 Azure Blob 和 Azure Data Lake 文件。 它不适用于使用 Kusto SDK 上传的本地文件。
- 仅支持排队引入。 不支持 Kusto 查询语言中的内联引入和使用 SDK API 实现的直接引入。
为群集分配托管标识
请按照托管标识概述将系统或用户分配的托管标识添加到群集。 如果群集已分配有所需的托管标识,请按照以下步骤复制其对象 ID:
使用已与包含群集的 Azure 订阅关联的帐户登录 Azure 门户。
导航到群集并选择“标识”。
选择相应的标识类型、系统或用户分配,然后复制所需标识的对象 ID。
向托管标识授予权限
在 Azure 门户中,导航到包含要引入的数据的存储帐户。
选择“访问控制”,然后选择“添加”>“添加角色分配”。
授予托管标识“存储 Blob 数据读取者”,或在要使用 DeleteSourceOnSuccess 源选项(对存储帐户的权限)的情况下授予“存储 Blob 数据参与者者”。
注意
授予所有者或参与者权限是不够的,这会导致引入失败。
重要
如果出现网络问题,Azure 存储可能会返回 Download Forbidden
错误。
如果你使用专用链接访问存储帐户,则可能会发生此错误。
在这种情况下,如果权限正确,请验证与存储帐户的连接。
在 Azure 数据资源管理器设置托管标识策略
若要使用托管标识将数据引入群集,请允许对所选托管标识采用 NativeIngestion
使用选项。 原生引入是指使用 SDK 从外部源进行引入的功能。 有关可用 SDK 的详细信息,请参阅客户端库。
可在目标群集的群集或数据库级别定义“使用托管标识”策略。
若要在数据库级别应用策略,请运行以下命令:
.alter-merge database <database name> policy managed_identity "[ { 'ObjectId' : '<managed_identity_id>', 'AllowedUsages' : 'NativeIngestion' }]"
若要在群集级别应用策略,请运行以下命令:
.alter-merge cluster policy managed_identity "[ { 'ObjectId' : '<managed_identity_id>', 'AllowedUsages' : 'NativeIngestion' }]"
将 <managed_identity_id>
替换为所需托管标识的对象 ID。
注意
必须在群集上具有 All Database Admin
权限才能编辑托管标识策略。
使用 Kusto SDK 通过托管标识对 Blob 进行排队以进行引入
使用 Kusto SDK 引入数据时,请将 ;managed_identity={objectId}
追加到未获授权的 Blob URI 上,使用托管标识身份验证生成 Blob URI。 如果使用群集系统分配的托管标识引入数据,可将 ;managed_identity=system
追加到 Blob URI。
重要
必须使用排队引入客户端。 不支持将托管标识用于 Kusto 查询语言中的直接引入或内联引入。
下面是系统标识和用户分配的托管标识的 Blob URI 示例。
- 系统分配:
https://demosa.blob.core.chinacloudapi.cn/test/export.csv;managed_identity=system
- 用户分配:
https://demosa.blob.core.chinacloudapi.cn/test/export.csv;managed_identity=6a5820b9-fdf6-4cc4-81b9-b416b444fd6d
重要
- 使用托管标识通过 C# SDK 引入数据时,必须在
StorageSourceOptions
中提供 Blob 大小。 如果未设置大小,SDK 会尝试通过访问存储帐户来填充 Blob 大小,这会导致失败。 - 大小参数应为原始(未压缩)数据大小,而不是 Blob 大小。
- 如果不知道引入时的大小,则指定值为零 (0)。 该服务将尝试使用托管标识进行身份验证来发现大小。