Kubernetes 近期爆出两个中级安全漏洞: CVE-2020-8551 CVE-2020-8552 以下为Kubernetes 安全漏洞的说明。 ? Kubernetes上述漏洞在CVSS评级为中等级别,安全风险为DoS攻击。 “未来五年,是kubernetes的黄金五年。” 在这个黄金五年,CNCF组织依托kubernetes等开源项目推进现代云原生的发展,构建现代软件开发技术栈。 ? CVE-2020-8552 说明 攻击者方通过授权的API请求对Kubernetes API Server服务进行拒绝服务攻击。 /kubernetes/issues/89377 [3] https://github.com/kubernetes/kubernetes/issues/89378
• K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都 支持插件方式,通过API Server配置来启用插件。 /pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes zpj-csr.json -n kubernetes-dashboard dashboard-admin-token-25b5h Name: dashboard-admin-token-25b5h Namespace kubernetes.io/service-account.uid: fdf94e5a-5b5f-4d40-95d9-4cb5d2409991 Type: kubernetes.io eyJhbGciOiJSUzI1NiIsImtpZCI6IjVReUxQWFQyVzdvRjQ3TTRCZWtjR1Rja01CSUc4Qi1PNjdib1pfQXBURjgifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tMjViNWgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiZmRmOTRlNWEtNWI1Zi00ZDQwLTk1ZDktNGNiNWQyNDA5OTkxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9
探讨Kubernetes运行时安全的几大风险。 译自 The Top 5 Kubernetes Security Mistakes You’re Probably Making,作者 Torsten Volk。 回顾2023年Kubernetes相关的安全漏洞大幅增加导致解雇和罚款,本文描述了其中的五大根本原因。 eBPF如何解决Kubernetes运行时的关键安全挑战 在容器化基础设施快速发展的世界中,eBPF是解决Kubernetes运行时安全挑战的关键技术。 eBPF对保持Kubernetes的安全至关重要 eBPF是在Kubernetes集群中创建通用“安全毯”的基础,并且适用于本地环境、公有云和边缘计算。
机制说明 Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部 各个组件通信的中介,也是外部控制的入口。 所以 Kubernetes 的安全机制基本就是围绕保护 API Server 来设计 的。 若无法正常加载, 请点击查看 PDF 网页版本: Kubernetes 集群安全 - 机制说明.pdf 2. 默认挂载目录: /run/secrets/kubernetes.io/serivceaccount 总结 若无法正常加载, 请点击查看 PDF 网页版本: Kubernetes 集群安全 - 认证 若无法正常加载, 请点击查看 PDF 网页版本: Kubernetes 集群安全 - 准入控制.pdf
kubectl delete deployment nginx-deployment 将master主机也加入node调度节点 kubectl taint node k8s-master node-role.kubernetes.io /master- 取消 kubectl taint node k8s-master node-role.kubernetes.io/master="":NoSchedule ---- 指定部署到node
Kubernetes 安全基于云原生安全 4C(云、集群、容器、代码)。底层物理基础设施是云中 Kubernetes 安全的基础。 应用程序代码是 Kubernetes 环境中攻击的重要目标。因此,您需要实施强大的 TCP 策略,通过不暴露未使用的端口和执行评估来确保环境安全。 用于评估 Kubernetes 安全性的工具 如今,有许多工具可用于审计和监控 Kubernetes 安装。这些工具有助于编码和配置规则的可视化。 kube-hunter是一个开源安全工具,旨在与 Kubernetes 集群及其节点一起工作。 概括 最近的一个趋势是,许多组织使用 Kubernetes 集群来实现微服务。因此,保护是必不可少的。到目前为止,我们已经讨论了可以帮助您的组织维护或提供 Kubernetes 集群安全性的各种工具。
这两天在梳理Kubernetes集群的安全配置,涉及到各个组件的配置,最终决定画一个图来展现,应该会更清晰。 /dd_ca.crt --tls-private-key-file=/var/run/kubernetes/dd_server.key ``` kube-controller-manager name: my-context current-context: my-context ``` kube-scheduler kube-scheduler访问apiserver的安全配置同 /serviceaccount/token /var/run/secrets/kubernetes.io/serviceaccount/ca.crt /var/run/secrets/kubernetes.io apiserver了: - 添加kubectl proxy container,示例见[kubectl-container](https://github.com/kubernetes/kubernetes
一、访问控制概述 Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 二、认证管理 Kubernetes集群安全的最关键点在于如何识别并认证客户端身份,它提供了3种客户端身份认证方式: HTTP Base认证:通过用户名+密码的方式认证 这种认证方式是把“用户名 HTTPS证书认证:基于CA根证书签名的双向数字证书认证方式 这种认证方式是安全性最高的一种方式,但是同时也是操作起来最麻烦的一种方式。 这个插件为那些没有设置forgiveness tolerations并具有notready:NoExecute和unreachable:NoExecute两种taints的Pod设置默认的“容忍”时间,为5min PodSecurityPolicy:这个插件用于在创建或修改Pod时决定是否根据Pod的security context和可用的PodSecurityPolicy对Pod的安全策略进行控制
Kubernetes 安全机制解读 在 k8s 中,所有资源的访问和变更都是围绕 APIServer 展开的。 比如说 kubectl 命令、客户端 HTTP RESTFUL 请求,都是去 call APIServer 的 API 进行的,本文就重点解读 k8s 为了集群安全,都做了些什么。 ? 值得一提的是,Kubernetes 已经内置了很多个为系统保留的 ClusterRole,它们的名字都以 system: 开头。 这一层安全检查的意义在于,检查该请求是否达到系统的门槛,即是否满足系统的默认设置,并添加默认参数。 /not-ready:NoExecute和 node.alpha.kubernetes.io/unreachable:NoExecute 没有容忍,为其创建默认的 5 分钟容忍 notready:NoExecute
一旦装好了kubernetes,登录master之后就有了足够的权限 如果想在worker节点上运行并查看集群状态怎么办? kubectl get csr NAME AGE SIGNERNAME REQUESTOR CONDITION john 27s kubernetes.io /legacy-unknown kubernetes-admin Pending [root@vms61 xx]# kubectl get csr NAME AGE SIGNERNAME REQUESTOR CONDITION john 37s kubernetes.io/legacy-unknown kubernetes-admin /legacy-unknown kubernetes-admin Approved,Issued 一旦审批之后,k8s暂且还没有提供任何撤销这个功能 图片7.png [root@vms61
5 容器运行时防护 为了在Kubernetes中安全的运行容器,作者提出了「最小权限运行任务」,「宿主机只挂载必要的目录至容器」,「限制容器间及与容器外间的通信」三个原则。 图5 Kubernetes容器安全运行时安全边界 所谓安全边界,其实就是以Kubernetes集群中的每个资源为单位,由外至内提供每一层的隔离,比如Cluster可提供网络层隔离,Node通过nodeSelector 5 密钥管理机制 作者在此章节主要对Kubernetes的密钥管理资源Secret的使用、传递、访问方法做了详细的介绍,并以安全的角度描述了每个阶段隐含安全问题及应该如何进行防护。 由上图【5】不难发现,从漏洞增长率上来说, Kubernetes漏洞每年呈上升趋势,在2019年更是曝出多达11个漏洞【6】,其中中危漏洞6个,低危漏洞5个;从漏洞类型上来说,出现频次最高的为敏感信息泄露漏洞 [5].https://www.cvedetails.com/vulnerability-list/vendor_id-15867/product_id-34016/Kubernetes-Kubernetes.html
前言 对于大部分 Kubernetes 用户来说,安全是无关紧要的,或者说没那么紧要,就算考虑到了,也只是敷衍一下,草草了事。 实际上 Kubernetes 提供了非常多的选项可以大大提高应用的安全性,只要用好了这些选项,就可以将绝大部分的攻击抵挡在门外。 5. 不必挂载 Service Account Token ServiceAccount 为 Pod 中运行的进程提供身份标识,怎么标识呢? 对于 Kubernetes 来说,大多数容器运行时都提供一组允许或不允许的默认系统调用。 通过使用 runtime/default 注释或将 Pod 或容器的安全上下文中的 seccomp 类型设置为 RuntimeDefault,可以轻松地在 Kubernetes 中应用默认值。
前言 对于大部分 Kubernetes 用户来说,安全是无关紧要的,或者说没那么紧要,就算考虑到了,也只是敷衍一下,草草了事。 实际上 Kubernetes 提供了非常多的选项可以大大提高应用的安全性,只要用好了这些选项,就可以将绝大部分的攻击抵挡在门外。 5. 不必挂载 Service Account Token ServiceAccount 为 Pod 中运行的进程提供身份标识,怎么标识呢? 通过使用 runtime/default 注释或将 Pod 或容器的安全上下文中的 seccomp 类型设置为 RuntimeDefault,可以轻松地在 Kubernetes 中应用默认值。 提供了非常多的选项来增强集群的安全性,没有一个放之四海而皆准的解决方案,所以需要对这些选项非常熟悉,以及了解它们是如何增强应用程序的安全性,才能使集群更加稳定安全。
(tcp) failed: Cannot assign requested address 实验3:多个目标 ip 相同目标端口 $ nohup nc 220.181.57.216 80 -v & [5] Kubernetes 支持两种方式将 Pod 打散调度: Pod 反亲和 (Pod Anti-Affinity) Pod 拓扑分布约束 (Pod Topology Spread Constraints) topologyKey: 节点的某个 label 的 key,能代表节点所处拓扑域,可以用 Well-Known Labels,常用的是 kubernetes.io/hostname (节点维度)、topology.kubernetes.io /hostname weight: 100 将 Pod 强制打散调度到不同可用区(机房),以实现跨机房容灾 将 kubernetes.io/hostname 换成 topology.kubernetes.io /zone): spec: topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone
实施 DevSecOps的工程团队实践和自动化安全工具将更早发现安全风险,节省开发人员时间,加快发布周期,并交付更安全和合规的代码。 组织需要一种结构化的方法,让领导者参与进来、动员安全拥护者,并确保“安全”成为“完成的定义”不可或缺的一部分。 此外,通过确保工程、安全和运营之间的一致性,鼓励开发人员“提高技能”,并专注于学习和实施有助于提高 Web 应用程序安全性的技术,更重要的是,使团队能够更早地转移安全性进入设计和编码阶段。 正如开发人员安全平台的 5 大评估标准中所讨论的 , Cloud Native Instrumentation:提供深入了解应用程序运行时的工具,是非侵入式的,并且在云原生应用程序中可以很好地扩展 优先和全面的安全洞察 摆脱这种模式实际上代表了安全团队的重大转变,安全团队习惯于强迫开发人员遵守他们的流程和工具。
但是Kubernetes是一个大型、复杂的平台;在规模扩大以后,Kubernetes平台自身身的安全问题如何解决?应该采取什么策略来保证应用的安全部署?下面我从四个方面说明如何缓解这些挑战。 功能丰富的Kubernetes平台可能会认为默认该功能具有挑战性,但是弄清楚默认功能是必不可少的。 组织可以使用安全性基准来增强Kubernetes的安全性。 例如,Internet安全中心提供了配置指南,以加强包括Kubernetes在内的系统以抵抗不断发展的网络威胁。 列举出来Kubernetes集群面临的威胁有哪些? 如果您没有人力或时间独自加强Kubernetes安全性。 另外在做安全性方面的考虑时,应该尽可能使用和参考随时可用的工具和技术,而不是闷头造车;比如Kubernetes社区给我门提供了RBAC、pod安全策略、网络策略、服务网格、operators等安全性方案
常见的 Kubernetes 配置错误以及如何避免它们 由于配置错误、工具差距或培训不足导致的安全能力“紧张”,不良的安全态势会影响您响应新出现的威胁的能力。 保护控制平面和 API 访问 一种经常被忽视的 Kubernetes 安全措施是保护控制平面,它通常在托管 Kubernetes 服务中公开。 Kubernetes 姿势中的其他安全措施增强了事件检测和响应能力。 为容器运行时安全性使用准入控制器 并非所有 KSPM 解决方案都提供准入控制,但它对于 Kubernetes 部署中的安全性至关重要。 保护您的东西向流量 虽然 Kubernetes 集群是一个安全边界,但将其视为对主机和网络拓扑的抽象至关重要。
在使用 Kube Bench 的过程中注意到,其指导依据来自于 CIS Benchmark,于是顺藤摸瓜,下载了 CIS Kubernetes Be nchmark 的 PDF 版本,全文有两百多页,阅读量还蛮大的 二级:仅建议在非常强调安全性的系统中使用,可能对系统有副作用。 另外还将具体的检测结果分为计分和不计分两种结果。 以上两个维度可以用来对系统进行现状评估,也有助于读者选择性地采纳加固措施。
然后,再深入探讨 Kubernetes 安全的“4C”框架,并介绍一些主动解决安全漏洞的策略。 Kubernetes 及其组件 要了解 Kubernetes 的安全性,我们需要深入学习 Kubernetes 在高层次上是如何工作的。 考虑到这种架构,让我们探索一些适用于 Kubernetes 环境的安全最佳实践。 因此,可以在 Kubernetes 安全性的 4C 上下文中考虑安全性:云、集群、容器和代码。 安全的 Kubernetes 基本配置 开始使用 Kubernetes 时,会为业务所处的环境进行基本配置。但是,这些本质上并不安全。
Kubernetes 的安全工具多得很,有不同的功能、范围以及授权方式。 Kubernetes 安全工具——分类 为了方便读者浏览目录,我们把这些工具按照主要功能和范围进行了分类: Kubernetes 镜像扫描和静态分析 Kubernetes 运行时安全 Kubernetes 网络安全 镜像分发和机密管理 Kubernetes 安全审计 端到端的 Kubernetes 安全商业产品 我们最爱的容器编排平台已经成熟,会有越来越多的 Kubernetes 安全工具涌现出来,如果读者发现我们列表的错漏 Linux 运行时安全框架 原生的 Linux 框架其实不能算作是“Kubernetes 安全工具”,但它们的运行时安全上下文是可以包括在 Kubernetes 的 Pod 安全策略之中的(PSP),所以还是值得一提 Kubernetes 资源是否使用了较弱的安全参数。