执行Azure Batch作业时访问被拒绝

Azure 存储帐户是Azure Batch帐户存储资源文件、应用程序包和输出文件所必需的依赖组件。 在许多情况下,将 Azure 存储帐户与防火墙配合使用,以增强其安全性。 但是,使用防火墙的 Azure 存储帐户在执行Azure Batch作业时可能会导致错误。 本文提供此类问题的解决方案。

症状

执行Azure Batch作业时,可能会遇到与关联的 Azure 存储帐户相关的错误。

下面是错误示例:

类别:UserError
代码:ResourceContainerAccessDenied
消息:拒绝访问指定的 Azure 博客容器 ()

原因

创建Azure Batch池时,将预配新的虚拟机 (Batch 节点) 。 如果未将静态公共 IP 地址分配给 Batch 池,则会分配随机公共 IP 地址。 每当将节点数调整为 0 并再次调整大小时,这些新 Batch 节点的公共 IP 地址都会更改。 因此,如果关联的存储帐户配置了防火墙,则很难管理防火墙的允许列表。

如果存储帐户和 Batch 池位于同一区域,则无论 Batch 池是否具有静态公共 IP 地址,来自 Batch 节点的出站流量将始终通过 Azure 主干 Internet (专用 IP 地址) 。 不允许存储防火墙在允许列表中添加专用 IP 地址,这将导致到存储帐户的流量被拒绝。

解决方案

若要解决此问题,请根据方案管理 Batch 池和存储帐户配置。

注意

如果需要上传应用程序包,则以下解决方案均不起作用。 存储帐户不得配置任何防火墙。 有关详细信息,请参阅 链接存储帐户

方案 1:Batch 池和存储帐户位于同一区域,Batch 池具有虚拟网络

  1. 从 Azure 门户 >Batch 帐户>>属性中检查“网络配置”下的子网信息。 记下并记下信息。

    Azure Batch池子网信息的屏幕截图。

  2. 导航到存储帐户,然后选择“ 网络”。 在“防火墙和虚拟网络”设置中,选择“从所选虚拟网络和 IP 地址启用公用网络访问”。 在防火墙允许列表中添加 Batch 池的子网。

    显示如何将子网添加到防火墙允许列表的屏幕截图。

    如果子网未启用服务终结点,则选择它时,将显示如下通知:

    以下网络未为“Microsoft.Storage”启用服务终结点。 启用访问权限最多需要 15 分钟才能完成。 开始此操作后,如果不想等待,可以放心地离开并稍后返回。

    因此,在添加子网之前,请在 Batch 虚拟网络中检查它,以查看存储帐户的服务终结点是否已启用。

    显示启用服务终结点时如何检查的屏幕截图。

完成上述配置后,池中的 Batch 节点可以成功访问存储帐户。

方案 2:Batch 池和存储帐户位于不同的区域

  1. 使用静态公共 IP 地址在虚拟网络中创建新的 Batch 池。 有关详细信息,请参阅 创建具有指定公共 IP 地址的 Batch 池

    由于 Batch 池和存储帐户位于不同的区域,因此出站流量将通过公共 IP 地址通过公共 Internet。

  2. 记下公共 IP 地址。

  3. 将公共 IP 地址分配给 Batch 池公共负载均衡器的 IP。

    之后,检查 Batch 池的属性。 它们将如以下屏幕截图所示:

    Batch 池属性的屏幕截图。

  4. 将公共 IP 地址添加到存储防火墙允许列表。

    公共 IP 地址的屏幕截图。

    显示公共 IP 地址已添加到允许列表的屏幕截图。

  5. 使用新创建的 Batch 池运行 Batch 作业。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。