作者:万宏明,KubeSphere member,担任 KubeSphere 安全和多租户团队

随着 K8s 在出产和测试环境中用的越来越多,对安全性的重视也会越来越多,所以本文首要是给咱们分享以下内容:

  • 了解 K8s 环境面对的安全危险
  • 了解 K8s 供给的安全机制
  • 改善 K8s 安全状况的最佳实践

1. K8s 安全危险

k8s 安全策略最佳实践

这张图是 CNCF 金融用户小组总结的 K8s 信赖鸿沟图,它把在 K8s 环境中的信赖鸿沟区分红三大块儿。

  • 容器镜像相关部分,首要涉及到的安全进犯点便是镜像仓库和镜像自身。赤色曲线能够被视为独立鸿沟的体系。
  • K8s 操控平面相关部分,如果说一个进犯者进犯你的 K8s 集群的话,首要会进犯 K8s 的操控平面,中间涉及到的组件便是 K8s 的 apiserver、scheduler 和 controller-manager,所以说这些组件之间调用链的安全也需求去留意。
  • 节点上运转时的安全,其中包含 kubelet、kube-proxy 和容器运转时环境也简单被进犯,要防止运转环境被浸透。

咱们根据不同的进犯类型区分,首要最简单躲避的便是来自外部的进犯。一般状况下,来自外部的进犯会有 2 种类型:

  • 一种是体系层面的缝隙,需求及时更新,及时跟进 K8s 社区和安全范畴相关的最新消息,能够很好的躲避。

  • 第二个是使用自身带来的浸透或许是提权的危险,事务布置在 K8s 之上,使用的缝隙可能形成容器越权或许容器逃逸之类的危险。

凭借歹意容器进行进犯也比较常见,在使用容器的进程种首要会面对以下危险:

  1. 使用了不受信赖的镜像仓库或许是使用了被篡改的容器镜像会导致歹意代码被执行。
  2. 容器执行歹意代码存在提权或许逃逸的危险。
  3. 即便容器运转时满足安全,无法提权或逃逸,内部暴露的服务也简单成为被进犯的点,形成数据被歹意拜访。

K8s 集群的规模变大,运维人员与终端用户也会变多,安全凭据的泄露,会对整个集群的安全形成威胁。

即便集群保护的非常好,在安全凭据没有泄漏的状况下,来自内部成员的歹意进犯也难以躲避,即便是在测试环境也需求必定程度的租户阻隔,防止来自内部的进犯、对数据的歹意拜访。

2. K8s 安全机制

在 K8s 社区,安全问题的重视度是非常高的,在 K8s 的规划中,各组件都有安全相关的特性。在 API 认证层面,操控平面中各个组件之间,需求开启 mTLS 进行组件之间的互认证。

K8s 也支撑丰厚的认证、拜访操控的机制,一般咱们会凭借 RBAC 对用户的权限进行约束。

K8s 还供给了针对容器才能的约束机制,咱们能够经过 Security Context 去约束容器运转时的用户、用户组,对容器特权进行约束。

K8s 中 Pod Security Policy 能够为集群使用安全战略,可是这个特性会在 1.25 之后被后边提到的 pod security admission webhook 替代。这是 K8s 供给的安全战略机制,非常主张咱们去深化了解。

咱们还能够用到 Resource Quota 结合 request、limit 约束容器的资源用量,尽可能的使用 linux 供给的安全特性,针对网络、cpu、内存等资源进行用量的约束。Limit Range 能够协助咱们为 Pod 设置默认的资源约束。

除此之外,还能够针对 K8s 集群网络进行区分,经过 network policy 来支撑网络阻隔战略,设置黑名单或许白名单,为 namespace 去分配一独立的 IP 池。

咱们能够凭借 K8s 节点调度战略、污点办理,node selector 等机制去约束容器能够调度的节点,完成必定程度的物理阻隔。

K8s 还有一些和安全相关的内容,一个是审计日志,需求在 kube-apiserver 中进行开启。然后是 Pod Security Admission Webhook,这将是一个新的特性,协助咱们为集群使用安全战略。最后便是和数据安全相关,咱们能够凭借 KMS 来加密 etcd 中的数据,在容器运转时进行解密。

