执行 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 反馈社区。