Azure数据工厂通过访问密钥连接到Blob存储

时间:2020-05-10 02:35:26

标签: azure azure-storage azure-storage-blobs azure-data-factory azure-blob-storage

我试图在Azure数据工厂中构建一个非常基本的数据流,从blob存储中提取JSON文件,对某些列执行转换,然后存储在SQL数据库中。我最初使用托管身份对存储帐户进行了身份验证,但是在尝试测试与源的连接时出现以下错误:

com.microsoft.dataflow.broker.MissingRequiredPropertyException: 帐户是[myStorageAccountName]的必需属性。 com.microsoft.dataflow.broker.PropertyNotFoundException:无法 从[myStorageAccountName]-RunId:xxx

中提取值

我还在“工厂验证”输出中看到以下消息:

[MyDataSetName] AzureBlobStorage不支持SAS, MSI,或数据流中的服务主体身份验证。

基于此,我假设我要做的就是将Blob存储链接服务切换为帐户密钥身份验证方法。但是,当我切换到“帐户密钥”身份验证并选择我的订阅和存储帐户后,在测试连接时出现以下错误:

连接失败无法连接到 https://[myBlob].blob.core.windows.net/:错误消息: 远程服务器返回错误:(403)禁止。 (错误代码:403, 详细信息:该请求无权执行此操作。 RequestId:xxxx),请确保 提供的凭证有效。远程服务器返回错误: (403)Forbidden.StorageExtendedMessage =,远程服务器返回了 错误:(403)禁止。活动编号: xxx。

我尝试直接从Azure中进行选择,然后手动输入密钥,但两种方法都遇到相同的错误。需要注意的一件事是存储帐户仅允许访问指定的网络。我尝试连接到其他公共存储帐户,并且能够正常访问。 ADF帐户具有“存储帐户贡献者”角色,我添加了当前工作所在的IP地址以及在此处找到的Azure数据工厂的IP范围:https://docs.microsoft.com/en-us/azure/data-factory/azure-integration-runtime-ip-addresses

另外请注意,我目前大约有5个复制数据任务与Managed Identity完美配合,但是我需要开始执行更复杂的操作。

这似乎与Unable to create a linked service in Azure Data Factory类似,但是我分配的“存储帐户贡献者”和“所有者”角色应取代答复中建议的“读者”角色。我也不确定发布者是使用公共存储帐户还是私人帐户。

谢谢。

2 个答案:

答案 0 :(得分:2)

在关于集成运行时IP范围白名单的article listed above的最底端,Microsoft说:

连接到Azure存储帐户时,IP网络规则没有 对源自Azure集成运行时中的请求的影响 与存储帐户相同的区域。有关更多详细信息,请参阅 this article

我曾就此与Microsoft支持部门联系过,问题是白名单公用IP地址不适用于同一区域内的资源,因为由于资源位于同一网络上,因此它们使用私有IP而不是公共IP相互连接

有四个选项可以解决原始问题:

  • 允许从存储帐户的“防火墙”和“虚拟网络”下的所有网络进行访问(显然,如果要存储敏感数据,这是一个问题)。我对此进行了测试,并且有效。
  • 创建一个在不同区域中运行的新的Azure托管集成运行时。我也对此进行了测试。我的ADF数据流在东部区域中运行,我创建了一个在东部2中运行的运行时,它立即起作用。对我来说,这里的问题是,在推向正式生产之前,我必须经过安全审查,因为我们将通过公用网络发送数据,即使数据已加密,等等,它仍然不如让两个资源相互通信那么安全。同一网络中的其他人。
  • 使用单独的活动,例如HDInsight活动(例如Spark)或SSIS包。我敢肯定这是可行的,但是SSIS的问题是成本,因为我们必须启动SSIS数据库然后为计算付费。您还需要在管道中执行多个活动,以在执行之前和之后启动和停止SSIS管道。另外,我不想为此而学习Spark。
  • 最后,我使用的解决方案是创建一个新连接,该连接将Blob存储替换为数据集的Data Lakes Gen 2连接。它像魅力一样运作。与Blob存储连接不同,Azure Data Lakes Storage Gen 2支持per this article.受管身份。通常,连接类型越具体,功能就越有可能满足特定需求。

答案 1 :(得分:1)

这就是您现在所面临的:

enter image description here

从描述中我们知道这是存储连接错误。我也将贡献者角色设置为数据工厂,但仍然遇到问题。

问题来自存储帐户的网络和防火墙。请检查一下。

enter image description here

确保已添加客户端ID和“受信任的Microsoft服务”例外。

看看这个文档:

https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security#trusted-microsoft-services

然后,转到您的adf,选择以下选项:

enter image description here

那之后应该没事的。