如何使用虚拟网络保护从App Service到Azure Sql Database的访问?

时间:2018-05-23 08:11:24

标签: azure azure-sql-database azure-web-sites firewall azure-virtual-network

方案

我想使用虚拟网络来限制仅从我的App Service访问Azure数据库,以便我可以转向"允许访问App Services"在防火墙设置

Allow access to App Services screenshot

我做了什么:

  1. 我去了App Service - >网络 - > VNET集成 - >设置 - >创建新的虚拟网络
  2. 我已使用默认设置创建了新的VNET。
  3. 当创建VNET时,我去了App Service - >网络 - > VNET集成并确保VNET已连接
  4. 我去了SQL防火墙settigs - >虚拟网络 - >添加现有的Virtual Newtork并选择我的VNET。我已经离开默认子网和地址空间:"默认/ 10.0.0.0/24"并且我已取消选中IgnoreMissingServiceEndpoint标记。
  5. 我现在可以在我的VNET中看到Microsoft.Sql服务端点: enter image description here

    问题

    但是,我还在

      

    SqlException:无法打开服务器' my-sqlserver'要求的   登录。 IP地址为' 52.233。 '是不允许的   访问服务器。:

    我错过了什么?

5 个答案:

答案 0 :(得分:2)

不幸的是,你暂时无法实现这种情况。

<强>为什么:

  1. 当您使用VNET与Web App集成时,您的Web App可以与Web App <---> VNET等VNET进行通信。

  2. 当您使用SQL防火墙允许来自特定VNet的triffic时,来自VNET地址空间的流量可以与您的SQL通信,如VNet <---> SQL server

  3. 设置完所有配置后,您的方案应为Web App <---> VNET <---> SQL server重要的是来自Web App的流量无法通过VNET进入SQL服务器,因为Web应用程序不在VNET中,它在VNET外面!因此,当您使用Web App时尝试访问SQL服务器,triffic不是来自VNET。

  4. <强>解决方案:

    解决方案是将您的Web App放入VNet。因此,您可以使用Azure ASE来实现此目标。

    <强>参考:

      

    VNet Integration可让您的网络应用访问您的资源   虚拟网络但不授予对您的Web应用程序的私人访问权限   虚拟网络。私人网站访问是指制作您的应用   只能从Azure内的专用网络访问   虚拟网络。专用站点访问仅适用于ASE   配置内部负载均衡器(ILB)。有关使用的详细信息   ILB ASE,从这里的文章开始:Creating and using an ILB ASE

    类似案例:App Service VNet Integration with Azure Storage Service Enpoint

答案 1 :(得分:2)

考虑允许您删除防火墙设置“允许访问App Services”的一个选项是为特定应用服务的出站IP地址添加防火墙规则。< / p>

您可以在App Service的“属性”部分或PowerShell中找到当前列表...

$outboundIps = (Get-AzureRmResource -ResourceGroupName $rg -ResourceType Microsoft.Web/sites -ResourceName $appService).Properties.outboundIpAddresses

一些重要的警告。

  1. 出站IP可以更改,但可以预测(请参阅下面的链接)。我将PowerShell脚本作为更新防火墙规则的VSTS发布过程的一部分运行。 (如果您还通过发布流程而不是Azure门户管理资源及其规模,则此方法似乎可靠。)

  2. 我无法找到任何信息来确认这些IP是否是您的App Service所特有的。这是一个需要考虑的风险。

  3. https://docs.microsoft.com/en-us/azure/app-service/app-service-ip-addresses

答案 2 :(得分:1)

如果要使用服务端点锁定从应用程序访问服务(例如Azure SQL,Storage,Cosmos DB等)的访问权限,可以使用新的VNet集成功能。该功能的较早形式需要网关,并在点对点VPN上构建。应用程序的源IP将是指向站点地址的地址之一。仅当您的源IP是VNet地址之一时,服务端点才起作用。

使用新的VNet集成,您的应用程序后端将使用选定子网中的IP进行呼叫。这意味着您可以在该子网上设置服务端点。

这不要与应用程序的服务端点混淆。这是最近发布的功能,可以将应用程序的流量锁定到选定的VNet /子网。

答案 3 :(得分:1)

我相信Azure现在已经包括了对您的方案的支持,与@Waine Yang的回复相反,允许这样的连接$ path="/a/sub_b/c/AND_d/e/the_f/this_is_g/THIS_ONE_I_WANT_h/penultimate/last" $ s1="${path%/*/*}" $ name="${s1##*/}" $ new_path="${s1}/${name}.txt" $ echo "$new_path" /a/sub_b/c/AND_d/e/the_f/this_is_g/THIS_ONE_I_WANT_h/THIS_ONE_I_WANT_h.txt 。我刚刚将Azure函数配置为通过专用VNET与只能通过该VNET访问的SQL Server通信。

现在,当您尝试在App Service中设置VNET集成时,Azure将显示以下消息(请注意,该消息还会显示或通过Azure VNET ): enter image description here

Here是有关如何使用Terraform创建它的示例:

答案 4 :(得分:0)

通过最新启动的名为 Private Link 的新服务,您现在可以设置专用终结点来访问Azure SQL数据库。

  

通过今天发布的Azure私有链接,您可以轻松创建   您的VNet中的私有终结点并将其映射到您的PaaS资源(您的   Azure存储帐户Blob或SQL数据库服务器)。