如何使用虚拟网络保护从应用程序服务到Azure Sql数据库的访问? 脚本

如何使用虚拟网络保护从应用程序服务到Azure Sql数据库的访问? 脚本,azure,azure-sql-database,azure-web-app-service,firewall,azure-virtual-network,Azure,Azure Sql Database,Azure Web App Service,Firewall,Azure Virtual Network,我想使用虚拟网络来限制只能从我的应用程序服务访问Azure数据库,这样我就可以在防火墙设置中打开“允许访问应用程序服务” 我所做的: 我进入了应用服务->网络->VNET集成->设置->创建新的虚拟网络 我已经用默认设置创建了新的VNET 创建VNET时,我转到应用程序服务->网络->VNET集成,并确保VNET已连接 我去了SQL防火墙设置->虚拟网络->添加现有虚拟网络并选择了我的VNET。我保留了默认子网和地址空间:“default/10.0.0.0/24”,并且未选中IgnoreMis

我想使用虚拟网络来限制只能从我的应用程序服务访问Azure数据库,这样我就可以在防火墙设置中打开“允许访问应用程序服务”

我所做的:
  • 我进入了应用服务->网络->VNET集成->设置->创建新的虚拟网络
  • 我已经用默认设置创建了新的VNET
  • 创建VNET时,我转到应用程序服务->网络->VNET集成,并确保VNET已连接
  • 我去了SQL防火墙设置->虚拟网络->添加现有虚拟网络并选择了我的VNET。我保留了默认子网和地址空间:“default/10.0.0.0/24”,并且未选中IgnoreMissingServiceEndpoint标志
  • 我现在可以在我的VNET中看到Microsoft.Sql服务端点:

    问题: 不过,我还是觉得

    SqlException:无法打开服务器请求的服务器“我的sqlserver” 登录。不允许使用IP地址为“52.233.”的客户端 访问服务器:


    我遗漏了什么?

    不幸的是,您现在无法实现此场景

    原因:

  • 当您将VNET集成到Web应用程序时,您的Web应用程序可以像
    Web应用程序VNET
    那样与VNET进行通信

  • 当您使用SQL防火墙允许来自特定VNet的流量时,来自VNet地址空间的流量可以与您的SQL类似
    VNet SQL server
    进行通信

  • 设置完所有配置后,您的场景应该是
    Web-App VNET-SQL-server
    重要的是Web应用程序的流量不能通过VNET传输到SQL server,因为Web应用程序不在VNET内,而是在VNET外因此,当您使用Web App尝试访问SQL server时,流量不是来自VNET

  • 解决方案:

    解决方案是将Web应用程序放入VNet。因此,您可以使用来实现这一点

    参考资料:

    允许您的web应用访问您的应用程序中的资源 虚拟网络,但不授予对您的web应用的私人访问权限 虚拟网络。私人网站访问是指制作你的应用程序 只能从专用网络(如Azure内)访问 虚拟网络。只能通过ASE访问专用站点 配置了内部负载平衡器(ILB)。有关使用的详细信息 如果是ILB ASE,请从以下文章开始:


    类似的情况:

    < P> >考虑一个选项,允许您删除防火墙设置“允许访问应用程序服务”是“<强>添加防火墙规则,用于您的特定应用程序服务的出站IP地址< /强>

    您可以在应用程序服务的“属性”部分找到当前列表,或使用PowerShell

    $outboundIps = (Get-AzureRmResource -ResourceGroupName $rg -ResourceType Microsoft.Web/sites -ResourceName $appService).Properties.outboundIpAddresses
    
    有几个重要的警告

  • 出站IP可以更改,但可以预见(请参阅下面的链接)。我在更新防火墙规则的VSTS发布过程中运行PowerShell脚本。(如果您还通过发布过程而不是Azure门户来管理资源及其规模,那么这种方法似乎是可靠的。)

  • 我无法找到任何信息来确认这些IP是否是您的应用程序服务所独有的。这是一个需要考虑的风险。


  • 如果您想通过服务端点锁定应用程序对Azure SQL、Storage、Cosmos DB等服务的访问,您可以使用新的VNet集成功能。该功能的早期形式需要网关,并构建在点对点VPN上。应用程序的源IP将是点到点地址之一。只有当源IP是VNet地址之一时,服务端点才起作用

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


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

    我相信Azure现在已经包含了对您的场景的支持,允许像这样的连接
    Web App VNET SQL server
    ,这与@Waine Yang的回答相反。我刚刚将Azure函数配置为通过专用VNET与只能通过该VNET访问的SQL Server进行通信

    现在,当您尝试在应用程序服务中设置VNET集成时,Azure会显示以下消息(请注意,它还显示或通过您的Azure VNET):


    这是一个关于如何使用Terraform创建它的示例:

    所以你是说每个月我要花1000美元以上(ASE v2的月费)?对于什么都不做的应用程序服务,只访问SQL数据库?嗨@Liero。我明白你的意思。但这只是这种情况下的解决方案。这取决于产品特性。ASE可以做更多的事情。我想说的主要思想是VNet集成不能让您的Web应用程序位于VNet中。:-)好的,谢谢。将来有什么计划改变它吗?我的意思是限制SQL访问网络级别的单一应用程序服务?@Liero我不知道。但我会将此问题反馈给Azure PG团队。这只是Azure多租户web应用程序毫无价值的另一个原因。任何信息安全专业人员都不会允许SQL服务器(托管或非托管)大卫布朗说这是可能的,但我也没有成功。有什么建议吗?为了节省每个人阅读下面答案的时间,请知道这仍然不是通过Azure直接做到的。您可以使用服务端点,但前提是您的应用程序服务与SQL DB位于同一区域。根据应用程序服务体系结构,我的理解是,这些IP地址对于任何一个客户都是/不是/唯一的。除非您拥有$1000/mo+ASE,否则您将与其他许多人共享这些外部IP地址。@b您可能需要帮助吗