作者/Nicolas Giron
来源/翻译外网
Kubernetes 是当今许多公司采用的容器编排平台 。
它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群。因此,实施工作原理或工具至关重要,需要所有团队(运营、开发、安全等)的工作,以促进尽快发现异常,从而提高编排器及其资源的安全级别。
01
预提交挂钩
主要目标是通过尽早在持续集成管道中添加自动化流程来最大程度地减少对生产的影响,这是当今 DevSecOps 世界公认的原则。
引入了这种称为“安全左移”的做法,以促进开发、安全和运营团队之间的协作。这个想法是通过将安全和测试过程移到传统线性SDLC 表示的左侧,从添加预提交开始,在开发周期的早期确保应用程序安全。
近年来出现了几种工具来促进这种集成,以便:
- 格式化 YAML 文件代码
- 检测 Kubernetes 资源配置中的异常
- 强制应用配置和安全策略以尊重良好的开发实践
- 在提交任何源代码之前检测敏感数据
以下是控制 YAML 定义文件的三个很好的工具示例:
- YAML 皮棉
- 切科夫
- K8s 验证
02
持续集成检查
DevSecOps 团队很少会强制执行预提交测试,通常建议使用它们来促进团队合作。在某些情况下,pre-commit 任务的实现可能很麻烦,特别是对于大型团队而言。这些测试仍然是必要的,因此必须在持续集成过程中进一步移动。
预提交任务可以分为,首先对代码进行格式化,然后对代码进行扫描以验证配置文件的一致性。
上一节中提到的工具仍然是不错的选择。可以将Datree添加到此列表中,这是一个易于使用的 Web 平台,允许 DevSecOps 团队轻松开发、版本控制、查看和执行安全规则,以确保在部署之前符合 YAML 文件。
03
图像扫描
甚至在部署之前扫描图像是一个重要且有时被忽视的步骤,因为许多人认为官方图像是安全的。尽管如此,扫描它仍然很重要,因为每天都会发现新的漏洞,并且更新任何具有安全漏洞的系统以限制恶意人员攻击的范围也很重要。
这些扫描必须在容器生命周期的不同阶段执行
- 在将镜像发布到远程注册表之前,确保相关镜像在部署之前就符合安全规则
- 在容器运行期间,尽快确定需要重建的镜像以纠正新发现的漏洞
可以使用几个开源工具来收集这些数据并通知团队发现的问题,例如:
- 琐碎
- 新向量
04
集群扫描
保护 Kubernetes 集群取决于公司的安全治理。应用的政策必须考虑到可访问性、维护、数据管理等。
尽管如此,重要的是要遵守社区确定的一些规则,以确保在安装集群后立即获得良好的基本安全级别。还建议定期扫描 Kubernetes 集群,以便在其运行时识别任何已知异常,主要与其配置有关。
有几种工具可以自动化和生成异常检测报告,例如:
- 右舷由 Aqua Security 开发
- VMware 开发的声纳浮标
05
安全上下文
Kubernetes Security Context 遵循最小权限原则:主体应该只获得执行任务所需的权限。
安全上下文是一种允许管理员根据每个资源定义安全相关参数的工具。这允许每个资源获得访问主机服务器上的资源所需的特定权限,同时拒绝访问它不特别需要的资源。在 Kubernetes 上下文中,安全上下文定义了 pod 中各个容器的权限。
管理安全上下文需要对集群、其安装和生态系统进行高级管理和理解。尽管它们的实现很复杂,但这些措施仍然是限制任何 pod 或容器操作的非常有效和原生的方式。
06
基于角色的访问控制
利用 Kubernetes 基于角色的访问管理 (RBAC) 是保护在平台上运行的集群和应用程序的基本第一步。RBAC 原则非常简单:根据用户身份定义谁可以访问什么。
Kubernetes 有一个有效的粒度来管理对不同资源的访问:
- 导致用户帐户的用户访问
- 导致服务帐户的应用程序访问
- 用于定义权限的角色仅限于单个命名空间的资源
- 集群角色以应用集群级别的限制
这种粒度与外部身份提供者(如 Okta、Gmail、LDAP 等)相结合,可以对访问进行非常精细的管理,从而确保对资源的控制以及通常的可审计性。
07
网络政策
网络安全规则的管理可以成为移动安全概念的一部分。Kubernetes 网络策略允许管理员和开发人员使用规则强制执行允许哪些网络流量。左移原则允许开发人员在不了解低级网络概念的情况下安全地访问和访问他们的应用程序。
DevOps 团队可以强制执行默认策略,开发人员可以管理特定的访问权限,从而使他们在管理应用程序方面具有一定的自主权。
网络策略由部署在集群上的容器网络接口 (CNI) 控制。几个 CNI 提供了此功能,但这里有两个值得特别注意:
- Calico可能是 Kubernetes 生态系统中最著名和使用最广泛的 CNI。在这个免费版本中,Calico 可以将这些网络规则管理到 OSI 模型的第 3 级。要管理更高级别,有必要使用付费版本。
- Cilium是一个很好的替代品或附加组件,它在 OSI 模型的所有 7 层上提供了许多免费功能。
08
政策执行
Kubernetes 是一个主要基于 API 的应用程序。这种方法使得开发对这些不同资源的访问控制工具成为可能,以便对其进行审计和保护。
准入控制器是 Kubernetes 客户端(例如 Kubectl)发出的所有请求的入口点。在此阶段添加检查点可以让您在执行所有查询之前对其进行验证,从而防止任何偏离公司安全治理的行为。
这些控制点可用于:
- 检查是否设置了 CPU 和内存限制
- 确保用户不会更改默认网络策略
- 确保特定资源始终包含特定标签
- 拒绝特定资源的权限
- 防止使用最新标签
- 为每个新命名空间生成默认网络策略
今天可以使用多种工具来管理这些安全规则:
- Open Policy Agent (OPA) 可能是最著名的在 Kubernetes 上执行策略的应用程序。OPA 策略以称为 Rego 的高级声明性语言表示。
- Kyverno可以使用准入控制和后台扫描来验证、变异和生成配置。Kyverno 策略与任何 Kubernetes 资源一样以 YAML 文件表示,并且不需要学习新语言。
强烈建议在任何 Kubernetes 集群的基本配置文件中包含这些工具之一。
09
运行时威胁检测
Kubernetes 不是一个安全的平台。它缺乏处理大多数与安全相关的任务的本地工具,例如检测应用程序中的漏洞和监控违规行为。
异常或威胁的实时检测是任何安全治理的重要点。Kubernetes 平台也不例外。相反,它在数据管理等不同领域的广泛使用使其安全性成为其业务运营的关键点。
市场上出现了几种开源工具来识别容器和应用程序的任何偏差行为,例如:
- 由 Aqua Security 开发的Falco
- 新向量
两者都允许在运行时检测威胁,并发送由事件报告补充的警报,以采取必要的措施。
10
过时的资源
Kubernetes 是当今 DevOps 世界的主要参与者,因为它的灵活性和对生产中新功能交付的影响。该工具允许开发团队提高他们的部署速度,因此需要特别注意所使用的资源,以免使用过时的资源危及集群的安全性。
有不同类型的过时资源:
- 已弃用的 Kubernetes API
- 旧的/不推荐使用的 Kubernetes 资源(如 Helm 版本)
已弃用的 Kubernetes API 不一定是安全漏洞,但它们会影响集群的生命周期,从而影响其维护。Pluto是由Fairwinds开发的实用程序,用于帮助用户在其代码存储库和 helm 版本中找到已弃用的 Kubernetes apiVersions。必须在更新集群之前执行此类分析,以确保其成功并防止潜在的安全漏洞。
确保 Kubernetes 集群的保护还涉及扫描活动资源。作为包管理器,Helm 需要特别注意检查图表的生命周期,并遵循托管资源的每周或每月更新计划。Fairwinds 开发的另一个工具Nova可以自动执行此类扫描,以便快速检测需要更新的图表,甚至在已弃用的情况下将其从集群中删除。
有疑问加站长微信联系(非本文作者)