安全客 2024年10月15日
Kubernetes RBAC 最佳安全实践
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍Kubernetes的认证与授权体系及RBAC授权原理,包括API Server和Kubelet Server的认证授权机制,通过实际案例展示RBAC管理不当的安全风险,分享RBAC安全研发与运维的最佳实践及字节跳动内部的安全防护与治理经验。

Kubernetes的认证与授权体系较为完善,API Server支持多种认证机制、授权模式和准入控制器,Kubelet Server也有多种认证和授权模式,如webhook认证和授权。

Kubernetes RBAC授权原理中,引入了Subject、Rule、Role&ClusterRole、RoleBinding&ClusterRoleBinding等概念,Role和ClusterRole内的rules代表显式授予的权限,遵循Deny-by-Default安全模型。

RBAC存在安全风险,如信息窃取、权限提升、横向移动等攻击,通过实际案例说明了不恰当的权限设置可能导致的严重后果,同时给出了一些风险示例及建议。

RBAC安全研发与运维的最佳实践包括遵循最小权限原则、避免使用默认角色/用户/用户组、避免为default服务账号授予权限、尽量避免使用通配符、尽量避免使用敏感权限、尽量使用单独规则对特定资源授予权限以及采取一些安全编排与纵深防御策略。

字节跳动内部的RBAC安全防护与治理实践包括整体思路、制定计划以及防护与治理框架,通过多种方式推进K8s RBAC的权限评估和治理。

引言Kubernetes 是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。随着 Kubernetes 在云原生领域的广泛应用,有效管理谁可以对 Kubernetes 集群执行何种操作变得至关重要。本文将简要介绍 Kubernetes 的认证与授权体系以及 RBAC 授权原理。通过实际案例展示 RBAC 管理不当可能带来的安全风险。然后向大家分享 RBAC 安全研发与运维的最佳实践,以及我们在字节跳动内部的安全防护与治理经验。背景知识如果您对相关背景知识比较了解,可直接跳转到“[RBAC 安全风险剖析]、“[RBAC 安全研发与运维最佳实践]” 章节阅读。本章节将对 Kubernetes 的认证和授权体系进行概述,了解这些机制的原理有助于理解不同场景下集群权限的安全风险。特别是那些能够被轻易利用的未授权访问漏洞,以及那些容易被忽视的权限提升与横向移动攻击风险。Kubernetes 认证与授权体系Kubernetes 的认证与授权体系主要用于满足对关键服务 API(API Server、Kubelet Server)的访问控制。在经过多年的发展后,Kubernetes 已经实现了一套比较完善的认证与授权机制,可以满足用户大多数场景的使用需求。API ServerKubernetes 是一个以容器技术为基础,以声明式 API Server 为核心的分布式容器编排系统。Kubernetes 几乎所有的功能都通过 API Server 对外暴露。而 API Server 支持了多种认证机制,内置了多种授权模式和准入控制器,允许用户根据需要灵活配置和使用。简单来说,当一个用户访问 Kubernetes 的 API Server 时,API Server 会使用启用的认证器依次对请求进行身份认证,API Server 使用第一个成功认证的身份来标识请求者;然后再使用启用的授权器依次对请求进行授权策略的检查,当有任意一个授权器显式地允许、拒绝一个请求时,则立刻返回当前授权结果(如果没有授权器显式地授权,那么请求也将被拒绝)。除此之外,在 API Server 真正处理请求前,它还会使用启用的准入控制器对请求进一步变异和验证。只有所有的准入控制器都验证通过后,请求才会被真正处理。注意:API Server 不保证认证器和准入控制器的执行顺序,但会按照授权模式的配置顺序进行鉴权。Kubelet ServerKubernetes 中还有一个非常重要的组件,那就是 Kubelet。它充当了分布式系统中的 Agent 角色,并使用节点专属的用户证书访问 API Server,管理节点上的资源。但 Kubelet 自身也会作为服务端,对外提供服务。从而实现在容器内执行命令、获取指标信息、容器日志、宿主机日志等功能。Kubernetes 也为 Kubelet Server 提供了多种认证和授权模式。值得一提的是其中的 webhook 认证和 webhook 授权,它们本质上是向 API Server 发送 TokenReview 和 SubjectAccessReview 请求,对客户端的身份进行认证与授权。小结Kubernetes 为 API Server 和 Kubelet Server 支持了多种认证机制、授权机制、准入控制器,以及灵活的自定义接口。这些机制虽然能够满足各种用户需求,但也给用户带来了困扰。因为如果不了解这些机制的原理和负面影响,就很容易为集群引入安全风险和入侵检测盲点。特别是那些能够被轻易利用的未授权访问漏洞,以及那些容易被忽视的提权与横向移动攻击风险。请参见附录和参考文献,了解更多 API Server 和 Kubelet Server 的认证、授权、准入控制的技术细节。Kubernetes RBAC 授权原理RBAC 是 Kubernetes 默认启用的授权机制,也是 Kubernetes 核心组件所使用的授权机制。用户在使用集群时,往往需要使用 RBAC 授权机制来为其用户账号授权,以便部署、运维工作负载及所需的各种资源。各类云原生应用的 Operator、Controller 往往也需要利用 RBAC 授权机制来为其服务账户授权,以确保它们能够访问必要的资源,从而实现其功能。下面的示意图展示了用户账号和服务账号访问 API Server 时的认证、授权、准入控制过程。在 Kubernetes 的 RBAC 授权体系中,引入了以下几种概念:· Subject· 在 Kubernetes 环境中有三类 Subject 可以被授予 RBAC 角色权限。· Rule· 用于在 Role, ClusterRole内部定义具体权限,每一个 rule 都可以通过 apiGroups, resources, resourcesName, verbs, nonResourceURLs 来定义允许对什么资源(API 组,资源类型,资源名称 )执行什么操作(动词)。注意:rule 中的 apiGroups, resources, resourcesNames, verbs, nonResourceURLs 支持使用通配符· Role & ClusterRole· Role用来定义当前命名空间范围内资源的角色,它通过 Rules显式地定义权限。ClusterRole用来定义集群范围内资源的角色,它通过 Rules显式地定义权限。· RoleBinding & ClusterRoleBinding· RoleBinding将某个 ClusterRole或当前命名空间中的某个 Role绑定到 subjects,使 subjects 获得当前命名空间中的 ClusterRole、Role所定义的角色权限。例如可以在命名空间 A 中创建 RoleBinding,将命名空间 A 中的 Role 与命名空间 B 中的 ServiceAccount 绑定。那么命名空间 B 中的 ServiceAccount 将获得命名空间 A 中的 Role 定义的权限。· ClusterRoleBinding将某个 ClusterRole绑定到 subjects,使 subjects 获得 ClusterRole所定义的角色权限。由以上可知,Role和 ClusterRole内的 rules代表一系列显式授予的权限,遵从 Deny-by-Default 安全模型。由于不支持 “deny” 规则,因而不支持显式的排除某些权限。这一特点使得某些应用场景无法利用 RBAC 授权机制实现:在授予所有已知、未知 CRD 资源操作权限的同时,显式地排除某些敏感权限。但我们可以借助 ABAC、Webhook 授权模式,结合准入控制器来为此类场景的服务账号进行权限管理,从而缓解这类问题。下面是一个通过 RBAC 授权机制为 ServiceAccount 绑定权限的示例:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: example-clusterrole namespace: example-ns rules:

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Kubernetes RBAC 安全风险 最佳实践 安全防护
相关文章