Kubernetes安全是许多组织面临的问题。TechRepublic在2020年发表的一篇报告显示,94%的受访者表示,其组织在过去12个月遇到过涉及Kubernetes和容器环境的安全事件。近一半(44%)的组织通过延迟将应用程序部署到生产环境来应对这些事件。
这些发现表明,对于力求将容器和Kubernetes应用程序部署到生产环境的组织来说,安全是优先事项,而且需要继续是这样。为了尽可能顺畅地部署,组织要了解整个应用程序开发生命周期的安全和合规要求。这意味着将安全集成到容器生命周期的三个阶段:构建、部署和运行时。
第一个阶段:构建
应用程序开发生命周期的构建阶段中存在的漏洞在运行时可能变得更难修复,且成本更高。这就是为什么组织在构建阶段关注容器安全很重要。它们可以通过遵循这几个安全最佳实践来做到这一点:
- 构建安全映像:这里要记住的重要一点是,使容器尽可能简单。组织应避免使用拥有OS软件包管理器或外壳的容器映像。这种类型的资源可能含有漏洞,因而使攻击者有可能趁机而入。它们还应努力从容器中删除调试工具及其他不必要的组件,这些程序中的缺陷也可能向恶意攻击者敞开大门。
- 尽量缩小攻击面:组织需要认真查看容器的必要元素。为此,它们应确保运行最新版本的容器。这么做将有助于尽量减少漏洞的出现。此外,它们应利用映像扫描工具扫描容器以查找潜在的安全漏洞。该工具应能够扫描OS软件包和第三方运行时库中的漏洞,以查找容器化应用程序所使用的语言类型。如果该工具检测到漏洞,组织应利用漏洞管理工具优先考虑适当的修补程序。如果组织认为某个漏洞没必要(立即)修复,还可以选择使用白名单规则,确保该漏洞没有影响安全团队。
第二个阶段:部署
组织需要在部署Kubernetes基础架构之前做好保护。这项工作应先确保组织对其网络有足够的可见性。Help Net Security(https://www.helpnetsecurity.com/2019/06/17/runtime-container-security/)阐明了可见性对于确保容器安全的重要性:
通过深入的可见性和保护来保护网络至关重要,因为网络是防止恶意攻击者接触工作负载的第一道防线。同时,网络是保护数据以免泄露的最后一道防线。在这第一道防线和最后一道防线之间,网络可见性和适当的网络控制可以防止内部东西向流量内的攻击不断升级。
在可见性方面,除了具体了解能访问哪些资源外,组织还要具体了解每种资源部署在哪里、如何部署。然后,它们可以利用网络策略来调整在Pod和集群之间传输的流量。正如Kubernetes在官网上指出,默认情况下pod不是隔离的,因此可以接受来自任何来源的流量。幸好,组织可以通过创建网络策略来限制这些通信流。
组织也不应忘记在部署阶段扫描映像。一旦获得了这些扫描的结果,就要对其采取行动。比如说,如果容器映像缺少扫描结果或存在已知漏洞,组织可以使用那些扫描的结果以及准入控制器来拒绝部署应用程序。
第三个阶段:运行时
最后但并非最不重要的一点是,组织需要在运行时阶段致力于容器安全。在此阶段,可见性和映像扫描仍然很重要。但是组织需要记住一些重要的差异。StackRox介绍了映像扫描在构建阶段和运行时阶段之间有何区别(https://www.stackrox.com/post/2020/04/container-image-security-beyond-vulnerability-scanning/):
在生产系统上运行时,可以利用生成和编译应用程序所使用的构建工具。请记住,应将容器视为暂时的临时实体。切勿计划“打补丁”或更改运行中的容器。构建新映像,并替换过时的容器部署。使用多阶段Dockerfile,使软件编译远离运行时映像。
同样,组织可以确保其运行时容器安全的唯一方法是确保网络上的异常行为无处隐藏。 Help Net Security解释,因此,组织需要能够在第7层检查网络数据包。这么一来,组织还将能够利用深度数据包检查(DPI)及其他类型的技术,有助于发现更狡猾的攻击。
原文Build, Deploy, Runtime: The 3 Stages of Kubernetes Security,作者:David Bisson
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】