青藤最全K8S加固指南:12个最佳实践防止K8S配置错误
在容器环境中,K8S管理着拥有数个、数百个甚至数千个节点的容器集群,其配置的重要性不可忽略。K8S的配置选项很复杂,一些安全功能并非默认开启,这加大了安全管理难度。如何有效地使用包括Pod安全策略、网络策略、API服务器、Kubelet及其他K8S组件和功能策略建立安全的K8S环境?青藤云安全为你整理了以下12个最佳实践,对K8S进行全面加固。
K8S新版本通常会引入一系列不同的安全功能,提供关键的安全补丁等,将K8S部署更新到最新稳定版本,使用到达stable状态的API,能够补救一些已知的安全风险,帮助解决影响较大的K8S安全缺陷问题,大大减少攻击面。
PodSecurityPolicy是K8S中可用的集群级资源,通过启用PodSecurityPolicy准入控制器来使用此功能。用户至少要授权一个策略,否则将不允许在集群中创建Pod。Pod安全策略解决了以下几个关键安全用例:
防止容器以特权模式运行,因为这种类型的容器将会拥有底层主机可用的大部分能力
避免容器与宿主机共享非必要的命名空间,如PID、IPC、NET等,确保Docker容器和底层主机之间的适当隔离
限制Volume的类型。例如,通过可写HostPath目录卷,操作者可写入文件系统,让容器得以在pathprefix之外随意移动,因此,必须使用readonly:true
通过命名空间可以创建逻辑分区、强制分离资源以及限制用户权限范围。在一个命名空间内的资源名称必须是唯一的,且不能相互嵌套,每个K8S资源只能位于一个命名空间中。在创建命名空间时,要避免使用前缀kube-,因为kube-用于K8S系统的命名空间。
网络策略功能规定了Pod群组之间相互通信以及Pod群组与其他网络端点间进行通信的方式,可以理解为K8S的防火墙。虽然Kubernetes支持对NetworkPolicy资源的操作,但如果没有实现该资源的插件,仅创建该资源是没有效果的,可以通过使用支持网络策略的网络插件,比如Calico、Cilium、Kube-router、Romana和Weave Net等。
如果有一个适用于Pod的网络策略被允许,那么与Pod的连接就会被允许。要明确可以允许哪些Pod访问互联网,如果在每个命名空间内使用了default-deny-all命令,那所有的Pod都不能相互连接或接收来自互联网的流量。对于大多数应用程序来说,可以通过设置指定标签的方式,创建针对这些标签的网络策略来允许一些Pod接收来自外部的流量。
可以通过准入控制器ImagePolicyWebhook来防止使用未经验证的镜像,从而拒绝使用未经验证的镜像来创建Pod,这些镜像包括近期未扫描过的镜像、未列入白名单的基础镜像、来自不安全的镜像仓库的镜像。
Kubernetes API 服务器处理来自集群内运行的用户或应用程序的 REST API 调用,以启用集群管理。在主节点运行ps -ef grep kube-apiserver命令,并检查输出中的以下信息:
Kube-scheduler作为K8S的默认编排器,负责监视未分配节点的新创建的Pod,从而将该Pod调度到合适的Node上运行。在主节点上运行ps -ef grep kube-scheduler命令,并检查输出中的以下信息:
--profiling设置为false,以大大减少攻击面。当遇到系统性能瓶颈的时候,profiling可以通过识别定位瓶颈来发挥作用,对性能调优有显著帮助。
--address设置为127.0.0.1,防止将编排器绑定到一个非回环的不安全地址。
--terminated-pod-gc-threshold设置为一个适合的值,以确保拥有足够可用的资源,并不会导致性能降低。
--root-ca-file设置为一个适合的值,在包含API服务器的服务证书的根证书中进行设置,这样Pod会先验证API服务器的服务证书,然后再建立连接。
--address argument设置为127.0.0.1,确保控制管理器服务不会与非回环的不安全地址绑定。
Etcd是一种分布式键值存储,实现跨集群存储数据。K8S集群都使用Etcd作为主要的数据存储方式,来处理K8S集群状态的存储和复制数据,使系统人员可以根据需要从Etcd读取并写入数据。安全地配置Etcd与其服务器的通信是最关键的。在Etcd服务器节点上运行ps -ef grep etcd命令,并检查输出中的以下信息:
--cert-file和 --key-file根据需要设置,以确保客户端连接只通过TLS(传输中加密)提供服务。
--client-cert-auth 设置为true,确保所有用户的访问都会包括一个有效的客户端证书。
--auto-tls不要设置为true,这会禁止客户在TLS中使用自签名的证书。
Kubelet是运行在每个节点上的主要“节点代理”,错误地配置Kubelet会面临一系列的安全风险,所以,可以使用运行中的Kubelet可执行文件参数或Kubelet配置文件来设置Kubelet配置。找到Kubelet配置文件(通过config 参数可找到Kubelet配置文件的位置),运行ps -ef grep kubelet grep config 命令,并检查输出中的以下信息:
--anonymous-auth 设置为false。球速体育常见的错误配置之一是允许Kubelet服务器提供匿名和未经验证的请求。
--client-ca-file 设置的是客户端证书授权的位置。若使用默认配置值,要确保有一个由--config指定的Kubelet配置文件,并且该文件已经过认证,同时将x509:clientCAFile 设置为客户端证书授权的位置。
--read-only-port 设置为0,若使用默认配置值,要确保有一个由config指定的文件,如果要设置适合的值,则将readOnlyPort设置为0。
主节点上的配置文件安全主要涉及到确保API服务器的Pod规范文件权限和所有权、控制管理器Pod规范文件的权限和所有权、编排器Pod规范文件的权限和所有权、Etcd Pod规范文件的权限和所有权、容器网络接口文件的权限和所有权、Etcd数据目录的权限和所有权、f文件的权限和所有权、scheduler.conf文件的权限和所有权、controller-manager.conf文件权限和所有权、Kubernetes PKI目录&文件权限和所有权、Kubernetes PKI密钥文件权限等安全性。
保护工作节点的配置文件安全包括确保Kubelet服务文件权限、Kubelet.conf文件权限和所有权、Kubelet服务文件所有权、代理Kubeconfig文件的权限和所有权、证书管理中心的文件权限、客户端证书管理中心的文件所有权、Kubelet配置文件的权限和所有权。
K8S提供了创建安全应用的强大功能,但我们需要确保所有的配置设置正确。上文介绍的这些配置、代码示例和详细建议,可帮助您避免最常见的K8S错误配置相关的安全风险。
(免责声明:此文内容为本网站刊发或转载企业宣传资讯,仅代表作者个人观点,与本网无关。仅供读者参考,并请自行核实相关内容。)
山西省运城市今年以来重点聚焦农村土地、房屋等资产管理中的突出问题,探索开展农村固定资产专项监督检查和清理整顿工作。
国资央企围绕强“根”铸“魂”提升党的建设质量,推动各级党组织强起来严起来和实起来。为做强做优做大国有企业提供坚强组织保证。
栏 目:CentOS
下一篇:如何将CentOS 8转换为CentOS Stream
本文标题:青藤最全K8S加固指南:12个最佳实践防止K8S配置错误
本文地址:http://aihaoedu.com/fuwuqijiaocheng/659.html
您可能感兴趣的文章
- 10-26Acrel-3000WEB标准版
- 10-26【蓝因子教育】部署你的Python项目Python-Jack-Jack
- 10-26CentOS 60正式版终于发布 附下载地址
- 10-26Windows 11安装过程中如何禁用默认的BitLocker加密?
- 10-26【推荐收藏】2024年5款最佳 GPU 渲染引擎大盘点
- 10-23Rocky Linux 是否能替代CentOS
- 10-23时代的欧拉还是欧拉的时代?
- 10-23拒绝CentOS停更焦虑躺平式“平替”是哪家?
- 10-23CentOS 9 中文正式版下载 - 流行稳定的免费企业级 Linux 服务器操作系统
- 10-23Centos70下载 中文正式版(附安装教程)
阅读排行
推荐教程
- 08-04SJTUG下架Docker Hub镜像
- 08-30CentOS创始人开辟新项目Rocky Linux并火速上线官网
- 08-21VMware vSphere Foundation从应用程序到存储的智能操作
- 06-29CentOS 75 正式发布 基于 RHEL 的安全稳定发行版
- 08-04选择更多:优麒麟新增上海交大等四大镜像站
- 08-08一站式采购!麒麟信安 CentOS 安全加固套件上架华为云云商店
- 09-03VMware Fusion 12全新特性让虚拟机变得更好
- 08-07统一操作系统UOS官网正式上线:自带全家桶、可替代Windows
- 08-08北京理工大学学术网
- 08-25CentOS Linux 7 生命周期今日正式结束不会获得更新和安全补丁