乐趣区

关于云计算:k8s-安全策略最佳实践

作者:万宏明,KubeSphere member,负责 KubeSphere 平安和多租户团队

随着 K8s 在生产和测试环境中用的越来越多,对安全性的关注也会越来越多,所以本文次要是给大家分享以下内容:

  • 理解 K8s 环境面临的平安危险
  • 理解 K8s 提供的平安机制
  • 改善 K8s 平安情况的最佳实际

1. 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 集群平安和云平台、数据中心的平安。

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

代码平安 往往能够通过以下形式进行应答,比如说利用之间的通信,尽量应用 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 公布!

退出移动版