Azure Web App VNet 与具有专用链接的存储帐户集成
Posted
技术标签:
【中文标题】Azure Web App VNet 与具有专用链接的存储帐户集成【英文标题】:Azure Web App VNet integration to Storage account with Private Link 【发布时间】:2020-07-11 04:14:24 【问题描述】:我在配置了 VNet 集成(子网 10.240.0.32/27)的 Azure 应用服务 (S1) 上有一个 API。我还有一个存储帐户,我在其上配置了专用链接(子网 10.240.0.0/27
并获得 IP 10.240.0.4
)。但是它不起作用我收到以下错误:
StorageException: 此请求无权执行此操作。
有谁知道我是否需要配置其他任何东西才能让它工作?
doc 声明我不必更改任何连接字符串。连接在配置专用链接之前有效。
更新
我也尝试过使用 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 日更新
今天与 Microsoft 通了电话。原来应用服务目前无法使用私有 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/
【问题讨论】:
【参考方案1】:当您通过公共终结点访问 Blob 存储但启用存储帐户的 VNet 防火墙设置时,可能会发生该错误。
在这种将 App VNet 集成到存储帐户连接的情况下,您可以使用 service endpoint 而不是 private endpoint。要将服务终结点与您的应用程序一起使用,请使用 regional VNet Integration 连接到选定的虚拟网络。然后在您用于集成的子网上配置服务端点Microsoft.Storage
。
如果您仍想使用私有端点,恐怕您需要使用您的 own DNS server 从使用虚拟的 Azure 应用服务(Web 应用、函数或机器人)进行名称解析网络集成到同一虚拟网络中的角色实例或虚拟机。见Name resolution for resources in Azure virtual networks。
使用专用链接,Blob 存储 DNS 名称将解析为公共 IP 地址,而不是来自应用服务控制台的专用终结点 IP 地址。当您从应用服务访问时,您似乎正在通过公共终结点访问 VNet 外部的 Blob 存储。同时,它可以从与私有端点在同一子网中的 VM 解析为私有端点 IP。见DNS changes for private endpoints。
【讨论】:
今天与 Microsoft 通话。事实证明,Web 服务目前无法使用私有 DNS 区域。所以,你是对的,你现在需要设置你自己的 DNS 服务器。它将被修复,但他们我们无法给我一个预计到达时间。所以现在它要么是自定义 DNS 服务器,要么是使用服务端点。当情况发生变化时,我会更新这个问题。 当两者都位于同一个 vnet 之后(在同一区域中)时,任何专门连接 Azure App Service -> Azure Storage 的示例?据我所知,我已经将它们都连接了,但是当我尝试从应用程序访问存储帐户时,我总是得到 > Azure.RequestFailedException: This request is not authorized to perform this operation。 RequestId:[snip] Time:2020-06-15T17:16:26.8021259Z 状态:403(此请求无权执行此操作。)错误代码:AuthorizationFailure @eoleary 查看this OP 的问题和评论,只是尝试重新创建您的应用集成的 vNet? 我同意@eoleary。 OP 的问题是针对 ASP -> 区域 VNet 集成 -> 具有专用链接的存储帐户。如果没有 Service 端点,这仍然无法工作。【参考方案2】:我在使用应用服务与私有 sql 端点通信时遇到了这个问题,这条评论让系统开始为我工作:
今天我设置了以下四点并尝试了
创建私有 DNS 区域并将其连接到 VNET(privatelink.blob.core.windows.net) 将 VNET DNS 设置为 168.63.129.16 将 WebApp 配置为区域 VNET 集成 将 WebApp 的 WEBSITE_VNET_ROUTE_ALL 设置为 1
我从 KUDU(nameresolver xxxx.blob.core.windows.net) 获得 PrivateIP 我 也可以使用 KUDU 中的 curl 从 PrivateIP 端访问它。
设置 2 和 4 似乎很重要
从 https://feedback.azure.com/forums/169385-web-apps/suggestions/38383642-web-app-and-private-dns-zone-support
然后我在 kudu 命令行环境中使用 nameresolver 来查看被解析到的 IP 地址。我的一个环境仍然无法正常工作,但我认为它已经改变了很多次,它已经进入了一些奇怪的状态。设置 VNET DNS 是最后的难题
希望对你有帮助
【讨论】:
以上是关于Azure Web App VNet 与具有专用链接的存储帐户集成的主要内容,如果未能解决你的问题,请参考以下文章
用于 postgresql 的 Azure 专用终结点无法与多个 Vnet 一起使用
您应该为 VNET 专用终结点的每个 Azure 资源(CosmosDB、KeyVault、存储)创建多个子网还是只使用一个?
我是否需要使用azure waf和web app指向站点vpn