在Kubernetes中检查RBAC

保护Kubernetes集群是一回事,但是维护安全性仍然是一个挑战。 但是,Kubernetes已添加了新工具:现在,两者都更容易实现。


图片


Kubernetes(从1.6版开始)引入了基于角色的访问控制(RBAC)的概念,该概念允许管理员为集群用户定义限制策略。 也就是说,您创建了一个具有有限访问权限的用户:限制用户对诸如机密之类的资源或某些名称空间的访问。


在本文中,我们将不了解如何实施RBAC。 有足够的体面的来源来讨论该主题,并去:



最好着重于如何满足您的业务需求,并查看是否需要检查正在运行的RBAC对象以查看它们是否执行其功能。


我们的剧本


一些组织接受几个小组来使用新的Kubernetes集群。 有一个要求:您不能干预相邻组的部署,因此不会出现无法预料的组间问题或停机时间。


因此,群集所有者将RBAC部署到群集中,从而限制了对特定名称空间的访问。 第一次检查显示:组不能在名称空间中查看彼此的容器。


一个星期过去了。 群集的所有者注意到,来自隔离名称空间的用户正在从另一个名称空间读取机密。 怎么会这样 他用过RBAC!


我应用了它,但是,正如在使用代码时一样,必须对系统进行测试以确保其符合期望的结果。 最好使用kubectl CLI Kubernetes kubectl提供一组用于检查RBAC配置的工具。 kubectl auth can-i


我可以吗 (“我可以吗?”)
使用API​​的can-i仅检查是否可以执行某些操作。 他使用以下参数: kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] 。 现在,当前用户可以检查特定的操作是否对他可用。 出发:


 kubectl auth can-i create pods 

这应该返回带有适当退出代码的“是”或“否”响应。


但是,当尝试检查另一个用户的权限时,我们遇到了一个问题:在./kube/config配置文件中指定了要在集群中获得我们授权的用户,并且不方便使用单独的配置来测试单个用户。 幸运的是,Kubernetes再次脱颖而出:它能够使用--as=--as-group=标签模拟用户。


更新命令,使用其他用户的模拟:


 kubectl auth can-i create pods --as=me 

我们应该看到,使用退出代码1 ,返回响应“ no”。


这非常好,因为我们现在有了一组命令,这些命令使我们可以检查用户或用户组是否有权访问Kubernetes的任何资源-从查看窗格到删除机密。


自动化技术


但是,现在停止还为时过早:现在,我们可以实现一个测试序列,该序列将描述需求列表并将其作为CD管道的一部分运行。 为了事业!


有很多选择,要实现的语言也很多:以JavaScript中的Ava和Mocha开头,以Rspec结尾。 在这种情况下,我将实现纯Bash测试框架Bats


以下是运行测试的示例。 它检查RBAC规则的操作,该规则允许组中的用户更改名称空间中正在运行的炉床数量。 如果设置了“可执行”属性,则执行该命令。 或-使用bats filename


 #!/usr/bin/env bats @test "Team namespaces can scale deployments within their own namespace" { run kubectl auth can-i update deployments.apps --subresource="scale" --as-group="$group" --as="$user" -n $ns [ "$status" -eq 0 ] [ "$output" == "yes" ] done } 

--as--as-group要求使用以下RBAC规则:


 rules: - apiGroups: - authorization.k8s.io resources: - selfsubjectaccessreviews - selfsubjectrulesreviews verbs: - create 

这是您在Kubernetes中对RBAC规则执行检查的一种简单方法。 通过使其成为Kubernetes管道的一部分,我们将大大加强RBAC政策。 该方法已经过实践测试:捕获违反访问策略的更改要快得多!


感谢您抽出宝贵的时间阅读这篇文章!

Source: https://habr.com/ru/post/zh-CN434374/


All Articles