我有一个Powershell脚本,该脚本在连接到Azure Blob存储和Azure SQL的Azure VM中运行。 Blob存储和SQL均受防火墙保护,Blob存储是VNet的一部分。 VM在自己的VNet上。我在Azure存储和sql Azure中都插入了VM的IP地址。对SQL Azure的访问权限很好,但是当我尝试连接到Blob存储时,会收到错误消息
“ Get-AzStorageContainer:该请求无权执行 此操作。 HTTP状态码:403-HTTP错误消息:此 请求无权执行此操作。错误代码: AuthorizationFailure”。
我正在使用连接字符串来访问Blob存储。如果从PC连接(其IP地址已在防火墙中输入),则可以正常访问。如果我使用azure Storage Explorer中的连接字符串从VM访问blob存储,则会收到相同的错误消息。
如果我禁用了Blob存储上的防火墙,则可以使用Powershell和Storage Explorer在VM上正常访问它。
不确定这是否相关,但是如果我在VM上执行Get-NetIPAddress | Format-Table
,则会得到报告的Ipv6 ip地址,而不是我在防火墙和其他任何地方使用的IPv4。
这可能是相关的,但不知道如何以另一种方式证明它:Azure Storage account firewall rules work for table but break blob storage
有人可以提出这种奇怪行为的原因吗?如何在不禁用防火墙的情况下从VM获得对Blob存储的可靠访问?
答案 0 :(得分:1)
不确定您说过“ blob存储是VNet的一部分。”。但是在这种情况下,您可以在VNet(位于VM)中为Azure存储启用Service endpoint,并将其子网添加到Blob存储的虚拟网络中。您无需将虚拟机的IP地址添加到存储帐户的防火墙中。
参考:http://techtalk.cloud/azure-vnet-integration-service-endpoints-for-azure-storage/
如果存储帐户和VM位于相同区域,则流量将通过Azure骨干网传输。我在其他区域的VM上进行了尝试,然后将Azure VM的静态公共IP白名单添加到存储帐户的防火墙中,可以正常工作!
注意
IP网络规则对源自相同的请求不起作用 Azure区域作为存储帐户。使用虚拟网络规则来 允许相同区域的请求。
与存储帐户使用情况部署在相同区域中的服务 用于通信的私有Azure IP地址。因此,您不能 限制对特定Azure服务的公共访问 出站IP地址范围。