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

How to set up API Management, Function App for private Azure SQL database

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

  1. 映射到
  2. 的 Azure API 管理 API
  3. 具有多个函数的 Azure Function App 接受数据并将其存储在
  4. 一个 Azure 存储帐户。
  5. 私有(无 public 访问权限)Azure SQL 数据库。

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

有没有办法让函数连接到私有数据库而无需将函数也设为私有?如果我必须将功能设为私有,我还必须将 API 管理设为私有,对吧?这将使整个 API 无法从互联网上访问。

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

您可以通过 VPN Gateway

这意味着 VPN 网关为您的 VPN 提供了一个 public IP!
因此 public Azure Functions 可以访问 VPN 资源。
Tutorial: Create and manage a VPN gateway using the Azure portal

更好的方法是,使用API管理的内部模式:
Connect to a virtual network in internal mode using Azure API Management

With Azure virtual networks (VNets), Azure API Management can manage internet-inaccessible APIs using several VPN technologies to make the connection. For VNet connectivity options, requirements, and considerations, see Using a virtual network with Azure API Management.

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

总结

我希望这篇概述突出了我们的一些担忧,这可能有助于您决定最适合您的情况。最后,我们选择方案二,它提供了我们所需的必要安全性。它减少了攻击面,因为所有后端都是私有的。主要原因是我们想使用消费计划逻辑应用程序。标准逻辑应用程序很昂贵,而且在部署方面并不真正 user-friendly。有了额外的 Front Door,它还使我们能够在稍后的时间点轻松地转向解决方案三。由于在将 APIM 设为私有时无需使用自定义域和证书,​​Front Door 仍然是您的主要入口点。

1) 场景一

  • APIM 没有 vnet 集成 (public)
  • Azure 函数与 Vnet 集成
  • Azure SQL 和带有专用端点的存储

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

缺点: Azure 功能暴露在 public 互联网上,所以要小心并使用 AAD 身份验证保护它。当您像这样部署多个 Azure 函数时,它会增加攻击面。

2)场景二

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

优点: 如果您遵循 APIM vnet 文档 (source),设置并不困难。如果您也想向外部各方公开您的 API,可能会有用。 APIM 背后的一切都安全地驻留在虚拟网络中。

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

1)场景三

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

优点: 最安全的解决方案,因为一切都与 public 互联网隔离。我将其称为首选企业设置。如果需要,您甚至可以使用带或不带 Front Door 的应用程序网关扩展此设置,以控制谁可以从虚拟网络外部访问某些 API。

缺点: 这是最广泛的设置,意味着部署需要更多时间。您必须考虑所有必要的路由、NSG、私有 DNS 条目等。建议熟悉 Azure 策略并自动执行其中的一些操作。

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