我试图在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类似,但是我分配的“存储帐户贡献者”和“所有者”角色应取代答复中建议的“读者”角色。我也不确定发布者是使用公共存储帐户还是私人帐户。
谢谢。
答案 0 :(得分:2)
在关于集成运行时IP范围白名单的article listed above的最底端,Microsoft说:
连接到Azure存储帐户时,IP网络规则没有 对源自Azure集成运行时中的请求的影响 与存储帐户相同的区域。有关更多详细信息,请参阅 this article。
我曾就此与Microsoft支持部门联系过,问题是白名单公用IP地址不适用于同一区域内的资源,因为由于资源位于同一网络上,因此它们使用私有IP而不是公共IP相互连接
有四个选项可以解决原始问题:
答案 1 :(得分:1)
这就是您现在所面临的:
从描述中我们知道这是存储连接错误。我也将贡献者角色设置为数据工厂,但仍然遇到问题。
问题来自存储帐户的网络和防火墙。请检查一下。
确保已添加客户端ID和“受信任的Microsoft服务”例外。
看看这个文档:
然后,转到您的adf,选择以下选项:
那之后应该没事的。