无服务器功能占当今云计算公司工作负载的一半左右,已成为部署应用程序的一种流行方式,这主要是因为无服务器功能最大限度地减少了团队需要考虑的复杂性。通过无需配置主机服务器,无服务器功能简化了IT运维。
然而,这并不意味着无服务器功能也简化了安全性。相反,在无服务器计算环境中可能会出现各种安全挑战和风险。这就是为什么保护无服务器功能和支持这些功能的架构至关重要。
本文介绍了影响无服务器功能的主要安全风险,然后讨论了管理这些风险的关键原则。
无服务器功能安全风险
无服务器计算与传统计算之间的主要区别在于,无服务器使开发和IT运维团队无需配置和管理应用程序运行的底层服务器环境。
然而,除此之外,无服务器功能的工作方式与传统的应用程序部署技术(如VM和容器)相似,并且它们面临相同类型的风险:
——无服务器功能中存在的恶意软件。
——不安全的访问控制,以控制每个无服务器功能可以访问哪些资源,以及谁可以部署、停止和修改无服务器功能。
——无服务器功能运行时调用的不安全的第三方依赖关系。
——对无服务器功能产生或访问的敏感数据或秘密进行不安全管理。
此外,无服务器功能面临特殊类型攻击的风险,这种攻击在其他类型的部署技术中并不常见:
当攻击者强制无服务器功能重复执行时,就会发生资源耗尽。由于无服务器功能是按需执行的,并且云提供商对无服务器执行时间收取相对较高的费用,因此资源耗尽攻击增加云账单。大多数其他类型的托管技术不受这种攻击,因为它们使用不同的定价模型。
保护无服务器功能的三个核心原则
上述无服务器安全风险可以使用各种工具(如检查配置疏忽的配置扫描仪)逐个功能地减轻。团队可以并且应该利用这些工具来保护功能。
然而,在更深层次上,安全性应该嵌入无服务器功能本身。换言之,团队应该采取措施,确保其无服务器计算的总体方法尽可能安全。该策略构建了另一层保护,其范围超出了保护单个功能的范围。
以下是将安全性集成到无服务器功能中的三种方法。
1.确保无服务器策略包括设计上的安全性
无服务器功能很容易部署,很容易将其作为一种简单、经济高效的方法来运行需要运行的任何应用程序。
但这并不意味着无服务器功能是部署每个工作负载的最安全解决方案。某些类型的应用程序(如需要以复杂的方式管理高度敏感数据的应用程序或需要广泛的第三方依赖关系的应用程序)很难安全,这使得团队对托管环境的控制和可见性降低。
这里的要点是,不应该使用无服务器功能来部署需要一定级别的安全控制和可观察性的工作负载,而使用无服务器功能很难实现这一点。有时候,尽管无服务器很简单,但它并不是一条好路。
2.成为极简主义者
无服务器功能的设计使按需运行小的、离散的代码变得容易。然而,很容易忘记这一原则,而是将无服务器功能作为部署任何类型应用程序的一种方法。
这样做是一个错误,不仅因为这通常意味着你不会利用无服务器功能的核心优势,而且因为在每个功能中运行的代码越多,就越有可能误解某些东西或引入不安全的依赖关系。
更好的做法是对无服务器计算采取极简的方法。努力将每个功能中的代码减少到最小。除了有助于节省资金和提高性能外,该策略还将提高整体无服务器安全性。
3.隔离功能
尽管无服务器功能相互触发以执行需要多个功能的工作流是很常见的,但团队应该尽可能地隔离每个功能。
功能之间的隔离意味着对功能配置应用“零信任”方法:默认情况下,任何功能都不应盲目信任另一个功能或认为从其接收的数据是安全的。此外,工程师应该通过严格限制功能可以访问的资源来围绕每个功能配置严密的外围环境。
最后,在可能的情况下,团队应该避免让功能直接调用彼此,因为这种方法会在一个功能被黑客破坏的情况下打开资源耗尽攻击等问题的大门。相反,使用外部控制平面来管理功能执行,而不是依赖于嵌入到单个功能中的逻辑。
结论:保护无服务器功能和技术
简而言之,无服务器功能是一项强大的技术,但它们有其局限性,尤其是在安全性方面。在采用无服务器之前,必须了解潜在的安全风险,并采取措施将防御措施融入到无服务器的总体战略中。