暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kubernetes安全最佳实践

云原生CTO 2021-02-09
204

       点击上方 云原生CTO,选择 设为星标

               优质文章,每日送达

----------------------------------------------

     「【只做懂你de云原生干货知识共享】」


Kubernetes安全最佳实践

Kubernetes是一个用于容器化工作流程的开源编排平台。这是大规模管理或协调大型集装箱集群的最佳方法。Kubernetes,有时缩写为K8,可以帮助您有效地管理运行Linux容器的主机集群。

在容器时代,Kubernetes已成为流行的开源项目和现代技术基础架构的关键构建块。容器需要进行管理,Kubernetes可以帮助执行诸如调度,负载平衡和分发之类的任务,同时确保容器工作负载按预期运行。使用Kubernetes,您可以在不依赖于云的特定需求的任何地方部署和管理云原生应用程序,从而避免基础架构锁定。

Kubernetes是舵手或飞行员的希腊语,如今正迅速普及。根据Cloud Native Computing Foundation(CNCF)最终用户社区的一项调查,Kubernetes的使用率已从2018年的58%增加到2020年的91%。在过去四年中,根据Tech Republic,Kubernetes的工作搜索量增加了2,125%, CNCF最近推出了Kubernetes安全认证。

Kubernetes和容器无处不在。随着安全性的日益普及,安全性应该成为首要考虑因素,而不是事后考虑。

Kubernetes安全性和云原生环境 Kubernetes安全问题和DevOps Kubernetes安全最佳实践 Kubernetes安全上下文 Kubernetes安全工具 Kubernetes安全审核 减少Kubernetes的攻击面 Kubernetes安全性和云原生环境

尽管Kubernetes具有多个内置的安全优势-例如,通常替换,不打补丁或更新容器镜像会导致更好的版本控制-但其使用增加意味着暴露的机会更大。由于Kubernetes是一种相对较新的复杂技术,没有足够的人才来完全管理和保护它,因此它对黑客也极具吸引力。

在解决Kubernetes安全问题时,几乎不可能将Kubernetes集群与其他云计算层分开。这些层包括应用程序或代码本身,容器镜像,Kubernetes集群以及云或网络层,如下图所示。每一层都建立在前一层之上,并且必须对所有层进行保护以实现深度防御。

云原生安全层

Kubernetes安全问题和DevOps

从开发人员的角度更具体地考虑Kubernetes安全的另一种方法是在DevOps管道的三个不同阶段对其进行研究:

  • 在构建期间创建容器镜像

  • 在部署期间配置Kubernetes基础架构

  • 在生产中确保网络通信的安全

构建期间的Kubernetes安全

当编写成为容器镜像的代码时,Kubernetes安全性从构建阶段开始。尽管在构建和打包阶段不一定要使用Kubernetes,但是安全的环境始于评估与部署任何代码相关的风险。应用程序安全最佳实践和测试在这里很重要,而将安全性向左转移的任何努力都会避免将来在部署和生产中出现问题,从而带来收益。

在此阶段,您需要确保您的容器镜像是最新的,没有安全漏洞,并且符合您的许可策略。容器是内置层,通常没有容器镜像最终构建中包含哪些开源组件的规范列表。为了解决这个问题,您需要扫描容器以确定应用程序内部正在使用哪些开放源代码库,包括检查通过Maven或npm之类的程序包管理器引入的所有依赖项。通过发现和识别所有正在使用的开源组件,您可以识别任何已知的漏洞,确定在发现新漏洞时哪些映像处于危险之中,并跟踪与特定库关联的许可证。跟踪许可证合规性 可能不会带来安全风险,但是如果包括不兼容的许可证,则可能产生下游影响,例如公开专有代码。

确保定期扫描基础镜像是保护Kubernetes环境的第一步。

部署期间的Kubernetes安全

部署Kubernetes时,会获得一组强大的控件来保护集群及其应用程序的安全。配置这些控件并不总是那么容易。它需要对Kubernetes有深入的了解,并且需要部署的安全要求。不要使用默认值!它只会导致不必要的(甚至是疏忽大意的)暴露。至少,您应该限制用户权限的范围,限制对Kubernetes节点的直接访问,并创建网络分段,以便容器仅与他们应该使用的容器进行通信。

在此阶段进行扫描仍然至关重要。容器映像必须使用安全的基础镜像构建。您需要实施连续的安全漏洞扫描,并定期将安全更新应用于您的环境。扫描不是一次性事件。另外,在Kubernetes环境中启动容器时,仅使用允许列表中镜像注册表中的图像。

Kubernetes生产中的安全性

运行时中的应用程序安全性与构建阶段有很大不同。值得注意的是,网络安全性更为复杂。Kubernetes中网络安全的最佳实践超越了基本网络,并利用容器网络接口(CNI)来实现更健壮的网络层,其中包括多租户支持,网络策略或两者兼而有之。

在多租户网络中,Kubernetes集群中的每个名称空间都有一个专用的可寻址子网,并且只能访问其他特定作为服务公开的名称空间中的Pod。Open vSwitch是具有多租户支持的Kubernetes网络层的一个很好的例子。

大多数下一代网络层中的网络策略都可以通过Kubernetes进行部署。Calico项目是广泛使用的网络层的一个示例,该层是从头开始构建的,以支持带有容器的网络策略。网络策略使群集管理员可以预定义网络访问控制列表,以控制可访问哪些端口以及可以访问哪些服务。

