0x00 Referer
个人学习笔记,摘录于 K8s 安全策略最佳实践
- 万宏明
+ 互联网
+ ChatGPT
0x01 K8s 是什么
Kubernetes
(k8s
)是一个开源的容器编排平台,用于自动化容器的部署、扩展和管理。它提供了跨主机集群的容器编排、自动化容器部署和管理、自动化容器扩展、容器健康检查和自动恢复、自动化容器负载均衡、容器存储管理等一系列功能。
Kubernetes 的架构包含了以下几个核心组件:
-
Master组件:包括 API server
、etcd
、Controller Manager
、Scheduler
等组件,用于管理整个Kubernetes
集群。 -
Node组件:包括 kubelet
、kube-proxy
、Container Runtime
等组件,用于管理每个运行容器的节点。 -
Add-on 组件:包括 DNS
、Dashboard
、Ingress Controller
等组件,为Kubernetes
集群提供更丰富的功能。
Kubernetes 的特点包括:
-
弹性伸缩: Kubernetes
可以自动扩展和收缩容器,根据负载进行自动调整。 -
自动容器部署和管理: Kubernetes
可以自动化容器部署和管理,无需手动干预。 -
容器编排: Kubernetes
支持多层容器编排,使得容器的关系更加复杂和灵活。 -
负载均衡: Kubernetes
可以在多个节点上自动分配负载,实现负载均衡。 -
容器健康检查和自动恢复: Kubernetes
可以自动检查容器状态,如果发现出现故障,可以自动恢复。 -
容器存储管理: Kubernetes
可以管理容器的存储,包括存储卷、存储卷模板等功能。
Kubernetes
是一款强大的容器编排平台,可以帮助企业实现容器化的业务部署和管理,提升效率和可靠性。
0x02 K8s安全风险
2.1 K8s 信任边界
k8s-threat-model
2.2 外部攻击
-
应用漏洞造成的渗透或提权攻击风险 -
系统层面未知安全漏洞带来的安全隐患
2.3 恶意容器
-
使用不受信任的镜像仓库或被篡改的容器镜像导致恶意代码被执行 -
恶意容器存在提权、逃逸风险 -
恶意容器会对集群内暴露的服务造成威胁
2.4 恶意用户
-
安全凭证泄漏对集群安全造成威胁 -
执行恶意代码对集群内部其他应用造成威胁 -
恶意访问集群内部敏感数据
0x03 K8s安全机制
3.1 K8s API 安全
-
访问控制:通过 RBAC
(基于角色的访问控制)和命名空间进行访问控制,仅允许授权的用户或服务访问 API。 -
加密通信:使用 TLS
(传输层安全)协议对API
服务器和客户端之间的通信进行加密。 -
身份验证:使用身份验证机制,例如基于令牌的身份验证( Token-based authentication
)或基于证书的身份验证(Certificate-based authentication
)来验证用户或服务的身份。 -
安全检查:定期进行安全检查,包括检查 API 的日志记录、审计、身份验证和授权情况,以确保安全性。
3.2 容器能力限制
-
限制容器特权 -
Security Context:把安全属性分配给 Kubernetes
对象(如Pod
、容器等)的机制。通过设置Security Context
,可以限制容器的权限,包括限制容器的用户 ID、组 ID、能力、SELinux
策略等。 -
Pod Security Policy:提供一种集中式的管理机制,用于限制 Pod
可以使用的安全特性。使用Pod Security Policy
,管理员可以定义一组安全规则,以确保Pod
满足最小的安全要求。例如,可以限制Pod
使用特定的安全上下文、使用特定的存储类别、使用特定的网络策略等。 -
限制资源用量 -
Resource Quota:是 Kubernetes
中的一种资源管理机制,可以用来限制命名空间中Pod
、服务、存储、配置映射等资源的使用量。通过Resource Quota
,集群管理员可以为每个命名空间分配最大的资源数量,防止某个命名空间中的资源过度消耗整个集群的资源。 -
Limit Range:通过 Limit Range
,管理员可以为Pod
和容器设置最大的CPU
、内存、存储量等参数,以确保它们不会过度消耗资源,从而导致集群中的其他应用程序受到影响。 -
限制网络访问 -
Network Policy:提供一种有效的方法来控制 Pod
之间的网络流量。通过Network Policy
,管理员可以限制Pod
之间的通信,确保集群中的应用程序和数据的安全性。 -
限制调度节点 -
Node Selector:根据定义的标签来选择 Pod
运行的节点。通过Node Selector
,管理员可以控制Pod
运行的位置,从而提高集群的可靠性和稳定性 -
Taint:标记节点不可调度或者只能调度特定类型的 Pod
。
3.3 安全增强
-
审计日志
记录 Kubernetes API 服务器和其他组件活动的详细信息,包括谁执行了操作、何时执行的、在哪个节点上执行的以及执行的操作类型等信息。
-
Pod Security Admission Webhook
允许管理员在创建和更新Pod
时对其进行安全检查和审计。Pod Security Admission Webhook
基于Kubernetes
的Admission Webhook
机制,通过验证和审计Pod
的安全属性和配置,确保Kubernetes
集群中运行的容器不会受到安全漏洞的影响。Kubernetes
社群基于此策略机制开发了Gatekeeper
访问控制框架
-
Key Management Service
KMS(Key Management Service
)是一个用于加密和保Kubernetes
集群中的敏感数据的工具。它可以用于管理Kubernetes
集群中的加密密钥,以保护敏感数据(如密码、证书等)的机密性。
0x04 K8s安全最佳实践
4.1 云原生安全的4个C
基于代码的安全性 (Code Security)
-
TLS 与 mTLS -
加密传输与双向认证 -
漏洞扫描 -
检查第三方依赖存在的安全问题 -
代码质量分析 -
应用安全扫描 -
检查常见的攻击如 SQL 注入、CSRF 和 XSS
基于容器的安全性 (Container Security)
-
使用可信的基础镜像 -
容器镜像安全扫描 -
使用非 root 用户 -
删除不必要的二进制
基于编排的安全性 (Cluster Security)
-
节点安全
-
合理配置防火墙 -
控制平面安全
-
启用 API 认证与鉴权 -
启用 Kubelet 认证 -
数据安全
-
使用 KMS -
网络安全
-
使用 Network Policy -
不开放不必要的端口 -
应用安全
-
使用 Pod Security Policy -
使用 Security Context -
使用安全策略管理工具 -
可观测性
-
监控 -
告警 -
安全策略
-
限制不可信的镜像仓库 -
限制特权容器 -
限制 hostPath 挂载 -
限制 hostNetwork -
最小化权限运行
基于云的安全性 (Cloud Security)
-
网络隔离 -
访问控制和身份认证 -
安全日志记录 -
安全审计与监控 -
恢复与灾备
4.2 KubeSphere
KubeSphere是一个基于Kubernetes的容器管理平台,旨在帮助用户轻松部署和管理多个云和本地环境中的容器化应用程序。通过使用Kubernetes的各种安全策略和组件来实现的相应的安全策略。
-
借助可观测性增强异常感知的能力 -
借助 Network Policy
实现网络隔离 -
支持 Kata Containers
等更安全的运行时 -
借助 KubeEye
实现集群自动巡检 -
借助 Gatekeeper
等安全策略管理工具增强集群安全性 -
在 DevOps
流水线中集成代码、镜像安全扫描工具
原文始发于微信公众号(小宝的安全学习笔记):K8s安全策略最佳实践
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论