共计 2641 个字符,预计需要花费 7 分钟才能阅读完成。
随着 Kubernetes 的倒退和改良,新的平安威逼和危险也逐步向 K8s 转移,因而 K8s 安全性变得越来越重要,而爱护 K8s 集群已成为 DevOps 团队不容忽视的重要工作。K8s 有多种实现类型(本地、云治理、混合等)、泛滥开源反对工具和各种配置设置,且爱护运行容器工作负载的任何平安敏感架构的需要也在增长。
依据 CNCF 的 K8s 平安审计考察,攻击者能够通过利用各种 K8s 破绽和几种标准配置进行非法行为。明天,咱们将探讨一些施行保障 K8s 平安的最佳实际。
K8s 和 K8s 集群
K8s 是一个用于治理容器(容器化应用程序)的零碎,容器则能够了解为是一个轻量级的虚拟机。要创立应用程序,就须要先创立一些容器并应用 K8s 来治理这些容器。这的确是一个宏大且疾速扩大的生态系统,并且 K8s 的设施、反对和工具绝对比拟容易取得。K8s 能够立刻生成和扩大容器,并跨所有容器治理存储。
K8s 集群是蕴含所有 K8s 组件的 K8s 零碎。集群能够在物理机(如 PC 或笔记本电脑)或虚拟机上运行。如果你有一台机器运行残缺的 K8s 零碎,则该机器托管您的 K8s 集群;假如你有两台机器运行 K8s,这两台机器都会组织你的 K8s 集群。集群能够在物理机和虚拟机的任意组合上运行。
7 步爱护 K8s 集群平安
接下来咱们一起看看企业应该施行哪些平安最佳实际来确保其 K8s 集群的安全性。
1. 将 K8s 降级到最新版本
最根本且常常被忽视的平安最佳实际是将 K8s 生态系统放弃最新状态。企业将受害于新的平安性能和谬误跟踪更新以及变体版本。此外,在启动到生产集群之前,请在测试环境中应用最新的残缺版本。
2. 验证 Kubernetes API 服务器
Kubernetes API 服务器,也被称为 Kube-API 服务器,是 K8s 集群的外围。K8s API 是 K8s 集群的次要拜访点。管理员或服务帐户能够通过命令行实用程序 kubectl、REST API 调用或其余客户端 SDK 拜访 API。服务器提供拜访并保障集群是可操作的。所有在集群外部调用的 API 尝试都应该应用加密的传输层安全性。倡议采纳完全符合访问控制规定的 API 服务器的 API 身份验证办法。
3. 启用 RBAC 受权机制
RBAC 即基于角色的访问控制机制,容许多个应用程序基于最小权限执行具体操作,并且仅授予执行必要的权限。管理员应遵循以下 K8s RBAC 最佳实际:
- 应用
–authorization-mode=RBAC
参数在 API 服务器中启用 RBAC,强制 RBAC 作为集群平安的标准配置。 - 为每个应用程序应用专用的用户服务帐户,而不是 K8s 创立的默认服务帐户。专用服务帐户容许管理员对每个应用程序强制执行 RBAC,并更好地管制提供给每个应用程序资源的细粒度权限。
- 缩小可选 API 服务器标记的数量,以缩小 API 服务器的攻击面。每个标记都有助于集群治理的特定方面,这可能会也可能不会裸露 API 服务器。缩小以下可选标记的应用:例如匿名身份验证,不平安的绑定地址,和不平安端口。
- 定期调整和更新 RBAC 政策。首先删除不再须要的任何权限,这个动作可能很耗时,但能无效保障平安。
- 强制执行最低权限以使 RBAC 零碎失效。当集群管理员遵循 Pareto 准则时,只将所需的权限调配给用户或应用程序。不应授予额定权限,应防止应用通配符
[“*”]
或一揽子拜访。
4. 进步节点安全性
首先增强运行 pod 节点安全性:
- 配置的规范和基准。依据平安倡议配置主机。应用与特定 K8s 版本相干的 Internet 平安核心基准验证集群。
- 最小化治理拜访。通过限度治理拜访来缩小 K8s 节点上的攻击面。
- 节点上进行隔离和束缚。在特定节点上执行特定的 pod,这样能够确保 pod 在具备特定隔离和平安设置的节点上运行。
向节点对象增加标签以容许 pod 专门针对节点,从而管制 pod 能够拜访哪些节点。利用节点标签后,将节点选择器增加到 pod 部署中,以便 pod 对所选节点进行显着更改。
5. 管制 kubelet 拜访权限
kubelet 施展着在每个集群节点上继续运行的操作员的作用。它通过 API 与用户通信,这些 API 治理试图在节点上运行并执行特定工作的 pod。未经受权向 kubelet 披露为攻击者提供了 API 拜访权限,并可能危及节点或集群的平安。
要缩小攻击面并避免通过 kubelet 对 API 进行未经受权的拜访,请执行以下步骤:
- 在启动 kubelet 之前,将
-anonymous-auth
标记设置为false
以禁用匿名拜访:-anonymous-auth=false
。 - 应用
-kubelet-client-certificate
和-kubelet-client-key
标记开始 Kube-Episerver 命令。这可确保 API 服务器对 kubelet 进行身份验证并避免匿名申请。 - kubelet 提供了一个只读 API,管理员无需登录即可应用。这样可能会裸露潜在的敏感集群信息,管理员应应用以下命令敞开只读端口:
—read-only-port=0
。
6. 配置命名空间和网络策略
命名空间将敏感工作负载与非敏感工作负载辨别开来。解决多个命名空间可能会有些艰难,但这使得实现安全控制变得更简略,例如治理性能的网络策略以调节进出 pod 的流量。
7. 启用审计日志
启用 K8s 审计日志并监督它们是否存在非法行为和可疑的 API 调用。K8s 能够保留集群流动的具体记录,所以咱们能够立刻在审核日志中检测到可能的平安问题。例如,攻击者试图暴力破解明码可能会创立身份验证和受权日志。如果这些行为重复呈现,则可能存在平安问题。
要启用审计日志,需应用 K8s 审计策略,容许管理员依据状况配置审计级别:
None
– 与此规定匹配的事件将不会被记录。Metadata
– 记录申请的元数据,例如申请用户、工夫戳、资源和动词。Request
– 记录事件的元数据以及申请注释,但不记录响应注释。这不适用于对非资源的申请。RequestResponse
– 跟踪事件元数据、申请和响应注释。这不适用于对非资源的申请。
这些信息的大部分由 K8s 审计日志记录,并且与集群 API 的简略联合容许您将这些日志发送到内部日志记录和存储解决方案。同时还能够生成仪表板、可疑行为警报和事件调查报告。
总结
依赖 K8s 作为后端的 DevOps 团队必须意识到集群和能够在其中运行的 Docker 容器可能面临的所有危险和攻打。因为可用的攻打向量品种繁多、技术的不断进步以及该工具的统一、宽泛采纳,歹意攻击者发现浸透集群可能无效发动攻打并取得利益。爱护 K8s 集群是一项艰巨的工作,亲密关注并尽可能检测系统漏洞或歹意攻击行为至关重要。