DevSecOps 需要知道的十大 K8s 安全风险及建议
Kubernetes (K8s)是现代云原生世界中的容器管理平台。它实现了灵活、可扩展地开发、部署和管理微服务。K8s 能够与各种云提供商、容器运行时接口、身份验证提供商和可扩展集成点一起工作。然而 K8s 的集成方法可以在任何基础设施上运行任何容器化应用程序,这使得围绕 K8s 和其上的应用程序堆栈创建整体安全性面临挑战。根据 Red Hat 的 2022 年 K8s 安全报告,在过去 12 个月的过程中,几乎所有参与研究的 K8s 用户都经历过至少一次安全事件。因此,可以说 K8s 环境在默认情况下并不安全,并且容易面临风险。
本文将讨论 10 大 K8s 安全风险,并就如何避免这些风险给出提示。
1. K8s Secret
Secret 是 K8s 的核心构建块之一,用于存储密码、证书或令牌等敏感数据,并在容器内使用它们。与 K8s Secret 相关的三个关键问题:
- Secrets 将敏感数据存储为 base-64 编码字符串,但默认情况下不加密。K8s 确实提供了存储资源的加密,但用户需要对其进行配置。此外,关于机密的最大威胁是同一命名空间中的任何 pod,以及在 pod 内运行的任何应用程序都可以访问和读取它们。
- 基于角色的访问控制(RBAC)控制谁有权访问 K8s 资源。用户需要正确配置 RBAC 规则,以便只有相关人员和应用程序才能访问机密。
- Secrets 和 ConfigMaps 是将数据传递给正在运行的容器的两种方法。如果有旧的和未使用的 Secrets 或 ConfigMap 资源,会造成混乱并泄漏易受攻击的数据。例如,如果用户删除了后端应用程序部署但忘记删除包含的数据库密码的机密,那么将来任何恶意 pod 都可以使用这些敏感数据。
2. 存在漏洞的容器镜像
K8s 是一个容器编排平台,在工作节点上分发和运行容器。但是它不会检查容器的内容是否存在安全漏洞或暴露。因此,需要在部署前对镜像进行扫描,以确保只有来自可信镜像仓库且没有严重漏洞(如远程代码执行)的镜像才会在集群上运行。容器镜像扫描也应该集成到 CI/CD 系统中,以实现自动化和更早地检测问题和缺陷。
3. 运行时威胁
K8s 工作负载(即容器)在工作节点上运行,容器在运行时由主机操作系统控制。如果存在宽松政策或存在漏洞的容器镜像,可能会为整个集群打开后门。因此,需要操作系统级别的运行时保护来加强运行时的安全性,而针对运行时威胁和漏洞的最重要的保护,在整个 K8s 中实现最小特权原则。
4. 集群错误配置和默认配置
K8s API 及其组件由一组复杂的资源定义和配置选项组成。因此,K8s 为其大部分配置参数提供了默认值,并试图消除创建长 YAML 文件的负担。但是,用户需要注意与集群和资源配置相关的三个关键问题:
- 虽然默认的 K8s 配置很实用,因为可以提高使用的灵活性和敏捷性,但它们并不总是最安全的选择。
- K8s 资源的在线示例有助于入门,但在参考时需要检查这些示例资源定义将部署到集群的内容。
- 在集群上工作时,通常使用“kubectl edit”命令更改 K8s 资源。但如果用户忘记更新源文件,更改将在下一次部署中被覆盖,并且未跟踪的修改可能会埋下安全隐患。
5. K8s 中的 RBAC 策略
RBAC 管理和控制 K8s 资源授权方式。因此,配置和维护 RBAC 策略对于保护集群避免不必要的访问至关重要。使用 RBAC 策略时需要考虑两个关键点。首先,一些 RBAC 策略过于宽松,比如 cluster_admin 角色,它基本拥有集群中的所有权限。这些角色被分配给一般开发人员,使他们能够敏捷完成开发人。但如果出现安全漏洞,攻击者可以使用 cluster_admin 快速获得对集群的高级访问权限。为避免这种情况,用户需要为特定资源配置 RBAC 策略并将全线分配给特定的用户组。
另外,软件开发生命周期中存在各种环境,如开发、测试、预发布和生产。此外,还有开发人员、测试人员、运营人员和云管理员等多个侧重点不同的团队。应为每个组和每个环境正确分配 RBAC 策略。
6. 网络接入
在 K8s 中,一个 pod 可以连接到集群外部的其他 pod 和外部地址;默认情况下,其他人可以从集群内部连接到此 pod。网络策略用于管理和限制 pod、命名空间和 IP Blocks 之间的网络访问。网络策略可以与 pod 上的标签一起使用,而标签的不当使用可能会导致不必要的访问。此外,当集群位于云提供商处时,集群网络应该与虚拟私有云 (VPC) 的其余部分隔离。
7. 整体监控和审计日志
当用户将应用程序部署到 K8s 集群时,仅依靠监控应用程序指标是不够的。还必须观察 K8s 集群的状态、云基础设施和云控制器,以全面了解整个堆栈。监视漏洞和检测异常也很重要,因为恶意攻击者会测试从每个可能的开口来访问集群。K8s 为集群中与安全相关的事件提供开箱即用的审计日志。即便如此,用户依旧需要从各种应用程序收集记录并在一个中心位置监控集群健康状况。
8. K8s API
K8s API 是整个系统的核心,所有内部和外部客户端都与 K8s 进行连接和通信。如果用户在内部部署和管理 K8s 组件则需要更加小心,因为** K8s API 服务器及其组件是具有潜在和实际漏洞的开源工具**。因此用户应该使用最新的稳定版本的 K8s 并尽早修复集群。
如果使用云提供商,K8s 控制面板由提供商控制,云基础设施会自动更新和打补丁。但是在大多数情况下用户需要自行负责升级工作节点。因此,用户可以使用自动化和资源供应工具轻松升级节点或更换新节点。
9. K8s 资源请求和限制
除了调度和运行容器,K8s 还可以在 CPU 和内存方面限制容器的资源使用。资源请求和限制至关重要,原因有两点:
- 安全性:当 pod 和命名空间不受限制时,即使是具有安全漏洞的单个容器也可以访问集群内的敏感数据。
- 成本:当请求的资源超过实际使用量时,节点将耗尽可用资源。如果启用自动缩放,这将导致节点池增加,新节点将不可避免地增加您的云费用。
当资源请求被正确计算和分配时,整个集群在 CPU 和内存方面高效工作。此外,当设置资源限制时,故障应用程序和恶意攻击者都将在资源使用方面受到限制。如果没有资源限制,恶意容器可能会消耗节点中几乎所有的资源并使应用程序无法使用。
10. 数据与存储
K8s 让有状态的容器化应用程序可扩展且可靠地运行成为可能。借助 StatefulSet 资源,用户可以快速将数据库、数据分析工具和机器学习应用程序部署到 K8s 中。这些数据将作为连接到容器的卷供 Pod 访问。
通过策略和标签限制访问来避免集群中其他 pod 进行不必要的访问至关重要。此外,K8s 中的存储是由外部系统提供的,因此用户应该考虑对集群中的关键数据进行加密。如果用户管理存储插件,还应该检查安全参数以确保它们已启用。
参考链接:
https://www.darkreading.com/dr-tech/top-10-K8s-security-risks-every-devsecops-needs-to-know
https://www.redhat.com/en/blog/state-K8s-security-2022-1
https://K8s.io/docs/concepts/workloads/controllers/statefulset/
DevSecOps 需要知道的十大 K8s 安全风险及建议的更多相关文章
- OWASP TOP 10(OWASP十大应用安全风险)
TOP1-注入 当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生注入漏洞,例如SQL,NoSQL,OS,LDAP注入(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种 ...
- 【十大经典数据挖掘算法】PageRank
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...
- 【十大经典数据挖掘算法】EM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...
- 【十大经典数据挖掘算法】AdaBoost
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...
- 【十大经典数据挖掘算法】SVM
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector ...
- 微信小程序与传统APP十大优劣对比
随着微信公众平台的开放,微信端小程序涌现市场,带来很很多便利和简单的原生操作,询:微信端小程序是否会替代传统的APP应用?两者的优劣如何?我们一起来看看传统APP与微信端小程序十大优劣对比 ...
- 转:IT公司的十大内耗,别说你公司没有!
这篇文章是以前看到的,觉得写得非常好,转载在自己BLOG作为记录.原文:http://www.pmtoo.com/news/2015/0108/7260.html. 当企业发展到一定时期时,会不可避免 ...
- 推荐Linux管理员不可不知十大PHP安全要点 - SCutePHP
PHP是使用最广泛的脚本编程语言之一.市场份额颇能说明其主导地位.PHP 7已推出,这个事实让这种编程语言对当前的开发人员来说更具吸引力.尽管出现了一些变化,但是许多开发人员对PHP的未来持怀疑态度. ...
- 【十大经典数据挖掘算法】Naïve Bayes
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 朴素贝叶斯(Naïve Bayes) ...
- 【十大经典数据挖掘算法】C4.5
[十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...
随机推荐
- NOIP2015 普及组 洛谷P2671 求和 (数学)
一道数学题...... 采用分组的思想,我们要统计答案的数对满足两个条件:同奇偶,同颜色.所以可以按这两个要求分组. 然后就是分组处理了,对于每组(有k个数),这里面的任意两对数都是满足条件的,可推出 ...
- 洛谷P1120 小木棍 (搜索+剪枝)
搜索的经典题. 我们要求木根的最小长度,就要是木根的数量尽可能多,可以发现木根的长度一定可以整除所有小木棒的总长度,从小到大枚举这个可能的长度,第一次有解的就是答案. 关心的状态:当前正在拼哪根木棍, ...
- 把两个数据结构相同的数组(数组下有n个对象)合并成一个数组
数据拼接 有一个数组 let arr1 = [ {name:''lili",age:14}, {name:''小明",age:16}, {name:''张三",age:2 ...
- git(新)
Git仓库的工作分区 工作区到暂存区的操作 git init :在当前文件夹创建一个文档库,自动产生一个master分支.当当前文件夹已有文档库时,不会再次创建也不会修改,只会将隐藏的.git文件夹显 ...
- Springboot+Vue实现将图片和表单一起提交到后端,同时将图片地址保存到数据库、再次将存储的图片展示到前端vue页面
文章目录 1.实现的效果 2.Vue前端 3.图片上传 4.字段变量根据自己的字段名自行设置(这里不给出了,哈哈哈) 5.method方法 5.1.图片显示在选择框中,同时返回后端存储的地址 5.2查 ...
- 一天十道Java面试题----第一天(面向对象-------》ArrayList和LinkedList)
这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 1.面向对象 2.JDK.JRE.JVM区别和联系 3.==和equals 4.final 5.String .Strin ...
- 使用redis进行手机验证码的验证、每天只能发送三次验证码 (redis安装在虚拟机linux系统中)
文章目录 1.代码 2.测试结果 2.1.第一次发送 2.2.填写正确的验证码 2.3.填写错误的验证码 连续发送多次验证码 环境准备:虚拟机Linux系统,redis安装在虚拟机中. 前提条件:虚拟 ...
- day51-正则表达式02
正则表达式02 5.4正则表达式语法02 5.4.6捕获分组 详见5.3.3 例子 package li.regexp; import java.util.regex.Matcher; import ...
- AI人脸识别+换脸
视频换脸可参考 https://github.com/iperov/DeepFaceLab import dlib.dlib as dlib import numpy import sys impor ...
- Linux三剑客sed
注意sed和awk使用单引号,双引号有特殊解释 sed是Stream Editor(字符流编辑器)的缩写,简称流编辑器. sed是操作.过滤和转换文本内容的强大工具. 常用功能包括结合正则表达式对文件 ...