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

Mik*_*ron 6 azure azure-storage azure-storage-blobs azure-data-factory azure-blob-storage

我正在尝试在 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/:错误消息:远程服务器返回错误:(403) 禁止。(ErrorCode: 403, Detail: This request is not Authorized to perform this operation., RequestId: xxxx),请确保提供的凭据有效。远程服务器返回错误:(403) Forbidden.StorageExtendedMessage=,远程服务器返回错误:(403) Forbidden。活动 ID:xxx。

我试过直接从 Azure 中选择并手动输入密钥,无论哪种方式都得到相同的错误。需要注意的一件事是存储帐户只允许访问指定的网络。我尝试连接到不同的公共存储帐户,并且能够正常访问。ADF 帐户具有存储帐户参与者角色,并且我添加了我当前工作位置的 IP 地址以及我在此处找到的 Azure 数据工厂的 IP 范围:https : //docs.microsoft.com/en-我们/azure/data-factory/azure-integration-runtime-ip-addresses

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

这似乎与无法在 Azure 数据工厂中创建链接服务类似,但我分配的存储帐户参与者和所有者角色应该取代回复中建议的读者角色。我也不确定海报使用的是公共存储帐户还是私人帐户。

先感谢您。

Mik*_*ron 5

在上面列出的有关将集成运行时的 IP 范围列入白名单的文章的最底部,Microsoft 说了以下内容:

连接到 Azure 存储帐户时,IP 网络规则对源自与存储帐户位于同一区域的 Azure 集成运行时的请求没有影响。欲了解更多详情,请参阅 这篇文章

我与 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 支持托管标识。一般来说,连接类型越具体,功能就越有可能满足特定需求。