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 ...
随机推荐
- Go的网络编程详解
一 互联网协议介绍 1.1互联网分层模型 互联网的逻辑实现被分为好几层.每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持.用户接触到的只是最上面的那一层,根本不会感觉到下面的几层.要理解互联 ...
- 大数据技术之HBase原理与实战归纳分享-中
@ 目录 底层原理 Master架构 RegionServer架构 Region/Store/StoreFile/Hfile之间的关系 写流程 写缓存刷写 读流程 文件合并 分区 JAVA API编程 ...
- 十大 CI/CD 安全风险(三)
在上一篇文章,我们了解了依赖链滥用和基于流水线的访问控制不足这两大安全风险,并给出缓解风险的安全建议.本篇文章将着重介绍 PPE 风险,并提供缓解相关风险的安全建议与实践. Poisoned Pipe ...
- ABC260 作战总结
ABC260 作战总结 今后开始写一些模拟赛外的其他比赛的总结(也许有题解?). 开场点到另一场\(\text{ARC}\)去了,耽误了点时间,切完前四题发现已经过了\(37\)分钟了,看来自己读题+ ...
- springboot+mybatis+shiro项目中使用shiro实现登录用户的权限验证。权限表、角色表、用户表。从不同的表中收集用户的权限、
要实现的目的:根据登录用户.查询出当前用户具有的所有权限.然后登录系统后.根据查询到的权限信息进行不同的操作. 以下的代码是在搭好的框架之下进行的编码. 文章目录 核心实现部分. 第一种是将用户表和角 ...
- Vue学习之--------监视属性(2022/7/10)
文章目录 1.监视属性 1.1 监视属性--天气案例 1.1.1 基础知识 1.1.2 代码实例 1.1.2 测试效果 1.2 深度监视-天气案例 1.2.1 基础知识 1.2.2 代码实例 1.2. ...
- 前端学习笔记--HTML5
网页的优点(客户端为网页)(B/S)模式 开发成本低) 不需要安装 无需更新 跨平台(最重要)可以有效的减小开发成本 传统的为C/S模式,开发成本高 前端工程师负责写网页的源代码,而浏览器负责把网页渲 ...
- Python基础之函数:4、二分法、三元表达式、生成/推导式、匿名函数、内置函数
目录 一.算法简介之二分法 1.什么是算法 2.算法的应用场景 3.二分法 二.三元表达式 1.简介及用法 三.各种生成式 1.列表生成式 2.字典生成式 3.集合生成式 四.匿名函数 五.常见内置函 ...
- Python基础部分:9、数据的类型和内置方法
目录 一.数据类型内置方法理论 1.什么是数据内置方法 2.如何调用数据内置方法 二.整型(int)内置方法与操作 1.类型转换 2.进制数转换 三.浮点型(float)内置方法与操作 1.类型转换 ...
- Codeforces Round #802 (Div. 2)C. Helping the Nature(差分)
题目链接 题目大意: 给你一个有n个元素的数组a,你可以通过一下三种操作使数组的每一个值都为0: 选择一个下标i,然后让a[1],a[2]....a[ i ] 都减一; 选择一个下标i,然后让a[i] ...