Kubernetes 是当今许多公司采用的容器编排平台,它的实施需要对其生态系统有一定的了解,以便部署一个准备好用于生产的集群。然而从原则上来说,Kubernetes 并不是一个安全的平台,因为它缺乏处理大多数与安全相关任务的本地工具。

 

因此,Kubernetes 的实施工作原理或工具至关重要,这个过程也需要包括运维、开发、安全等团队的共同合作,从而能够在短时间内以最快的速度发现异常,并提高编排器及其资源的安全级别。在本文中,我们将会一起讨论保护集群的安全原则。

Pre-Commit Hooks

DevSecOps 的主要目标就是通过尽早在持续集成流水线中添加自动化流程,从最大程度上减少对生产的影响,这也是当下公认的 DevSecOps 原则。因此,企业也开始引入“安全左移”的做法,来促进开发、安全和运营团队之间的共同协作,通过将安全和测试过程转移到软件开发生命周期的左侧。从添加预提交(Pre-commit)开始,在开发周期的早期确保应用程序安全

最近几年出现了几种工具来促进这种集成,以完成以下任务:

  • 格式化 YAML 文件代码
  • 检测 Kubernetes 资源配置中的异常
  • 强制应用配置和安全策略以保障良好的开发实践
  • 在提交任何源代码之前检测敏感数据

以下是控制 YAML 定义文件的三个不错的工具示例:

  • YAML lint
  • Checkov
  • K8svalidate

持续集成检查

预提交测试(Pre-commit test)通常被用来促进团队合作,但是 DevSecOps 团队很少会强制执行预提交测试。在某些情况下,pre-commit 任务的实现可能很麻烦,尤其是对于大型团队而言。不过这些测试仍然是必要的,因此必须在持续集成过程中推进。Pre-commit 任务可以分为两个部分,首先对代码进行格式化,然后对代码进行扫描来验证配置文件的一致性。

镜像扫描

由于许多人认为官方镜像是百分之百安全的,因此在部署之前往往会忽略扫描镜像这个步骤,但扫描镜像很重要,因为新的漏洞层出不穷。同时更新任何具有安全漏洞的系统来限制恶意攻击者的攻击范围同样也很重要。

这些扫描工作需要在容器生命周期的不同阶段执行:

  • 在将镜像发布到远程镜像仓库之前,确保相关镜像在部署之前就符合安全规则
  • 在容器运行期间,尽快确定需要重建的镜像来纠正新发现的漏洞

集群扫描

对 Kubernetes 集群的保护取决于公司的安全治理。应用的政策必须考虑到可访问性、维护、数据管理等。此外,更重要的是要遵守社区确定的一些规则,来确保在安装集群后立即获得良好的基本安全级别。还建议定期扫描 Kubernetes 集群,以便在其运行时识别任何与配置相关的已知异常。

安全上下文

Kubernetes 安全上下文遵循最小权限原则:对应人员应当只获得执行任务所需的权限。安全上下文是一种允许管理员根据每个资源定义安全相关参数的工具,它允许每个资源获得访问主机服务器上的资源所需的特定权限,同时拒绝访问它不特别需要的资源。在 Kubernetes 上下文中,安全上下文定义了 pod 中各个容器的权限。

管理安全上下文需要对集群及其安装和生态系统进行高级管理和理解,尽管它们的实现很复杂,但这些措施仍然是限制任何 pod 或容器操作的非常有效的方法。

基于角色的访问控制

利用 Kubernetes 基于角色的访问管理 (RBAC) 是保护在平台上运行的集群和应用程序的基本第一步。RBAC 原则非常简单:根据用户身份定义谁可以访问什么。

 

Kubernetes 有一个有效的粒度来管理对不同资源的访问:

  • 用户访问
  • 应用程序访问
  • 用于定义权限的角色仅限于单个命名空间的资源
  • 集群角色以应用集群级别的限制

这种粒度与外部身份提供者(如 Okta、Gmail 等)相结合,可以对访问进行非常精细的管理,从而确保对资源的控制以及可审计性。

网络政策

网络安全策略管理也是“安全左移”概念的一部分。Kubernetes 网络策略允许管理员和开发人员使用规则限制允许哪些网络流量,“左移”原则允许开发人员在不了解低级网络概念的情况下安全地访问和访问他们的应用程序。

 

DevOps 团队可以强制执行默认策略,开发人员可以管理特定的访问权限,从而使他们在管理应用程序方面具有一定的自主权。网络策略由部署在集群上的容器网络接口 (CNI) 控制。几个 CNI 提供了此功能,但这里有两个值得特别注意:

  • Calico可能是 Kubernetes 生态系统中最著名和使用最广泛的 CNI。在免费版本中,Calico 可以将这些网络规则管理到 OSI 模型的第 3 级。
  • Cilium 是一个很好的替代方案或附加组件,在 OSI 模型上提供了许多免费功能。

政策执行

Kubernetes 是一个主要基于 API 的应用程序。这种方法使得开发对这些不同资源的访问控制工具得以运用,以便对其进行审计和保护。准入控制器(Admission Controller)是 Kubernetes 客户端(例如 Kubectl)发出的所有请求的入口点。在此阶段添加检查点可以在执行所有查询之前对其进行验证,从而防止任何偏离公司安全治理的行为。

这些控制节点可用于:

  • 检查是否设置了 CPU 和内存限制
  • 确保用户不会更改默认网络策略
  • 确保特定资源始终包含特定标签
  • 拒绝特定资源的权限
  • 防止使用最新标签
  • 为每个新命名空间生成默认网络策略

DevOps 团队可以使用多种工具来管理这些安全规则,例如:

  • Open Policy Agent (OPA) 可能是最著名的 Kubernetes 执行策略应用程序。
  • Kyverno 可以使用准入控制和后台扫描来验证、变异和生成配置。Kyverno 策略与任何 Kubernetes 资源一样以 YAML 文件表示,不需要学习新语言。

