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. Linux安装gitlab仓库

    linux安装gitlab仓库 注:此安装方式是安装在docker上 1. 安装docker 可根据链接文档进行操作安装 https://www.cnblogs.com/cherish-sweet/p ...

  2. 萌新码农的第一篇:MarkDown的使用方法

    MarkDown的使用方法 使用的编辑软件Typora 1.标题的使用方法 输入''#''然后空格,输入标题名字即可生成标题. 随着''#''的增多,标题的大小会依次减小,最多到六级标题 2.排字 字 ...

  3. Idea插件SequenceDiagram快速查看方法调用

    Idea打开setting->plugins安装插件SequenceDiagram 快速查看方法调用 在方法名上右键点击SequenceDiagram即可生成方法调用图 最上面一行为该方法涉及的 ...

  4. K8S概念理解

    Master 负责管理集群 负责协调集群中的所有活动,例如调度应用程序,维护应用程序的状态,扩展和更新应用程序. Worker节点是VM(虚拟机)或物理计算机,充当k8s集群中的工作计算机. 每个Wo ...

  5. 项目的依赖包(node_modules)删除

    快速删除依赖包一共分为三部 1.打开命令行(管理员身份),执行 npm i -g npkill 2.cd 进入到想删除的项目中,执行 npkill 3.执行完成会进入到npkill页面,等待搜索完成, ...

  6. 组件化开发3-cocoaPods私有库制作

    一.创建索引项目ZHMCSSpec 1-1 在代码托管网站上建立索引项目ZHMCSSpec(以这个名称为例) 1-2 在本地创建ZHMCSSpec,并与远程索引建立联系 pod repo add ZH ...

  7. ofd格式文件转换成pdf格式的方法

    ofd格式文件很多人还比较陌生,很多人接收到文件都不知如何打开阅读,把文件发给对方,还需要对方安装个专门的阅读软件,我们还有另一个办法,就是将OFD文件转换为PDF格式文件,然后把PDF格式文件发给对 ...

  8. 改善C#程序的方法-3 比较器和LINQ排序

    一 创建对象时考虑实现比较器 假设有这样的场景,有一个40个人的学生列表,业务中需针对学生的成绩来进行排序. 可以考虑用IComparable接口和ICompare接口实现: class Progra ...

  9. FastJson序列化对象复杂时出错问题解决

    FastJson序列化对象复杂时出错问题解决 针对复杂的对象,如Map<String, List<Map<String, XxxObject<A, B, C>>&g ...

  10. 路径分析—QGIS+PostgreSQL+PostGIS+pgRouting(一)

    前言 因业务需求,需要做最短路径分析.最近几天查询资料,并自己动手,实现了简单的路径分析. 下面就介绍具体的实现过程. 本篇文章最终结果是在 PostgreSQL 数据库中实现的,后续的可视化展示会继 ...