Kubernetes 是一个复杂的平台,需要大量的配置和管理。为了保证 Kubernetes 工作负载的安全,尤其是在生产环境中,您需要通过实施安全最佳实践来解决关键的架构漏洞和平台依赖性。
本文将向您介绍K8s 安全实践的9个关键步骤
1.启用 K8s 的 RBAC
RBAC 可以帮助您定义谁有权访问 Kubernetes API 以及他们拥有哪些权限。RBAC 通常在 Kubernetes 1.6 及更高版本(后来在一些托管的 Kubernetes 提供程序上)默认启用。因为 Kubernetes 结合了授权控制器,所以当您启用 RBAC 时,您还必须禁用旧的基于属性的访问控制 (ABAC)。
使用 RBAC 时,更喜欢特定于命名空间的权限而不是集群范围的权限。即使在调试时,也不要授予集群管理员权限。仅在您的特定情况需要时才允许访问更为安全。
2.使用第三方认证加固API Server
建议将 Kubernetes 与第三方身份验证程序(例如 GitHub)集成。这提供了额外的安全功能,例如多因素身份验证,并确保 kube-apiserver 在添加或删除用户时不会更改。如果可能,请确保不在 API 服务器级别管理用户。您还可以使用 OAuth 2.0等
3. 启用TLS、防火墙等保护 etcd
由于 etcd 存储集群的状态及其机密,因此它是敏感资源,也是攻击者的有吸引力的目标。如果未经授权的用户获得了对 etcd 的访问权限,他们可以接管整个集群。读取权限也很危险,因为恶意用户可以使用它来提升权限。
4. K8s集群网络隔离
为了保证K8s整体的安全,K8s节点必须位于单独的网络上,并且不应直接暴露于公网环境。一般在允许的条件下,我们建议和办公网络也隔离开来。只有保证 Kubernetes 控制操作和数据流量被隔离,才能保证两者不流经同一线路,对数据平面的访问和对控制平面访问才能完全分离。理想情况下,节点应该配置一个入口控制器,设置为只允许通过网络访问控制列表(ACL)从指定端口上的主节点进行连接。
5.监控网络流量
部署在K8s当中的应用通常会使用集群网络。我们应当持续监控网络流量并将其与 Kubernetes 网络策略进行比较,以了解您的应用程序的运行状况并识别异常通信。
同时,如果您将活动流量与允许流量进行比较,就可以识别出对于应用有效的主动流量。依据这些信息可用于进一步加强网络策略,删除不需要的连接以减少攻击面。
6.使用进程白名单
进程白名单是识别意外运行进程的有效方法。首先,在一段时间内观察应用程序,以识别在正常应用程序行为期间运行的所有进程。然后将此列表用作未来应用程序行为的白名单。
当然,进程运行时级别分析是很困难的,以后我们会找机会介绍一些相关的内容。
7.审计日志
确保启用了审计日志,监控那些异常或不需要的 API 调用,尤其是身份验证失败。这些日志条目会显示“禁止”状态消息。这些信息很可能是攻击者正在尝试使用被盗的凭据。
将文件传递给 kube-apiserver 时,您可以使用 –audit-policy-file 标志打开审计日志,并准确定义应记录哪些事件。可以设置日志记录级别包括:None,Metadata,Request,RequestResponse。
8.保持 K8s版本的更新
K8s一直保持着告诉的产品迭代,我们应该保持对K8s更新的关注,尽量更新到最新版本的 K8s。当然升级 K8s可能是一个复杂的过程,如果您使用的是托管 K8s或者K8s发行版,请联系提供商是否处理自动升级。
9. 锁定 Kubelet
kubelet 是在每个节点上运行的代理,它与容器运行时交互以启动 pod 并报告节点和 pod 的指标。集群中的每个 kubelet 都公开了一个 API,您可以使用该 API 来启动和停止 Pod,以及执行其他操作。如果未经授权的用户(在任何节点上)获得了对该 API 的访问权并且可以在集群上运行代码,他们可能会危及整个集群。
关于HummerRisk
HummerRisk 是开源的云原生安全平台,以非侵入的方式对云原生环境进行全面安全检测。
针对于K8s的安全,我们提供多方面的检测能力,可以帮助用户快速发现K8s集群中的各种安全问题。
访问项目地址了解试用: https://github.com/HummerRisk/HummerRisk