技术发展的目标在于解决问题,但大部分新兴技术的诞生与普及往往又带来了新的问题。同样的情况,也出现在过去十年来颠覆整个IT格局的三大重要新兴技术身上——微服务、容器与Kubernetes。微服务架构与容器化应用程序解决了不少难题,但也带来了在管理、安全性与合规性等方面新的挑战。
有效使用这些新技术的前提,自然是从容应对这些挑战。在本文中,我们将介绍企业在运用微服务与容器技术方面迎接的一系列挑战,以及有望解决问题的最佳实践。
安全性、合规性与容器化应用程序
微服务与容器技术之所以给IT团队带来一系列新挑战,原因非常简单,是因为它们引入了一系列的层 (layers) ,而且将部分层转移到应用程序部署当中。随着复杂性的不断提升,满足安全性及合规性要求的难度自然也越来越大。
具体来说,目前典型的微服务应用程序部署中包含以下几层:
容器镜像,用于容纳应用程序代码。
容器运行引擎,例如Docker,用于启动单一容器。
Kubernetes,负责管理所有容器。
底层基础设施,用于托管容器镜像、运行时以及Kubernetes编排工具。
每个层都存在自身潜在漏洞与安全风险。容器镜像中可能包含恶意代码,容器运行时或Kubernetes可能遭到权限升级攻击,或者包含可用于对容器集群内部分资源进行未授权访问的漏洞。主机基础设施则可能因操作系统层级或者云服务商IAM框架中的漏洞或配置错误而遭到侵害。
除此以外,在容器化环境中建立强大可靠的安全体系,还有着自己的一整套特殊要求,具体包括:
将各容器与Pod彼此隔离。
将主机与各容器及Pod隔离开来。
管理组成容器集群的各类网络,并确保网络之间相互隔离。
保护容器集群所依赖的一切持久性数据存储。
在高度动态且不断变化的环境中满足合规性要求。但整个审计往往需要数周甚至数月才能完成,遵循“瀑布式”时间表,因此难以跟上实际情况变化。
与虚拟机等传统架构相比,上述这些要求给IT团队的保护工作带来不少的麻烦。相较之下,传统虚拟机天然彼此隔离,一般也不需要在不同的网络、应用程序组件或者存储资源之间进行隔离。而这一切,都成为IT团队在部署容器化应用程序时必须面对的挑战。
容器带来新的安全机遇
看到这里,你可能觉得容器与微服务在本质上缺乏安全可靠性。或者说,只有付出更多努力,才能对其加以正确管理与保护。而实际上,容器技术虽然带来了一系列新的安全挑战,但同时也给IT团队提供了新的应对性工具与策略:
第一,是对环境配置采用声明式方法的能力。在Kubernetes集群当中,几乎所有内容都可以通过简单的JSON或者YAML文件进行配置。因此,IT团队可以创建一组文件,利用这些文件定义集群的行为方式、不同组件的隔离方式等等,而后据此构建环境。在这方面,将安全权限集成至Kubernetes环境配置当中的难度,要远远低于以往先构建环境、再对其进行额外的安全保护。
第二,Kubernetes与容器还能够轻松构建起不可变基础设施,这意味着用户一般会通过完全撤销其前身、而非对运行中的组件进行更新,来部署新的容器与Pod。不可变基础设施使团队能够在部署之前更全面地审查新软件发布,并减少因意外配置问题将安全风险引入生产环境的可能性。
因此,容器、微服务与Kubernetes并不一定会提高安全性与合规性的实现难度。换言之,引入更多层与组件只是扩大了IT团队需要管理的攻击面;但与此同时,新的技术也带来新的工具与策略,最终令全面管理攻击面成为可能。
保护现代架构的最佳实践
除了以上提到的特定策略之外,组织还可以采用以下重要方法尽可能提升基于容器、基于Kubernetes类环境的安全水平。
Kubernetes集群一旦启动并开始运行,其极高的复杂度会给保护工作带来巨大压力。因此,团队必须在集群启动之前就进行安全性设计,借此降低相关风险。如上所述,声明式配置有助于实现这项目标。
同样的,IT团队还应该在用于部署及管理容器化应用程序的代码当中,充分引入安全保护机制。换句话说,单在实际环境中扫描漏洞或跟踪恶意行为还远远不够;你需要确保用于控制环境以及运行应用程序的代码本身安全可靠,同时以自动化方式持续审计以检测一切非安全配置。
通过这种方式,IT团队可以从先破坏、后修复这一被动方法(即只有在问题发生后才能发现漏洞)过渡至对环境进行默认安全保护的主动方法。
由于Kubernetes环境中包含大量层,且每一层都拥有匹配自己的安全审计与监控类型,因此IT团队需要采取相应措施分别加以保护。与简单的基础设施不同,容器与微服务无法通过单独关注其中某一层实现有效保护。
Kubernetes提供一系列原生安全功能,IT团队可以借此帮助实现隔离并缓解安全风险。但需要主要的是,Kubernetes本身并不属于安全工具,因此请务必充分了解这些原生工具的局限性,并明确需要部署哪些其他工具以填补安全空白。
总结
使用微服务、容器与Kubernetes构建的现代基础设施,确实要比传统应用具有更大且更为复杂的攻击面。但在这种复杂性提升的同时,我们也迎来了运用新工具与新策略应对现代环境安全挑战的重大机遇。因此,保障Kubernetes部署安全的核心在于充分把握这些机遇,一味在现代环境中坚守传统安全实践将无异于给业务体系埋下“定时炸弹”。