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. 关于WinSCP如何通过Tunnel隧道进行远程连接-进行文件的传输

    对于公司业务相关的重要的Linux服务器,一般都会限制源IP登录,一般就会使用到jumper server(跳板机) 这样一来,我们的Client就无法直接ssh/scp/sftp到目标服务器了,这样 ...

  2. ArrayList LinkedList Vector之间的区别

    List主要有ArrayList,LinkedList和vector三种实现.这三种都实现了List接口,使用方式也很相似,主要区别在于其实现方式的不同! 这三种数据结构中,ArrayList和Vec ...

  3. 魔改xxl-job,彻底告别手动配置任务!

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. xxl-job是一款非常优秀的任务调度中间件,轻量级.使用简单.支持分布式等优点,让它广泛应用在我们的项目中,解 ...

  4. Hive 自定义UDF操作步骤

    Hive 自定义UDF操作步骤 需要自定义类,然后继承UDF 然后在方法envluate()方法里面实现具体的业务逻辑,打包上传到linux(以免出错打包成RunningJar) 一.创建临时函数 ( ...

  5. CentOS 8.2 对k8s基础环境配置

    一.基础环境配置 1 IP 修改 机器克隆后 IP 修改,使Xshell连接上 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg- ...

  6. Vue中使用Switch开关用来控制商品的上架与下架情况、同时根据数据库商品的状态反应到前台、前台修改商品状态保存到数据库

    一般后台对商品的信息管理.包含商品的上架与下架.为了提高用户的体验.将商品上下架的操作做成开关的形式.同时后台数据库中保存的商品状态能够根据开关状态改变. 1.效果展示 这种效果:== 当开关是开启状 ...

  7. 齐博X1-栏目的调用1

    本节来说明下系统提供的几个栏目调用的方法 一节我们制作了一个公共导航,本节我们在首页index中演示下栏目的相关调用 至于其他的数据内容,参考第二季的标签调用即可,直接{qb:tag}调用就可以调用出 ...

  8. Codeforces 1682 D Circular Spanning Tree

    题意 1-n排列,构成一个圆:1-n每个点有个值0或者1,0代表点的度为偶数,1代表点的度为计数:询问能否构成一棵树,树的连边在圆内不会相交,在圆边上可以相交,可以则输出方案. 提示 1. 首先考虑什 ...

  9. C语言爱心表白程序

    #include <stdio.h> #include <math.h> #include <windows.h> #include <tchar.h> ...

  10. 3.Task对象

    Task对象 用于调度或并发协程对象 在事件循环中可以添加多个任务   创建task对象三种方式 创建task对象可以让协程加入事件循环中等待被调度执行 3.7版本之后加入asyncio.create ...