解决 Consumption Plan Azure Function App 连接防火墙存储问题

68次阅读
没有评论

问题描述

在尝试将一个 Python 函数应用连接到存储资源时遇到了问题。存储中有一个公共容器,由多个公司内部的 HTML/CSS 页面访问($web)。然而,这个容器应该包含敏感信息。为了防止数据泄露,用户选择配置防火墙,只允许公司使用的 IP 范围访问。这个方案似乎一直都有效。

然而,问题出在当用户尝试使用函数应用自动生成文件(blob)时。由于只需要非常少的执行次数,使用 Azure 函数应用的“按消耗计划”似乎是合理的选择。然而,显然“按消耗计划”的 Azure 函数应用不属于受信任的 Azure 服务,既没有固定的 IP,也不能在虚拟网络(VNet)中设置,因此无法通过存储容器的防火墙。

用户尝试将函数应用添加为带有贡献者权限的角色。还尝试将函数应用的出站 IP 地址(可在资源管理器中找到)添加到防火墙中。但这两种尝试都没有成功。

用户是否有任何解决此问题的方法?

解决方案

以下解决方案可能会因版本差异或特定环境而有所不同,请根据实际情况进行调整。

使用 Premium Azure Function App

如果您的函数应用需要连接到 VNet 或需要特定的出站 IP 地址范围,考虑将函数应用升级为 Premium 计划。Premium Azure 函数应用支持与 VNet 的连接,这将允许您在 VNet 中托管函数应用,并且可以将其出站流量限制在特定的 IP 范围内。通过这种方式,您可以确保函数应用的流量满足存储容器的防火墙设置。

使用授权令牌(SAS Token)

如果容器中包含敏感信息,不建议将其公开。IP 限制不应该是您唯一的保护措施。您可以考虑使用另一个服务(例如函数应用)来确定用户的身份,然后为他们授予容器的 SAS 令牌。这种方式下,用户只有在获得有效的授权令牌后才能访问容器中的内容,从而增强了安全性。

以下是一些步骤来实现此解决方案:

  1. 创建一个服务,用于验证用户的身份。
  2. 在用户成功验证后,为其生成一个有效期限的 SAS 令牌。
  3. 用户使用 SAS 令牌访问存储容器,该令牌只允许用户在规定时间内进行访问。

这种方法将确保只有经过身份验证的用户才能访问存储容器,从而保护了容器中的敏感数据。

总结

在使用 Consumption Plan 的 Azure 函数应用连接防火墙存储时,可以考虑升级到 Premium 计划以支持 VNet 连接。另外,使用授权令牌(SAS Token)可以增加容器内容的安全性,确保只有经过验证的用户才能访问敏感信息。

请根据您的具体需求和环境选择合适的解决方案,并确保在实施任何更改之前进行适当的测试和备份。

正文完