我正在尝试在 Azure 数据工厂中构建一个非常基本的数据流,从 blob 存储中提取 JSON 文件,对某些列执行转换,然后存储在 SQL 数据库中。我最初使用托管身份对存储帐户进行身份验证,但在尝试测试与源的连接时收到以下错误:
com.microsoft.dataflow.broker.MissingRequiredPropertyException:
account 是 [myStorageAccountName] 的必需属性。
com.microsoft.dataflow.broker.PropertyNotFoundException:无法
从 [myStorageAccountName] 中提取值 - RunId: xxx
我还在工厂验证输出中看到以下消息:
[MyDataSetName] AzureBlobStorage 不支持 SAS,
MSI,即数据流中的服务主体身份验证。
有了这个,我假设我需要做的就是将我的 Blob 存储链接服务切换到帐户密钥身份验证方法。当我切换到帐户密钥身份验证并选择我的订阅和存储帐户后,在测试连接时出现以下错误:
连接失败 无法连接https://[myBlob].blob.core.windows.net/ https://%5BmyBlob%5D.blob.core.windows.net/:错误消息:
远程服务器返回错误:(403) 禁止。 (错误代码:403,
详细信息:此请求无权执行此操作。,
RequestId: xxxx),请确保
提供的凭证有效。远程服务器返回错误:
(403) Forbidden.StorageExtendedMessage=, 远程服务器返回一个
错误:(403) 禁止。活动编号:
xxx。
我尝试直接从 Azure 中进行选择,并手动输入密钥,但无论哪种方式都会出现相同的错误。需要注意的一件事是存储帐户仅允许访问指定的网络。我尝试连接到另一个公共存储帐户,并且能够正常访问。 ADF 帐户具有存储帐户贡献者角色,我添加了我当前工作地点的 IP 地址以及我在此处找到的 Azure 数据工厂的 IP 范围:https://learn.microsoft.com/en-us/azure/data-factory/azure-integration-runtime-ip-addresses https://learn.microsoft.com/en-us/azure/data-factory/azure-integration-runtime-ip-addresses
另请注意,我目前有大约 5 个复制数据任务与托管身份完美配合,但我需要开始执行更复杂的操作。
这似乎是一个类似的问题无法在 Azure 数据工厂中创建链接服务 https://stackoverflow.com/questions/59959655/unable-to-create-a-linked-service-in-azure-data-factory但我分配的存储帐户贡献者和所有者角色应取代回复中建议的读者角色。我也不确定发帖者使用的是公共存储帐户还是私人存储帐户。
先感谢您。
在最底部上面列出的文章 https://learn.microsoft.com/en-us/azure/data-factory/azure-integration-runtime-ip-addresses关于集成运行时的白名单 IP 范围,Microsoft 表示如下:
连接到Azure存储帐户时,IP网络规则没有
对源自 Azure 集成运行时的请求的影响
与存储帐户相同的区域。欲了解更多详情,请参阅本文 https://learn.microsoft.com/en-us/azure/storage/common/storage-network-security#grant-access-from-an-internet-ip-range.
我与 Microsoft 支持人员讨论了这个问题,问题是白名单公共 IP 地址不适用于同一区域内的资源,因为由于资源位于同一网络上,它们使用私有 IP 而不是公共 IP 相互连接。
有四个选项可以解决原始问题:
- 允许从存储帐户中的防火墙和虚拟网络下的所有网络进行访问(如果您要存储敏感数据,显然这是一个问题)。我测试了这个并且它有效。
- 创建在不同区域运行的新 Azure 托管集成运行时。我也测试了这个。我的 ADF 数据流在 East 区域运行,我创建了一个在 East 2 中运行的运行时,它立即运行。对我来说,这里的问题是,在推送到产品之前,我必须让安全部门对此进行审查,因为我们将通过公共网络发送数据,即使它是加密的等,它仍然不如让两个资源相互通信那么安全同一网络中的其他人。
- 使用单独的活动,例如 Spark 或 SSIS 包等 HDInsight 活动。我确信这会起作用,但 SSIS 的问题是成本,因为我们必须启动 SSIS 数据库,然后支付计算费用。您还需要在管道中执行多个活动,以在执行之前和之后启动和停止 SSIS 管道。而且我不想仅仅为了这个而学习 Spark。
- 最后,我使用的有效解决方案是创建一个新连接,将 Blob 存储替换为数据集的 Data Lakes Gen 2 连接。它就像一个魅力。与 Blob 存储连接不同,Azure Data Lakes Storage Gen 2 支持托管标识:根据这篇文章。 https://learn.microsoft.com/en-us/azure/data-factory/connector-azure-data-lake-storage#managed-identity一般来说,连接类型越具体,功能就越有可能满足特定需求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)