你必须避免的5个Kubernetes RBAC错误

Posted CNCF

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了你必须避免的5个Kubernetes RBAC错误相关的知识,希望对你有一定的参考价值。

嘉宾文章由Connor Gilbert提供,之前在StackRox发表


如果你在Kubernetes中运行工作负载,那么你就知道通过Kubernetes API可以访问多少重要的数据 - 从部署细节到持久存储配置再到机密。多年来,Kubernetes社区提供了许多有影响力的安全特性,包括Kubernetes API的基于角色的访问控制(Role-Based Access Control,RBAC)。RBAC是一个关键的安全特性,它允许你控制谁可以访问特定的API资源,从而保护你的集群。由于该特性相对较新,你的组织可能以一种无意中暴露的方式配置了RBAC。要在不留下无意的弱点的情况下获得最少的特权,请确保你没有犯以下5个配置错误中的任何一个。


关于RBAC,我们能给出的最重要的建议是:“使用它!”不同的Kubernetes发行版和平台在不同的时间默认启用了RBAC,新升级的旧集群可能仍然不强制执行RBAC,因为遗留的基于属性的访问控制(Attribute-Based Access Control,ABAC)控制器仍然处于活动状态。如果你正在使用云提供程序,此设置通常在云控制台或使用提供程序的命令行工具中可见。例如,在谷歌Kubernetes引擎上,你可以使用gcloud在所有集群上检查该设置:


$ gcloud container clusters list --format='table[box](name,legacyAbac.enabled)'┌───────────┬─────────┐│ NAME │ ENABLED │├───────────┼─────────┤│ with-rbac │ ││ with-abac │ True │└───────────┴─────────┘


一旦你知道RBAC已启用,就需要检查你是否没有犯前5个配置错误中的任何一个。但是首先,让我们回顾一下Kubernetes RBAC系统中的主要概念。


Kubernetes RBAC概述

集群的RBAC配置控制哪些subjects可以执行哪些verbs、resource types和namespaces。例如,配置可能授予用户alice访问名称空间external-api中对pod类型资源的view权限。(资源的作用域也在API组中。


这些访问权限由以下定义综合而成:

  • Roles,它定义rules列表。每个规则都是verbs、resource types和namespace选择器的组合。(ClusterRole可以用来引用与名称空间无关的资源,比如节点。

  • RoleBindings,将roles连接到subjects(users、groups和service accounts)。(ClusterRoleBinding授予对所有名称空间的访问权。


在Kubernetes 1.9及更高版本中,可以使用Aggregated ClusterRoles特性扩展Cluster Roles,以包含新的rules。


这种设计支持细粒度的访问限制,但是,与任何强大的系统一样,即使是知识渊博和细心的管理员也可能犯错误。我们与客户的经验揭示了以下五个最常见的错误,你可以在RBAC配置设置中寻找这些错误。


配置错误1:不必要地授予集群管理员角色

内置的cluster-admin角色授予对集群的无限访问权。从旧的ABAC控制器过渡到RBAC期间,一些管理员和用户可能通过广泛地授予cluster-admin来复制ABAC的许可配置,而忽略了相关文档中的警告。如果用户或组经常被授予cluster-admin权限,帐户被入侵或错误可能产生危险的广泛影响。Service accounts通常不需要这种类型的权限。在这两种情况下,都应该创建更适合的角色或集群角色,并只授予需要它的特定用户。


配置错误2:错误地使用角色聚合

在Kubernetes 1.9及更高版本中,可以使用角色聚合(Role Aggregation)简化特权授予,方法是允许将新特权组合到现有角色中。但是,如果不仔细检查这些聚合,它们可能会更改角色的预期用途;例如,system:view角色可以不恰当地与view以外的verbs聚合在一起,这违反了授予system:view的subject永远不能修改集群的意图。


配置错误3:重复的角色授予

角色定义可能相互重叠,以多种方式为subjects提供相同的访问权限。管理员有时希望出现这种重叠,但是这种配置会使理解授予哪些subjects哪些权限变得更加困难。而且,如果管理员没有意识到多个角色绑定授予相同的权限,这种情况会使访问撤销变得更加困难。


配置错误4:未使用的角色

创建但不授予任何subject的角色会增加RBAC管理的复杂性。类似地,授予角色给不存在的subjects(例如删除名称空间中的服务帐户或离开了组织的用户)会使你很难看到真正重要的配置。删除这些未使用或不活动的角色通常是安全的,并将注意力集中在活跃角色上。


配置错误5:授予不存在的角色

角色绑定可以引用不存在的角色。如果将来出于不同的目的重用相同的角色名称,这些不活跃的角色绑定可能会突然且意外地将获得特权。


总结

在使用Kubernetes时,需要注意许多安全事项 - 镜像、部署、节点和集群是否被正确锁定?而Kubernetes RBAC配置是集群安全性的重要控制之一。正确配置集群RBAC角色和绑定,有助于将应用程序被入侵、用户帐户接管、应用程序错误或简单的人为错误的影响降至最低。现在就检查你的集群 — 你是否犯了这些配置错误?


点击文末<<阅读原文>>进入网页了解更多。




你必须避免的5个Kubernetes RBAC错误




CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。 

CNCF云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。

以上是关于你必须避免的5个Kubernetes RBAC错误的主要内容,如果未能解决你的问题,请参考以下文章

这些用来审计 Kubernetes RBAC 策略的方法你都见过吗?

Kubernetes集群RBAC资源安全框架(三十九)

kubernetes RBAC相遇--介绍常规用法集群默认

「走进k8s」Kubernetes1.15.1的RBAC(28)

Kubernetes入门至精通 Kubernetes集群安全 - 鉴权

RBAC在Kubernetes上的支持