Azure Function Apps 的白名单组

Whitelist group for Azure Function Apps

我们正在构建多个 Azure Function App,每个 Function App 默认都有自己的 IP 白名单。

我们有多个第三方将使用这些功能应用程序。每个第三方都可能有多个 IP 地址。某些功能应用程序可能会被所有第三方使用,其他的可能会被一个第三方使用,但不会被另一个使用,等等。

我们想要一种集中管理的方式。我们有一个过去用来维护 IP 地址的 Powershell,但想知道是否有更好的解决方案 - 也许 Azure 本身内置了一些模板?

这一定是一个相当普遍的问题,请问大家有什么建议吗?

您可以使用 Microsoft.Web/sites/config ARM 对象。您可以在现有函数之上部署配置对象,或将其包含在完整函数应用程序模板的 ARM 定义中。通过这种方式,您可以集中管理 IP 规则并对它们进行版本控制。使用 PowerShell,您可以根据您的标准编排 IP 规则的 ARM 部署。

https://docs.microsoft.com/en-us/azure/templates/microsoft.web/2018-11-01/sites/config

{
    "type": "Microsoft.Web/sites/config",
    "apiVersion": "2018-11-01",
    "name": "[concat(variables('functionName'), '/web')]",
    "location": "East US",
    "dependsOn": [
      "[resourceId('Microsoft.Web/sites', variables('functionName'))]"
    ],
    "properties": {
      "ipSecurityRestrictions": [
        {
          "ipAddress": "00.00.00.00/00",
          "action": "Allow",
          "tag": "Default",
          "priority": 1000,
          "name": "Rule 1"
        },
        {
          "ipAddress": "00.00.00.00/00",
          "action": "Allow",
          "tag": "Default",
          "priority": 2000,
          "name": "Rule 2"
        },
        {
          "ipAddress": "Any",
          "action": "Deny",
          "priority": 2147483647,
          "name": "Deny all",
          "description": "Deny all access"
        }
      ]
    }
  }

主要问题是 IP 地址经常变化。我更喜欢通过每个客户端或/每个客户端的订阅密钥和 API.

来控制它

为此,您可以在 API 的前面添加一个 API 管理(API 网关模式)。您还可以使用 API 管理继续控制每个 IP 地址,但我认为 api 键是一个很好的做法。

更多信息:

https://docs.microsoft.com/en-us/azure/api-management/api-management-access-restriction-policies#RestrictCallerIPs

https://microservices.io/patterns/apigateway.html