Kubernetes安全最佳实践

虽然这还不是详尽无遗的清单,但是这里有一些关于Kubernetes安全的最佳实践,可以在各个阶段帮助您入门。

构建期间的Kubernetes安全

扫描镜像和源代码–与任何应用程序一样,使用各种扫描工具(例如SAST, DAST, IAST或SCA)实施应用程序安全性测试的最佳实践,将有助于确保您的代码尽可能安全。

不要忘了开源– 市场上几乎所有专有软件产品中都包含开源代码,约占所有软件代码库的60%-80%。如果您没有积极地管理开源代码,那么您将不安全。

实施工作流程以补救漏洞–使您的工作流程自动化,以确保尽快纠正漏洞并确保代码安全。

使用更新的镜像–不用说,但是请确保您使用的是最新的镜像,因为它可能是最安全的镜像。销毁所有过时的镜像;修补它们实际上是不可能的。

部署期间的Kubernetes安全 不要部署来自未知来源的镜像–如果您不知道镜像的来源,就无法信任它。

在部署过程中扫描镜像–您可能会发现自从上次扫描镜像以来就发现了新的漏洞。

使用镜像准入控件–如果图像违反您组织的安全策略,则准入控件将停止该镜像,并阻止容器以超出其任务所需权限的特权运行。

限制容器使用的特权–如果恶意用户控制了容器,则授予容器广泛的权限可能会出现问题。通过限制容器的特权来限制暴露,并且永远不要运行容器的特权标志。

不要使用默认值–在容器业务流程中启用基于角色的访问控制(RBAC),以根据组织内各个用户的角色来管理访问。

Kubernetes生产中的安全性

在生产环境中扫描镜像–同样,我们对此压力还不够大:新漏洞一直在被披露。确保对连续扫描镜像一丝不苟。

使用容器防火墙保护网络安全–您可以使用容器防火墙保护和检查网络,该容器防火墙将传统的网络安全技术应用于云原生Kubernetes环境。

实施网络安全策略–通过创建和定义群集网络策略来密切关注网络流量,这些策略允许您控制进出容器化应用程序的网络访问。

使用名称空间建立安全边界–名称空间是Kubernetes中的虚拟集群。它们使您可以在多个用户之间分配群集资源。

为Pod创建安全策略– Pod是Kubernetes中最小的执行单元,用于组织容器。Pod安全策略可用于解决诸如以root用户身份运行的容器之类的问题。

在同一部署中分析Pod –复制时,Pod应该表现出相同的行为。监视和分析pod。如果您发现它们的行为有所不同,则需要立即进行调查以确保未发生违规行为。

保护Kubernetes

经常更新Kubernetes – Kubernetes支持仅涵盖最新的三个版本。如果您不定期更新Kubernetes,则会错过新发现的安全漏洞补丁程序。作为奖励,在每个季度的Kubernetes更新中都会添加新的安全功能。不要因为基本的监督而暴露您的组织。

Kubernetes API –请勿公开暴露Kubernetes API,仅允许通过内部网络或VPN访问。

Kubernetes安全上下文

Kubernetes安全上下文为Pod和容器定义特权和访问控制设置。安全上下文建立分配给每个pod或容器的安全参数。将其视为确定应如何以及由谁访问给定资源的一组规则。请记住:不要以root身份运行!

下表显示了一些最重要的Kubernetes安全上下文参数。

Kubernetes安全上下文设置

Kubernetes安全工具

Kubernetes和容器的挑战之一是缺乏可见性,这使得补救漏洞变得更加困难。由于镜像会不断旋转并记录下来,因此由于系统流量恒定,因此扫描更加难以完成。

在寻找Kubernetes和容器安全工具时,请寻找为处理特定于Kubernetes的威胁而构建的工具。优先考虑使用您选择的Kubernetes发行版提供本机支持的工具和供应商。此外,还要寻找能够扫描部署到生产环境中的Pod的漏洞或合规性问题并自动执行策略的工具。

Kubernetes安全审核

随着技术的成熟,组织正在不断地更新和升级Kubernetes环境。建议定期进行审核以确定Kubernetes部署的运行状况和安全性。完成审核时,请注意以下几个方面:

  • 主机安全

  • Kubernetes安全

  • Docker守护程序安全性

  • 集装箱安全

  • 正确配置的基于角色的访问控制(RBAC)

  • 保护静态和传输中的数据

  • 镜像和容器的漏洞扫描

全面的Kubernetes安全审核可帮助您防止已知漏洞。

减少Kubernetes的攻击面

Kubernetes等云原生环境的复杂性在实施安全最佳实践以及实现内部安全策略和合规性目标时提出了新的挑战。使用此处列出的技巧作为起点,您可以开始强化Kubernetes环境并减少攻击面。通过有效的安全最佳实践,您可以对Kubernetes部署的每一层都具有可见性并对其进行控制。

参考文献

https://resources.whitesourcesoftware.com/blog-whitesource/kubernetes-security

烟一支一支一支地点 酒一杯一杯一杯地干「——浪子回头  茄子蛋」

【一个懂你的云原生知识共享平台】

「欢迎扫描下方二维码关注」


文章转载自云原生CTO,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论