限制从 Blob 存储中的静态网站调用 Azure 函数?

Limit Azure functions call from static website in Blob Storage?

我们在 Azure Functions 中有多个函数,其中一些由 blob 存储上托管的网页使用。

我想让网页(blob存储)使用的函数限制调用,这样只能被网页调用,其他人不能调用。这样的事情可能吗?

我找到了通过 IP 限制访问的选项,但网页几乎在任何计算机上都有不同的 IP,因此这个选项似乎不是一个好的解决方案。

好的解决方案是限制从域名调用函数,但 Azure 中没有相应的选项。

有人有其他想法吗?

您可以通过两种方式实现此目的:

1.如果您在函数 app

中有一小部分函数,​​则这是一种快速简便的廉价方法

您可以通过在您的函数应用程序中启用 CORS 并指定可以访问您的函数应用程序(及其函数)的域列表来实现此目的。

执行此操作的步骤:

  1. 转到 Azure 中的函数应用程序资源
  2. select API 菜单下的 CORS
  3. 选中为您提供“启用访问控制允许凭据”选项的复选框
  4. 指定要允许访问的域或域列表
  5. 保存

Cross-Origin Resource Sharing (CORS) allows JavaScript code running in a browser on an external host to interact with your backend. Specify the origins that should be allowed to make cross-origin calls (for example: http://example.com:12345). To allow all, use "*" and remove all other origins from the list. Slashes are not allowed as part of domain or after TLD.

2。如果您有更多预算并且您的功能是大型企业应用程序的一部分,则更安全的方法

  1. 在函数应用程序前面部署一个新的 Azure API 管理实例。 (https://docs.microsoft.com/en-us/azure/api-management/import-function-app-as-api)

  2. 使用 APIM 服务标签对函数应用程序进行安全访问限制,以仅允许来自 APIM 的访问并拒绝所有其他流量(在此处了解更多信息:https://docs.microsoft.com/en-us/azure/app-service/app-service-ip-restrictions)

  1. 完成第 1 步和第 2 步后,将无法直接访问您的函数应用程序。您(或其他任何人)只能使用订阅密钥通过 APIM 访问它。 (信息: https://docs.microsoft.com/en-us/learn/modules/publish-manage-apis-with-azure-api-management https://docs.microsoft.com/en-us/learn/modules/control-authentication-with-apim/)

  2. 在 API 分钟内启用 CORS (https://docs.microsoft.com/en-us/azure/api-management/api-management-cross-domain-policies#CORS)

如您所见,APIM 为您提供了额外的保护层,您可以在其中按域进行限制,此外仅允许提供订阅密钥访问您的功能的请求。您可以随时撤销和重新生成这些密钥,以确保恶意用户无法访问您的函数应用。您还可以配置诸如速率限制之类的东西来防止 DDOS 攻击。

PS :估计您也会发现这个答案很有趣。恶意用户可以欺骗 CORS。但是,将您的函数应用程序保护在 APIM 实例之后将为您提供更高的安全性。取决于您希望为您的应用提供的安全级别与您的预算 - What's to stop malicious code from spoofing the "Origin" header to exploit CORS?

您可以遵循 Azure 的 APIM 安全基线建议,通过 APIM 进一步保护您的函数应用程序: https://docs.microsoft.com/en-us/security/benchmark/azure/baselines/api-management-security-baseline