执行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 池具有虚拟网络
从 Azure 门户 >Batch 帐户>池>属性中检查“网络配置”下的子网信息。 记下并记下信息。
导航到存储帐户,然后选择“ 网络”。 在“防火墙和虚拟网络”设置中,选择“从所选虚拟网络和 IP 地址启用公用网络访问”。 在防火墙允许列表中添加 Batch 池的子网。
如果子网未启用服务终结点,则选择它时,将显示如下通知:
以下网络未为“Microsoft.Storage”启用服务终结点。 启用访问权限最多需要 15 分钟才能完成。 开始此操作后,如果不想等待,可以放心地离开并稍后返回。
因此,在添加子网之前,请在 Batch 虚拟网络中检查它,以查看存储帐户的服务终结点是否已启用。
完成上述配置后,池中的 Batch 节点可以成功访问存储帐户。
方案 2:Batch 池和存储帐户位于不同的区域
使用静态公共 IP 地址在虚拟网络中创建新的 Batch 池。 有关详细信息,请参阅 创建具有指定公共 IP 地址的 Batch 池。
由于 Batch 池和存储帐户位于不同的区域,因此出站流量将通过公共 IP 地址通过公共 Internet。
记下公共 IP 地址。
将公共 IP 地址分配给 Batch 池公共负载均衡器的 IP。
之后,检查 Batch 池的属性。 它们将如以下屏幕截图所示:
将公共 IP 地址添加到存储防火墙允许列表。
使用新创建的 Batch 池运行 Batch 作业。
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。