DevOps 必备的 Kubernetes 安全清单
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 安全清单的更多相关文章
- 04 . kubernetes资源清单YAML入门
YAML 通过k8s操作yaml配置文件在node上创建资源,yaml配置文件就像船垛,用来操控docker这艘大船 yam是专门用来写配置文件的语言,非常简洁和强大.而实际上使用yaml配置文件创建 ...
- [备忘] DevOps 工具上的准备清单(不断补充中……)
目录 概念 发展历程 工具清单 规划 概念 从字面上来看,"DevOps"一词是由英文 Development(开发)和 Operations (运维)组合而成,但它所代表的理念和 ...
- kubernetes系列06—kubernetes资源清单定义入门
本文收录在容器技术学习系列文章总目录 1.认识kubernetes资源 1.1 常用资源/对象 workload工作负载型资源:pod,ReplicaSet,Deployment,StatefulSe ...
- DevOps必备的20款顶级工具
原文地址:http://os.51cto.com/art/201606/512423.htm 开发运维工具与软件开发领域的最佳实践密切相关,也与必要的规范密切相关.在整个开发生命周期涉及到一大批新旧工 ...
- 2019 DevOps 必备面试题——配置管理篇
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...
- (四)Kubernetes 资源清单定义
Kubernetes常用资源对象 依据资源的主要功能作为分类标准,Kubernetes的API对象大体可分为五个类别,如下: 类型 名称 工作负载(Workload) Pod.ReplicaSet.D ...
- Kubernetes 学习5 kubernetes资源清单定义入门
一.kubernetes是有一个restful风格的 API,把各种操作对象都一律当做资源来管理.并且可通过标准的HTTP请求的方法 GET,PUT,DELETE,POST,等方法来完成操作,不过是通 ...
- kubernetes 资源清单定义入门
k8s中的资源 什么叫资源? k8s中所有的内容都抽象为资源, 资源实例化之后,叫做对象 在k8s中有哪些资源? 工作负载型资源(workload): Pod ReplicaSet Deploymen ...
- kubernetes资源清单之DaemonSet
什么是 DaemonSet? DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本.当有节点加入集群时,也会为他们新增一个 Pod . 当有节点从集群移除时,这些 Pod 也会被回收 ...
- kubernetes资源清单之Deployment
Deployment为Pod和ReplicaSets提供声明性更新 示例 --- apiVersion: apps/v1 kind: Deployment metadata: name: de ...
随机推荐
- 如何结合整洁架构和MVP模式提升前端开发体验(二) - 代码实现篇
上一篇文章介绍了整体架构,接下来说说怎么按照上图的分层结构实现下面的增删改查的功能. 代码结构 vue userManage └── List ├── api.ts ├── EditModal │ ├ ...
- Java Socket底层实现浅析
最近在学Java的socket编程,发现Java可以很简单的通过socketAPI实现网络通信,但是我一直有个疑问,Java的socket的底层是怎么实现的? 如果没记错的话Java的底层是C和C++ ...
- Vim使用技巧(持续更新)
好记性不如烂笔头,在这里记录一些Vim使用技巧 vim配置 "拷贝同步到系统剪切板" set clipboard=unnamed "显示行号" set nu & ...
- Rust-语句和表达式
语句和表达式 Rust 的函数体是由一系列语句组成,最后由一个表达式来返回值,例如: fn add_with_extra(x: i32, y: i32) -> i32 { let x = x + ...
- 使用 Shell 命令 分析服务器日志
文章转载自:https://mp.weixin.qq.com/s/z2qF571m4JSSVi59D7V71g 1.查看有多少个IP访问: awk '{print $1}' log_file|sort ...
- rabbitmq的内存节点和磁盘节点
RabbitMQ集群里有内存节点与磁盘节点之分. 所谓内存节点,就是将元数据(metadata)都放在内存里,磁盘节点就是放在磁盘上.(内存节点将全部的队列,交换器,绑定关系,用户,权限,和vhost ...
- 10. Fluentd部署:高可用配置
对于高访问量的web站点或者服务,可以采用Fluentd的高可用配置模式. 消息分发语义 Fluentd设计初衷主要是用作事件日志分发系统的.这类系统支持几种不同的分发模式: 至多一次.消息被立即发送 ...
- 如何优雅的备份MySQL数据?看这篇文章就够了
大家好,我是一灯,今天一块学习一下如何优雅安全的备份MySQL数据? 1. 为什么要备份数据 先说一下为什么需要备份MySQL数据? 一句话总结就是:为了保证数据的安全性. 如果我们把数据只存储在一个 ...
- CentOS 7.9 安装 ELK
一.CentOS 7.9 安装 elasticsearch-7.8.1 地址 https://www.elastic.co https://www.elastic.co/cn/downloads/pa ...
- jsp页面重定向后地址栏controller名重复而导致报404错误
今天做ssm项目时遇到了这种错误 看看代码: 无关代码省略... 22 <body> 23 <div id="container"> 24 <ifra ...