Azure - 通过 vnet 从应用服务连接到 Blob 存储

Azure - 通过 vnet 从应用服务连接到 Blob 存储

我已经建立了一个具有点到站点网关和另外两个子网的 VNET。

  • 互联星空
    • StorageSubnet(带有存储的服务终结点)StorageSubnet (with service endpoint to storage)
    • GWSubnet(带有到存储的服务端点)
    • 无存储

我已将 Web 应用连接到 VNET,但在尝试列出 Blob [1] 时出现异常。如果我将存储帐户公开,则一切都会按预期运行。

为了找出失败的原因,我分别在 StorageSubnet 和 noStorage 上设置了两个小型虚拟机。正如预期的那样,一个虚拟机可以使用 Azure CLI 列出 blob,而另一个虚拟机失败。这样,我还能够查看服务端点出现的有效路由。

有没有办法查看应用服务实例上的有效路由?(我的网络应用程序)

应用服务(我的 Web 应用)连接到 VNET 而不是子网,我是不是遗漏了什么,需要手动路由吗?我希望它能像我的 VM 测试一样进行路由。

有没有办法让我在应用服务上运行 Azure CLI,或者在调试中执行其他后续步骤?

[1]

Microsoft.WindowsAzure.Storage.StorageException
at Microsoft.WindowsAzure.Storage.Core.Executor.Executor.    <ExecuteAsyncInternal>d__4`1.MoveNext()
--- End of stack trace from previous location where exception was thrown     ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer.   <ListBlobsSegmentedAsync>d__61.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()

答案1

这是一个老问题。

对于 Azure Web 应用服务 VNET 集成,它允许您的 Web 应用访问虚拟网络中的资源,但不会授予从虚拟网络对 Web 应用的私有访问权限。私有站点访问是指使您的应用只能从私有网络(例如 Azure 虚拟网络内)访问。私有站点访问仅适用于配置了内部负载均衡器 (ILB) 的 ASE。有关使用 ILB ASE 的详细信息,请从此处的文章开始: 创建和使用 ILB ASE。

这意味着通过 VNET 集成,您的 Web 应用程序可以从外部连接 VNET,但 Web 应用程序不在 VNET 内部。

因此,存储帐户的防火墙仅允许来自 VNET 的流量,而不能允许 VNET 之外的流量。

对于您的场景,一种方法是使用 ILB ASE。它可以将您的 Web 应用变成 VNET。

相关内容