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 安全风险及建议的更多相关文章

  1. OWASP TOP 10(OWASP十大应用安全风险)

    TOP1-注入 当不受信任的数据作为命令或查询的一部分发送到解释器时,会发生注入漏洞,例如SQL,NoSQL,OS,LDAP注入(轻量目录访问协议),xpath(XPath即为XML路径语言,它是一种 ...

  2. 【十大经典数据挖掘算法】PageRank

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 我特地把PageRank作为[十大经 ...

  3. 【十大经典数据挖掘算法】EM

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 极大似然 极大似然(Maxim ...

  4. 【十大经典数据挖掘算法】AdaBoost

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 集成学习 集成学习(ensem ...

  5. 【十大经典数据挖掘算法】SVM

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART SVM(Support Vector ...

  6. 微信小程序与传统APP十大优劣对比

    随着微信公众平台的开放,微信端小程序涌现市场,带来很很多便利和简单的原生操作,询:微信端小程序是否会替代传统的APP应用?两者的优劣如何?我们一起来看看传统APP与微信端小程序十大优劣对比       ...

  7. 转:IT公司的十大内耗,别说你公司没有!

    这篇文章是以前看到的,觉得写得非常好,转载在自己BLOG作为记录.原文:http://www.pmtoo.com/news/2015/0108/7260.html. 当企业发展到一定时期时,会不可避免 ...

  8. 推荐Linux管理员不可不知十大PHP安全要点 - SCutePHP

    PHP是使用最广泛的脚本编程语言之一.市场份额颇能说明其主导地位.PHP 7已推出,这个事实让这种编程语言对当前的开发人员来说更具吸引力.尽管出现了一些变化,但是许多开发人员对PHP的未来持怀疑态度. ...

  9. 【十大经典数据挖掘算法】Naïve Bayes

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 朴素贝叶斯(Naïve Bayes) ...

  10. 【十大经典数据挖掘算法】C4.5

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...

随机推荐

  1. 关于pwd命令小技巧-确认当前工作目录的绝对路径中是否包含软链接目录名

    Linux中任何一个命令,当你用心研究到深处时,也许总能有着新的发现或者有趣的用途,如下方的pwd命令 对于pwd命令,大家都知道是用于打印当前的工作目录路径,而且是绝对路径 pwd命令两个选项的,默 ...

  2. 手写编程语言-如何为 GScript 编写标准库

    版本更新 最近 GScript 更新了 v0.0.11 版本,重点更新了: Docker 运行环境 新增了 byte 原始类型 新增了一些字符串标准库 Strings/StringBuilder 数组 ...

  3. JavaScript基础&实战 JS中正则表达式的使用

    文章目录 1.正则表达式 1.1 代码 1.2 测试结果 2.splict | search 2.1 代码 2.2 测试结果 1.正则表达式 1.1 代码 <!DOCTYPE html> ...

  4. python基础之标识符、注释与变量

    一.注释 1.作用:注释是用来解释和说明代码的. 2.分类:注释可以分为单行注释和多行注释 2.1.单行注释:在编写的代码或文字前加上"#",表示单行注释 1 #我是单行注释 2 ...

  5. java中类的关系的总结

    类和类之间存在多种关系,而这种关系在我们的代码中司空见惯,有时多种类关系很难区分 (由于水平有限,没有画出类的关系图,关系图可以参考参考链接) 继承关系 继承是指一个子类(子接口)继承父类(父接口)然 ...

  6. MindSpore Graph Learning

    技术背景 MindSpore Graph Learning是一个基于MindSpore的高效易用的图学习框架.得益于MindSpore的图算融合能力,MindSpore Graph Learning能 ...

  7. 造个Python轮子,实现根据Excel生成Model和数据导入脚本

    前言 最近遇到一个需求,有几十个Excel,每个的字段都不一样,然后都差不多是第一行是表头,后面几千上万的数据,需要把这些Excel中的数据全都加入某个已经上线的Django项目 这就需要每个Exce ...

  8. Go语言核心36讲29

    在上篇文章中,我们主要说的是互斥锁,今天我和你来聊一聊条件变量(conditional variable). 前导内容:条件变量与互斥锁 我们常常会把条件变量这个同步工具拿来与互斥锁一起讨论.实际上, ...

  9. i春秋Hello World

    打开只有一句hello world,直接查看源码,发现一个flag.xmas.js文件 试试直接访问http://106.75.72.168:9999/flag.xmas.js  http://106 ...

  10. 在Java Web中setContentType与setCharacterEncoding中设置字符编码格式的区别

    在Java Web中setContentType与setCharacterEncoding中设置字符编码格式的区别 通用解释 setCharacterEncoding只是设置字符的编码方式 setCo ...