在本指南中,我们将探讨在云端运行容器的好处,并仔细探讨如何确保容器化工作负载的安全性。
如何在云端运行容器
与传统应用程序相比,容器镜像不仅包含应用程序,还包含了所有依赖项,包括系统库、驱动程序和配置。容器镜像简化了部署,让虚拟机上手动配置操作系统和容易出错的设备安装变成过去式。部署变得流畅、快速、无故障。
所有大型云服务提供商(CSP)都为运行容器工作负载提供了多种云服务。第一种方式是客户部署自己选择的开源或第三方容器平台(如RedHat OpenShift或Apache Mesos)。他们自己在云端的虚拟机上安装这些平台。因此,在这种情况下,云提供商不参与容器平台的安装和运行。
第二种选择是在CSP提供的托管容器平台服务上运行容器。例如,Azure Kubernetes Service(AKS)、Google Kubernetes Engine(GKE)和Amazon Elastic Kubernetes Service。只需点击一下,Kubernetes集群就会自动启动。
在这种模式下,容器和平台配置由客户负责,这是这种模式与第三种选择(云端集中容器运行时平台,如Azure Function Apps或Azure Web Apps)的主要区别。除了其他选项外,后一种服务还让工程师能提供容器化应用程序,并隐藏底层容器平台的存在。因此,安全架构师面临的挑战是如何确保这一大堆运行容器化应用程序的平台的安全。
容器安全要求
为了有效地保护容器工作负载,安全架构师需要全面了解技术层和安全相关任务。这些任务旨在加固所有相关组件、管理漏洞以及主动识别和应对整个技术栈的威胁和攻击。
加固需要安全地配置所有组件,特别是采用强大的访问控制和网络设计。漏洞管理应识别自主开发和第三方组件中的安全漏洞和错误配置,并对其进行修补。即使容器镜像在部署时没有漏洞,也可能在之后发现漏洞,Log4j就是一个例子。最后,黑客可以攻击容器化应用程序和底层容器平台。因此,企业必须监测容器资产中的异常情况和可疑行为(威胁检测)。
加固、漏洞管理和威胁检测对整个技术堆栈(图3,左)都是必需的,包括:底层基础架构层(虚拟机、网络、存储或云租户设置)、容器平台本身(如OpenShift或Amazon Elastic Kubernetes Service EKS),最后是每个容器化应用。
平台层的职责因云服务而异。对于Azure App Functions等容器化运行时环境,客户必须确保镜像无漏洞,服务配置安全;其他一切均由CSP负责。相比之下,使用Amazon EKS集群则意味着容器平台配置也是客户的责任,不过CSP会为平台组件打补丁。
图4显示了与容器工作负载相关的所有安全挑战。如果客户而不是CSP负责特定层的话,安全架构师就必须了解并确定如何处理运行容器镜像的每个云服务(如Azure Function App、Amazon EKS、Cloud Run)的每一个技术堆栈层(应用、平台、基础设施)的安全任务(加固、漏洞管理、攻击/威胁检测)。
为容器化工作负载提供安全保障
微软Defender或谷歌的安全中心等云原生安全工具是保护公共云中容器化工作负载安全的首选解决方案。这些工具可以检测容器工作负载和底层平台中的漏洞和威胁。虽然它们肯定不是免费的,但是客户只要点击一两下(或者很少几下)就可以激活,并且立竿见影地提高安全性。
Azure Function Apps是可以运行容器化工作负载的Azure服务之一,在研究Azure Function Apps时,微软的Defender for Cloud是最合适的产品。首先,它提供Defender Recommendations,这些建议列出了不安全的参数和配置选择,如“应该只能通过HTTPS访问Function App”。这些建议(部分)基于CIS基准。Defender的第二大功能Attack Paths分析着眼于更广泛的环境。它能够识别利用多种非完美配置选择入侵公司云资产的攻击路径(2)。最后,Defender Security Alerts会就正在进行的、可能是攻击的活动向专家发出报警(3).
微软Defender之于Azure就像是Amazon GuardDuty之于AWS或者Google Security Command Center之于GCP:很棒的开箱即用云原生服务,可确保(不限于)基于容器的工作负载的安全。除了这些云原生解决方案,第三方安全工具也是可行的选择。规模较大的企业应该对它们和云原生服务的功能和成本进行比较。
当首席信息安全官们要求全面覆盖所有基于云的容器工作负载时,容器安全的真正挑战就开始了。这时,安全架构师需要分别分析每个相关的云服务。在分析过程中,他们应特别关注三个问题:
加固是根据公司具体的工作负载和云设置来定义粒度规则。什么时候可以接受虚拟机公开暴露?API调用何时需要(或者必须不要)身份验证?这是一个更为全面的目标,不仅仅是确保不存在明显的漏洞。
针对容器或容器镜像的漏洞扫描有两种模式:存储库扫描和运行时扫描。后者只检查有风险的、正在使用的镜像,这样做的好处是:不会因为已创建但未部署的镜像给出误报。不过,并非所有服务都有运行时扫描。后备方案是扫描GCP Artifact Registry等存储库中等镜像,这种方式还允许将漏洞扫描集成到CI/CD管道中。
威胁检测需要分析容器中的活动和底层平台中的可疑行为和异常。与基于容器的漏洞扫描类似,安全架构师可能需要仔细检查所有基于容器的环境是否都有这种功能(并处于激活状态)。
此外,第三方容器安全解决方案当然也是可行的选择。不过,至少对于大型企业来说,必须将它们的功能和成本与云原生解决方案进行比较。
遏制威胁
对于首席信息安全官们来说,容器安全的可怕现实是,容器技术已经渗透到大多数IT组织中。虽然首席信息安全官和首席信息官们通常都了解手头的大型Kubernetes集群,但他们不太了解很多不那么起眼但也使用容器的云服务。由于黑客的目标是找到未受保护的服务(而不是攻击受保护的服务),因此企业必须分析容器工作负载的位置,并确保所有容器的安全。