3. K8s 安全最佳实践

K8s 安全最佳实践,大部分都是来自于社区用户和咱们实际出产中环境中的经验总结。

k8s 安全策略最佳实践

上图是 K8s 社区的对云原生安全的安全总结,在云原生中首要分四个比较重要的层级:代码安全、容器安全,K8s 集群安全和云平台、数据中心的安全。

针对这四个层面的安全问题,有不同的解决战略。

代码安全往往能够经过以下方法进行应对,比方说使用之间的通讯,尽量使用 TLS 或 mTLS,确保数据的加密传输。即便集群中大部分都是可信的环境,TLS 带来的功能损耗我以为也是在能够接受的范围之内。

针对代码安全的增强,一般需求咱们在在 CI 或 CD 进程中对代码进行扫描,对容器镜像进行扫描,对使用安全进行扫描,即便许多东西会存在误报的状况,但在大规模的项目中这些过程是必不可少的。

容器安全方面,咱们主张尽可能的使用可信的根底镜像,除此之外,尽可能去删掉不必要的二进制,防止根底镜像中操作体系缝隙带来的影响。

在容器运转的进程中尽可能的使用非 root 用户,除非是有特定的数据读写要求,可能会有一些问题。

  • 集群安全 K8s 集群安全层面的主张,首要咱们需求收拾集群中所有要害组件的通讯矩阵,要知道哪些组件会用到哪些端口,比方说 K8s 操控平面常用的 10250,6443 端口等。对体系组件所用到的端口进行合理的管控,经过防火墙来供给最根底的保障。
  • 数据安全 在 K8s 集群中咱们能够完成或接入已有的 KMS 服务,对 etcd 中的数据进行加密,在 etcd 数据泄漏的状况下也能够确保集群中 secret 数据的安全。
  • 网络安全 在 K8s 中咱们能够凭借 Network Policy 完成网络阻隔,常用的网络插件 calico 和 Cilium 都能够很好的支撑。不要开放不必要的端口,不仅是不对外开放端口甚至对于容器内部暴露的端口也要尽可能的去屏蔽。
  • 针对所布置的使用安全 尽可能的为每一个布置到 K8s 的容器配置 Security Context,约束容器内的运转用户和容器特权,禁止其直接读取或读写整个宿主机的网络和文件。再便是 K8s 针对安全战略的的增强,咱们能够使用一些安全战略办理东西如 Gatekeeper,为整个集群运用一些安全战略以反抗危险。
  • 可观测性部分 不论是约束节点调度,仍是配置网络阻隔战略等,这些都是以很被迫的方法主动进行防护。在杂乱的分布式容器化环境中数据的可见性降低,凭借可观测性东西,咱们就能够及时的发现集群中反常,比方反常流量、反常的日志、反常的 API 拜访等,这些对整个体系安全来说显得尤为重要。凭借可观测性东西,无论是监控数据仍是反常日志,都能够协助咱们在第一时间去发现问题,咱们能够设置合理的告警战略进行防护。
  • 安全战略办理 K8s 集群安全战略,除了在使用进程中标准对使用者的要求,比方约束不可信的镜像仓库、特权容器、hostPath 挂载,也能够凭借 Gatekeeper 这类安全战略办理东西进行主动的阻拦。

KubeSphere 中的安全增强

KubeSphere 是一个构建在 K8s 之上的容器办理平台,咱们针对 K8s 安全问题供给了以下增强:

1、凭借可观测性组件增强反常的感知才能。凭借日志、监控数据结合告警战略来进步反常感知的才能,增加数据的能见度。

2、支 Network Policy 完成网络阻隔,支撑 IP 池的办理。

3、支撑接入 Kata Containers 等更安全的运转时。

4、KubeSphere 社区中开源的 KubeEye,是一个能够完成集群主动巡检的小东西,能够协助咱们扫描集群中存在的安全危险、不合理的配置等。

5、KubeSphere 供给了 Gatekeeper 的集成,并方案供给可视化的办理界面,完成安全战略的办理。

6、在 DevOps 流水线中咱们能够集成代码、镜像等安全扫描东西。

本文由博客一文多发平台 OpenWrite 发布!