K8s网络安全探究

150 阅读5分钟

  本文已参与「新人创作礼」活动,一起开启掘金创作之路。  

作者按:

 云原生技术的火热,很多应用都进行了容器化改造,更改部署都变得很轻松,尽管k8s在大规模处理容器配置部署管理都提供了简单方法,但是安全性方面增加了复杂性和难度,如何保证容器应用的安全呢,下面就来研究一番。

 

一、云原生安全

云原生安全的4个C

分别是云(cloud)、集群(cluster)、容器(container)、代码(code·)

image.png

图自官网仅供学习

 

(1)云:就是集群的计算基础Iaas基础设施安全、云提供商的安全性(alibaba、amazon、google、ibm、micorsoft、oracle、vmware)

 

(2)集群:从两方面考虑一个是集群组件、一个是集群中运行的组件(应用)

(3)容器:容器的漏洞扫描、镜像安全、容器运行时类别等

(4)代码:这个很好理解,代码写的过程中考虑被攻击,减少攻击面,加强代码测试审查

 

二、k8s安全控制

image.png 1、安全控制框架如上图,主要有三个阶段,每个阶段支持插件方式启用,由API Sever来配置,这个过程中请求api,api对于请求进行鉴别授权给予其操作集群资源的权限

(1)Authtication(鉴权)

(2)Authorization(授权)

(3)Admission Control(准入控制)

 

2、鉴权:是如何鉴别请求的,如何做身份认证,apiserver提供三种客户端身份认证

(1)https证书认证:基于ca证书签名的数字证书认证

(2)http token:通过一个token来识别用户(serviceaccount)

(3)http base认证:用户名+密码方式(1.19弃用)

3、授权:RBAC(role-based access control)基于角色的访问控制

RBAC根据api请求属性,决定允许访问

(1)User:用户名

(2)Group:用户组

(3)资源:pod、deployment

(4)操作方法:get、list、create、update、patch、watch、delete

(5)命名空间

(6)API组

4、准入控制 admission control

是一个准入控制器的插件列表,发送到api server的请求都需要经过这个控制器插件检查,不通过则拒绝

如何启用

kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger ...

关闭

kube-apiserver --disable-admission-plugins=PodNodeSelector,AlwaysDeny ...

查看默认开启

kubectl exec kube-apiserver-k8s-master -n kube-system -- kube-apiserver -h | grep enable-admission-plugins

 

 

二、RBAC

是k8s的默认授权策略,是动态配置策略,修改apiserver中的配置后即时生效

主要对象:

(1)用户 user

(2)用户组 group

(3)账户:serviceaccount

角色分类:

(1)role:授权特定命名空间的访问权限

(2)clusterrole:授权所有命名空间的访问权限

角色绑定:

Rolebinding:将角色绑定到主体(在指定命名空间执行授权)

Clusterrolebinding:将集群角色绑定到主体(在集群范围执行授权)

 

三、网络策略

默认情况下,k8s集群网络没有限制,pod和pod之间可以互相通信,在一些特殊场景下需要用到网络策略,减少攻击面,保障安全。网络策略是k8s的一个资源,可以限制pod的出入流量,提供pod级别、命名空间namspace级别进行网络访问的控制

image.png  

上图是k8s官网配置

 

注意:pod级别的podSecurityPolicy准入控制器将在v1.25后删除,迁移到pod安全准入或者第三方准入webhook。

 

四、k8s安全实践建议

1、启用RBAC

2、apiserver和第三方身份验证程序集成提升安全性

3、使用TLS(传输层安全性协议)、防火墙以及为etcd秘钥加密

4、将k8s节点隔离起来,在单独的内网网络域中,甚至不要暴露给企业内网

5、监控容器的网络流量,识别异常的通信,减少攻击面

6、进程白名单,列一个白名单列表,识别非常规进程

7、打开日志审计,设置日志级别、时长、大小等

8、保持k8s集群版本的更新,新版会减少漏铜

9、配置kubelet禁止匿名访问、限制kubelet只修改自己绑定的节点上pod对象

10、加强运维人员的安全意识

11、细分k8s网络,降低基础网络架构瘫痪的可能性

12、主动进行安全扫描和监控

五、CIS(center for intenet security)互联网安全中心

 

  从2000年开始,互联网安全中心与IT社区有密切合作。对于k8s安全发布了安全基准和最佳实践,这些基准测试包括了一封详细指南,通过推荐安全集群组件以及配置的设置,为k8s环境安全奠定基础。这份安全指南内容量很大,完成安全基准测试需要配合相关工具完成,这里就有由安全厂商Aquq推出的Kube-bench,以CIS基准作为基础,检查集群是否安全部署,具体文档以及工具可以上官网搜索获取。

当然对于集群安全强化有很多框架,需要根据自己行业特殊场景选取,这里列一下不同框架以及其专注的区域

image.png  

(1)CIS Kubernetes 框架提供了基准测试作为集群组件安全配置的指南。

(2)MITRE ATT&CK矩阵主要基于威胁建模,它提供了关于组织如何在妥协后保护其Kubernetes工作负载的对抗性见解和策略。

(3)PCI DSS 是一种支付行业安全标准,专注于如何保护持卡人数据环境的容器和 Kubernetes 生态系统。

(4)NIST框架特别关注风险管理,并概述了容器化应用程序的常见风险及其对策。

(5)NSA-CISA 框架提供了有关强化 Kubernetes 集群的指导,重点是配置管理、供应链的整个生命周期和内部威胁。

 

至此,对于安全方面有一个基本的了解了,目前k8s集群已经大面积覆盖了很多公司,所以其安全性的重要不言而喻,通过实践完善集群安全。祝学习顺利!