vlambda博客
学习文章列表

云原生Kubernetes环境的安全清单

Kubernetes正在更快地被采用,它的一个重要方面是安全性——这让早期的采用者束手无策。与VM相比,许多人怀疑容器和Kubernetes的安全性,并因此放弃。但慢慢地,人们开始相信容器和Kubernetes和物理机和虚拟机一样安全。             


安全是一个多层面的问题,必须从许多不同的角度加以解决。下面的清单涵盖了应该在整个堆栈中审查的主要安全领域。             


安全必须是任何组织的DevOps过程的“一等公民”,通常被称为DecSecOps。在DevSecOps中,安全问题从第一天起就被嵌入到DevOps管道中。DevSecOps实践支持大多数安全问题的自动化,并在开发过程中提供一系列安全检查。             


Kubernetes的安全性可分为4个方面:基础设施、Kubernetes、容器、应用。


              

保护基础设施              


基础设施级别的安全是最基本、最重要的任务。然而,在开发过程中它常常被忽略。在构建应用程序时牢记基础设施安全性是很重要的,因为它会影响应用程序需要如何构建。             


基础设施安全本身有许多方面:


一、网络。Kubernetes的部署大多是微服务,所有的微服务都在相互通信或与外部应用程序和服务通信。将网络流量限制在必要的范围内是很重要的,同时要了解微服务可能是短暂的,并且可以在集群中的节点之间移动。为了开发一个安全的网络,你需要考虑网络设计的各个方面:控制流量的隔离,存储流量的隔离,网络分割,服务质量,网络策略、防火墙和ACL。


二、存储。对于任何组织来说,存储都是安全的关键部分。黑客通常会寻找保存在应用程序存储中的机密数据。使用Kubernetes的开发人员应该考虑以下形式的存储级安全实现:自加密驱动器、卷加密、服务质量。             


三、主机和操作系统(OS)。下一级的基础设施是物理或虚拟主机本身。运维人员希望通过以下方式保障其安全:强化操作系统、启用内核安全、审计日志记录、轮换证书、锁定节点、CIS一致性。             


四、主机级访问管理。Kubernetes集群的最弱点是节点本身。由于Kubernetes将用户与底层节点隔离开来,因此控制对节点的访问非常重要:严格访问、建立锁定、隔离Kubernetes节点、主节点。             


保护Kubernetes              


下一个需要保护的层是Kubernetes安装本身。在一个典型的开源Kubernetes安装中,其中许多需要手动配置,因为它们在默认情况下并不都是打开的。    

        

一、安全etcd。etcd是高可用的键值存储,用作Kubernetes对所有集群数据的备份存储,保护etcd非常重要。如前所述,etcd中的节点应该以最小的访问权限锁定。             

二、保护对Kubernetes clust的访问。Kubernetes允许企业使用标准的身份和访问控制解决方案,但它们需要与环境集成,并且默认情况下不提供。访问控制可以分解为以下组件:身份验证、授权、许可控制。             


三、安全策略。Kubernetes提供了一些可由用户定义的可配置策略。这些应该与企业实践保持一致,但在默认情况下不是“开”的:Pod安全策略、网络策略、Kubernetes为计算资源(CPU和内存)提供服务质量(QoS)保证,以避免噪声邻居或资源匮乏问题,但它不为I/O(存储和网络)提供QoS。


四、工作负载隔离和多租户。在多租户环境中,每个租户或租户组必须具有单独的命名空间,以将工作负载和数据彼此隔离。CNI、CSI和身份验证插件需要支持这些分隔和边界,以便它们在整个堆栈中保持一致。             


保护容器              


在开发和运行容器时,必须对其进行保护。以下是一些关键元素:             


一、容器镜像安全。所有正在运行的容器都基于一个镜像文件,该文件可以从Docker Hub之类的开放库下载,或者从一个团队传递到另一个团队。重要的是要知道你的镜像从哪里来,里面是什么。所有这些举措都应该是DevOps流程的一部分,以实现自动化并确保镜像安全:镜像漏洞扫描、镜像签名、限制权限。             


二、容器运行时。容器运行时是安装在操作系统中的程序。目前,大多数环境都使用Docker,因为Docker提供了CIS基准。Seccomp可用于减少攻击面,而更新的运行时(如CRI-O)具有额外的内置安全功能。


三、运行容器。许多工具(如Twistlock、Aqua和Sysdig)还通过监控网络和系统调用,为运行时漏洞提供持续监控和威胁预防。这些工具还能够拦截和阻止不需要的呼叫或通信,并强制执行安全策略。             


保护应用程序              


在保护底层基础设施、Kubernetes和容器之后,保护应用程序本身仍然很重要。             

一、应用程序访问。包括用于Kubernetes入口的TLS、加密传输中的所有内容。             

二、通信。包括网络、端口。             


三、应用程序硬化。应该在CI/CD管道中构建许多DevOp实践,以确保应用程序安全并遵循最佳实践。例如:定期分析源代码,确保它遵循最佳实践,避免漏洞和威胁(有很多可用的工具,如Veracode和Synopsys);大多数开发人员依赖第三方应用程序和库来构建应用程序和微服务。定期扫描代码依赖关系以查找新的漏洞可确保它们不会对应用程序的安全造成威胁;针对常见的攻击实践(如SQL注入、DDoS攻击等)不断测试应用程序(有各种动态分析工具可提供帮助)。             


总结              


安全始终是组织最关心的问题。但传统上,安全性独立的,远离开发过程。开发人员通常将注意力集中在应用程序上,安全团队在开发周期快结束时介入其中。安全和开发团队之间这种不健康的交互不仅会导致开发出来的软件易受攻击,还会导致许多最后时刻的错误和意外的生产延迟。             


在容器和Kubernetes的新时代,安全实践的强大自动化是很重要的,安全应该从一开始就集成到开发周期中。DevSecOps现在是焦点,因为安全性在DevOps过程中变得根深蒂固。挑战在于,上面清单中列出的许多项必须跨多个域手动配置。遗漏其中一项可能会使整个应用程序和公司面临风险。             


原文链接:

https://thenewstack.io/a-security-checklist-for-cloud-native-kubernetes-environments/