使 Azure Functions 不可公开访问?

Make Azure Functions not publicly accessible?

目前我的函数可以公开访问。有没有办法让它只能通过其他东西访问,比如 API 网关,而不是直接访问?我尝试通过 "networking" blade 添加 VNET,但我认为这没有任何作用(我仍然可以公开调用函数)...我认为这只是为了让函数可以访问资源在专用网络上。我没有在设置中看到任何将 IP 设为私有的选项。我不太精通网络相关问题,如果我不清楚,请见谅。

使用 CORS 功能,您可以限制对 Azure 函数的访问。要配置它,请检查以下 link:Azure Function Settings,在 CORS 部分。

built-in keys support 旨在为此提供一个选项。您可以要求所有请求都包含一个 API 密钥,该密钥仅与您关心的资源共享。事实上,所有 HTTP-triggered 函数默认都需要一个键。您必须明确选择删除此要求。

虽然密钥不是网络解决方案,但如果您泄露了密钥,其他人就可以访问您的 APIs(直到您滚动密钥)。您是正确的,VNet 支持是 point-to-site,这意味着它可以访问资源,但函数应用程序本身不受保护。应用服务环境可以解决这个问题,尽管 Kai 对原始问题的评论是正确的 - ASE 尚不可用于 Functions。

除了密钥之外,您还可以考虑使用 App Service Authentication / Authorization 来要求 AAD 服务主体。这实际上就像一个键,但如果您在 AAD 中为其他实体建模,它还有额外的好处。不过,除非你知道你需要这个,否则我会坚持使用钥匙。

您可以对 Azure 函数应用访问限制。可以找到文档 here.

您可以使用 PowerShell AZ 模块创建规则(如果您愿意,也可以使用门户)。

Add-AzWebAppAccessRestrictionRule `
    -ResourceGroupName "ResourceGroup" `
    -WebAppName "AppName" `
    -Name "Ip example rule" `
    -Priority 100 `
    -Action Allow `
    -IpAddress 122.133.144.0/24

可以找到 Add-AzWebAppAccessRestrictionRule 的文档 here

IP 限制可用于限制对列入白名单的 IP 的访问。您可以通过门户网站 -

https://docs.microsoft.com/en-gb/azure/app-service/app-service-ip-restrictions

或在 web.config 中使用 ipSecurity