建议企业的 DevOps 团队在任何 Kubernetes 集群的基本配置文件中包含这些工具之一。

运行时威胁检测

如之前所提,Kubernetes 并不是一个完全安全的平台,因为它缺乏处理大多数与安全相关的任务的本地工具,例如检测应用程序中的漏洞和监控违规行为。而异常或威胁的实时检测是任何安全治理的要点,同样对于 Kubernetes 平台也不例外。Kubernetes 在数据管理等领域的广泛使用使其安全性成为其业务运营的关键点。

过期资源

Kubernetes 是当今 DevOps 世界的主要参与者,因为它的灵活性和对生产中新功能交付有很大的影响。该工具允许开发团队提高他们的部署速度,因此需要特别注意所使用的资源,以免使用过期的资源危及集群的安全性。

有不同类型的过期资源:

  • 已弃用的 Kubernetes API
  • 旧的/不推荐使用的 Kubernetes 资源(如 Helm 版本)

已弃用的 Kubernetes API 不一定是安全漏洞,但它们会影响集群的生命周期,从而影响其维护。企业需要在更新集群之前在代码存储库和 helm 版本中找到已经弃用的 Kubernetes API,来避免潜在的安全漏洞。确保 Kubernetes 集群的保护还涉及扫描活动资源。作为包管理器,Helm 需要特别注意检查图表的生命周期,并遵循托管资源的每周或每月更新计划。

DevOps 必备的 Kubernetes 安全清单的更多相关文章

  1. 04 . kubernetes资源清单YAML入门

    YAML 通过k8s操作yaml配置文件在node上创建资源,yaml配置文件就像船垛,用来操控docker这艘大船 yam是专门用来写配置文件的语言,非常简洁和强大.而实际上使用yaml配置文件创建 ...

  2. [备忘] DevOps 工具上的准备清单(不断补充中……)

    目录 概念 发展历程 工具清单 规划 概念 从字面上来看,"DevOps"一词是由英文 Development(开发)和 Operations (运维)组合而成,但它所代表的理念和 ...

  3. kubernetes系列06—kubernetes资源清单定义入门

    本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...

  4. DevOps必备的20款顶级工具

    原文地址:http://os.51cto.com/art/201606/512423.htm 开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关.在整个开发生命周期涉及到一大批新旧工 ...

  5. 2019 DevOps 必备面试题——配置管理篇

    原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...

  6. (四)Kubernetes 资源清单定义

    Kubernetes常用资源对象 依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为五个类别,如下: 类型 名称 工作负载(Workload) Pod.ReplicaSet.D ...

  7. Kubernetes 学习5 kubernetes资源清单定义入门

    一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...

  8. kubernetes 资源清单定义入门

    k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...

  9. kubernetes资源清单之DaemonSet

    什么是 DaemonSet? DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本.当有节点加入集群时,也会为他们新增一个 Pod . 当有节点从集群移除时,这些 Pod 也会被回收 ...

  10. kubernetes资源清单之Deployment

    Deployment为Pod和ReplicaSets提供声明性更新 示例 --- apiVersion: apps/v1 kind: Deployment metadata:     name: de ...

随机推荐

  1. 安装配置华为Fusion acces(Lite AD)并使Windows登录

    安装Fusion access虚拟机 根据自己情况自定义 点击编辑虚拟机设置 添加镜像 点击确定并开启此虚拟机 选择第二个 Install 添加Network:修改hostname:修改密码 回车添加 ...

  2. KingbaseES DENSE_RANK 函数用法

    DENSE_RANK()函数用于为结果集分区内的每一行分配一个排名,排名值之间没有差距,函数为结果集的每个分区中的每一行分配一个等级. 与 RANK() 函数不同的是,DENSE_RANK() 函数总 ...

  3. Elasticsearch: Join数据类型

    在Elasticsearch中,Join可以让我们创建parent/child关系.Elasticsearch不是一个RDMS.通常join数据类型尽量不要使用,除非不得已.那么Elasticsear ...

  4. 解决inode满

    登陆服务器运行df -i 然后运行 for i in /*; do echo $i; find $i |wc -l|sort -nr; done 看看每个文件夹下面的数量 最后发现是/var/spoo ...

  5. 6. EFK:免费的日志采集与可视化搜索套件

    收集日志是为了做进一步的分析.收集是第一步,收集到日志后还需要进行存储.索引,以便进行快速查询分析.我们还需要一个友好的查询界面,来方便用户使用日志. 本文介绍一个免费的开源软件组合,正好可以实现上述 ...

  6. MiniWord .NET Word模板引擎,藉由Word模板和数据简单、快速生成文件。

    Github / Gitee QQ群(1群) : 813100564 / QQ群(2群) : 579033769 介绍 MiniWord .NET Word模板引擎,藉由Word模板和数据简单.快速生 ...

  7. java基础二、类与继承

    员工类 Employee, 经理类:Manager public class Employee { private String name; private double salary; privat ...

  8. H5与APP的交互框架(WebViewJavascriptBridge)

    基本原理是: 把 OC 的方法注册到桥梁中,让 JS 去调用. 把 JS 的方法注册在桥梁中,让 OC 去调用.(注册自己,调用它人.) WebViewJavaScriptBridge 使用的基本步骤 ...

  9. vue禁用浏览器返回键

    mounted () { // 禁用浏览器返回键 history.pushState(null, null, document.URL); window.addEventListener('popst ...

  10. Servlet(处理乱码,重定向与转发的区别)

    //处理请求乱码 req.setCharacterEncoding("utf-8"); //处理响应乱码 resp.setContentType("text/html;c ...