首页 > 解决方案 > Azure Web App VNet 与具有专用链接的存储帐户集成

问题描述

我在配置了 VNet 集成(子网 10.240.0.32/27)的 Azure 应用服务 (S1) 上有一个 API。我还有一个存储帐户,我在其上配置了专用链接(子网10.240.0.0/27并获得了 IP 10.240.0.4)。但是它不起作用我收到以下错误:

StorageException:此请求无权执行此操作。

有谁知道我是否需要配置其他任何东西才能工作?

文档声明我不必更改任何连接字符串。连接在配置专用链接之前有效。

更新

我也尝试过使用 Azure SQL 数据库。在与存储相同的子网中部署 SQL 专用链接。这里也没有多少运气。收到以下错误:

SqlException:原因:与 SQL Server 建立连接时发生特定于实例的错误。此服务器上的公共数据端点不可访问。要连接到此服务器,请使用虚拟网络内部的专用终结点。

当我将WEBSITE_VNET_ROUTE_ALL(使所有传出流量通过 vnet 而不仅仅是私有 IP)添加到 Web 应用程序并将其设置为时,1我收到以下错误:

SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP 提供者,错误:0 - 数据库查找期间发生不可恢复的错误。)

然后我在与私有链接相同的子网中创建了一个 VM。从那个虚拟机我可以运行这个命令,该命令很好地返回正确的 IP:

.\psping.exe azurenetworking.database.windows.net:1433

在此处输入图像描述


2020 年 4 月 2 日更新

今天和微软通了电话。原来应用服务目前无法使用私有 DNS 区域。因此,您现在需要设置自己的 DNS 服务器。它将被修复,但他们无法给我 ETA。所以现在它要么是自定义 DNS 服务器,要么是使用服务端点。当这种情况发生变化时,我会更新这个问题


更新 6 月 2 日

这方面的详细信息已添加到文档中:https ://docs.microsoft.com/en-us/azure/app-service/web-sites-integrate-with-vnet#azure-dns-private-zones

归结为:要使用 Azure DNS 专用区域,您需要添加以下应用设置: WEBSITE_DNS_SERVER带值168.63.129.16 WEBSITE_VNET_ROUTE_ALL和值1

我为任何对完整示例感兴趣的人写了一篇关于它的博客:https ://erwinstaal.nl/posts/securing-your-azure-db-connection-using-azure-private-link/

标签: azure-sql-databaseazure-storageazure-web-app-serviceazure-virtual-network

解决方案


当您通过公共终结点访问 Blob 存储但启用存储帐户的 VNet 防火墙设置时,可能会发生该错误。

在这种将 App VNet 集成到存储帐户连接的情况下,您可以使用服务端点而不是专用端点。要将服务终结点与您的应用程序一起使用,请使用区域 VNet 集成连接到选定的虚拟网络。Microsoft.Storage然后在您用于集成的子网上配置服务端点。

如果您仍想使用私有端点,恐怕您需要使用自己的 DNS 服务器从 Azure 应用程序服务(Web 应用程序、函数或机器人)进行名称解析,使用虚拟网络集成来角色实例或虚拟机在同一虚拟网络。请参阅Azure 虚拟网络中资源的名称解析

使用专用链接,将 Blob 存储 DNS 名称解析为公共 IP 地址,而不是来自应用服务控制台的专用终结点 IP 地址。当您从应用服务访问时,您似乎正在通过公共终结点访问 VNet 外部的 Blob 存储。同时,它可以从与私有端点在同一子网中的 VM 解析为私有端点 IP。请参阅专用端点的 DNS 更改

在此处输入图像描述


推荐阅读