如何为私有Azure SQL数据库设置API管理、功能应用程序



我目前在Azure中有以下设置:

  1. 映射到的Azure API管理API
  2. Azure Function应用程序,具有多个接受数据并将其存储在中的功能
  3. Azure存储帐户
  4. 专用(无公共访问权限)Azure SQL数据库

现在我想添加更多的API端点和Azure函数,它们提供对SQL数据库中某些数据的访问。我现在面临的问题是,我的Function App和API管理是公共的,因此无法连接到我的VNet(即数据库)中的资源。

有没有一种方法可以让函数连接到私有数据库,而不让函数也成为私有的?如果我必须使函数私有化,我也必须使API管理私有化,对吗?这将使整个API无法从互联网上获得。

支持VNet集成的API管理和功能应用程序的计划更加强大和昂贵。我不需要那么多的电力,只需要VNet集成。有人知道如何解决这个问题吗?

在自己部署APIM之前,我对如何创建类似的设置进行了一些研究,其中我们的大多数后端服务(azure功能、应用程序服务等)都位于虚拟网络中。请注意,我们仍在使用API管理的开发人员SKU,它具有与高级SKU(来源)几乎相同的功能。对于我们的用例,开发者层有足够的带宽,高级SKU非常昂贵。开发人员层没有Microsoft SLA支持,因此在生产环境中使用时要小心。下面,我将从一个简短的总结开始,并在结尾描述场景。

摘要

我希望这篇综述能突出我们的一些担忧,这可能会帮助您决定最适合您的场景。最后,我们选择场景二,它提供了我们需要的必要安全性。它减少了攻击面,因为所有后端都是私有的。主要原因是我们想使用消费计划逻辑应用程序。标准逻辑应用程序价格昂贵,而且在部署方面并不是很方便用户。有了一个额外的前门,我们也可以在以后的时间点轻松地转到解决方案三。由于在将APIM设置为私有时,您不必使用自定义域和证书四处移动,因此Front Door仍然是您的主要入口。

1)场景一

  • 没有vnet集成的APIM(公共)
  • Azure功能与Vnet集成
  • 带有专用端点的Azure SQL和存储

优点:在这种情况下,您可以选择APIM标准或基本sku。这些比高级sku便宜得多。

缺点:Azure功能暴露在公共互联网上,因此要小心并使用AAD身份验证进行保护。当你像这样部署多个azure函数时,它会增加攻击面。

2)场景二

  • 带vnet集成的APIM(外部模式)
  • 具有专用终结点的Azure函数
  • 带有专用端点的Azure SQL和存储

优点:如果您遵循APIM vnet文档(来源),安装并没有那么困难。如果您还想向外部各方公开您的API,这可能会很有用。APIM背后的一切都安全地驻留在虚拟网络中。

缺点:只有开发人员和高级层可用于此设置。APIM可以通过公共互联网访问,因此请确保您制定了必要的政策,始终检查JWT。你甚至可以制定一个检查IP地址的策略,基本上是穷人的防火墙解决方案。

1)场景三

  • 带vnet集成的APIM(内部模式)
  • 具有专用终结点的Azure函数
  • 带有专用端点的Azure SQL和存储
  • 可选:带或不带前门的应用程序网关,可将某些路由安全地暴露给外部世界

优点:最安全的解决方案,因为所有东西都被屏蔽在公共互联网之外。我认为这是首选的企业设置。如果需要,您甚至可以使用带有或不带有Front Door的应用程序网关来扩展此设置,以控制谁可以从虚拟网络外部访问某些API。

缺点:这是最广泛的设置,意味着部署需要更多的时间。你必须考虑所有必要的路由、NSG、专用DNS条目等。熟悉azure策略也可以自动完成其中的一些操作。

注意:APIM在不久的将来也将支持私有端点,这有点令人困惑。我想说,这两种vnet模式已经可以与您将如何使用vnet集成和专用端点来实现azure功能和应用程序服务相媲美。

您可以通过VPN网关实现这一点

这意味着VPN网关为您的VPN提供了一个公共IP
这样公共Azure功能就可以访问VPN资源
教程:使用Azure门户创建和管理VPN网关

更好的方法是,使用API管理的内部模式:
使用Azure API管理以内部模式连接到虚拟网络

通过Azure虚拟网络(VNet),Azure API管理可以使用多种VPN技术管理可在互联网上访问的API以进行连接。有关VNet连接选项、要求和注意事项,请参阅使用Azure API管理的虚拟网络。

最新更新