9步操作让你的K8s 环境更安全

发布于:2023-01-04 ⋅ 阅读:(303) ⋅ 点赞:(0)

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​

本文含有隐藏内容,请 开通VIP 后查看