首页 > 解决方案 > 由于防火墙,无法从 VM 到 Azure Blob 存储

问题描述

我有一个在连接到 Azure Blob 存储和 Azure SQL 的 Azure VM 中运行的 powershell 脚本。Blob 存储和 SQL 都受防火墙保护,Blob 存储是 VNet 的一部分。VM 位于其自己的 VNet 上。我在 azure storage 和 sql azure 中都插入了 VM 的 IP 地址。对 SQL Azure 的访问很好,但是当我尝试连接到 blob 存储时,我收到错误消息

“Get-AzStorageContainer:此请求无权执行此操作。HTTP 状态代码:403 - HTTP 错误消息:此请求无权执行此操作。错误代码:AuthorizationFailure”。

我正在使用连接字符串来访问 blob 存储。如果我从我的 PC 连接(其 IP 地址输入防火墙),我可以访问没有问题。如果我使用 azure 存储资源管理器中的连接字符串从 VM 访问 blob 存储,我会收到相同的错误消息。

如果我禁用 blob 存储上的防火墙,那么我可以使用 powershell 和存储资源管理器从 VM 正常访问它。

不确定这是否相关,但如果我Get-NetIPAddress | Format-Table在 VM 上执行,我会得到一个报告的 Ipv6 ip 地址,而不是我在其他任何地方和防火墙中使用的 IPv4。

这可能是相关的,但不知道如何以一种或另一种方式证明它:Azure 存储帐户防火墙规则适用于表,但会破坏 blob 存储

任何人都可以提出这种奇怪行为的原因吗?如何在不禁用防火墙的情况下从 VM 可靠地访问 Blob 存储?

标签: azurenetworking

解决方案


不确定您是否说过“blob 存储是 VNet 的一部分。”。但在这种情况下,您可以在 VNet(位于 VM)内为 Azure 存储启用服务终结点,并将其子网添加到 blob 存储的虚拟网络中。无需将 VM 的 IP 地址添加到存储帐户的防火墙。

在此处输入图像描述

参考:http ://techtalk.cloud/azure-vnet-integration-service-endpoints-for-azure-storage/

更新

如果存储帐户和 VM 位于同一区域,则流量会通过 Azure 主干网络。我在不同区域的 VM 上进行了尝试,然后将 Azure VM 的静态公共 IP 列入存储帐户的防火墙,它成功了!

笔记

IP 网络规则对来自与存储帐户相同的 Azure 区域的请求没有影响。使用虚拟网络规则来允许相同区域的请求。

与存储帐户部署在同一区域的服务使用私有 Azure IP 地址进行通信。因此,您不能根据公共出站 IP 地址范围限制对特定 Azure 服务的访问。

参考:https ://docs.microsoft.com/en-us/azure/storage/common/storage-network-security#grant-access-from-an-internet-ip-range


推荐阅读