问题描述
我一直致力于识别 Kubernetes RBAC 清单文件中授予用户、组或服务帐户广泛访问权限的角色。最初,我正在确定动词和资源对象的通配符(“*”)的用法。我的工作是自动化这个过程并检测给定清单文件中的任何通配符用法。为了更好地解释我的用例,我提供了一个示例 RBAC 角色,该角色允许对 Pod 执行所有操作。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
Metadata:
name: sample_role
namespace: testspace
rules:
- apiGroups:
- '*'
resources:
- 'pods'
verbs:
- '*'
当此 sample_role 与任何用户绑定时,它允许他们对 pod 执行所有操作。很容易检测到任何此类用法并自动执行此操作(kubiscan 等开源工具已经在执行此操作)。然而,当我开始研究更多这些清单文件时,我遇到了非常具有挑战性的用例。挑战不在于角色,而在于这个角色与谁相关。请查看示例代码以了解我的用例。
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
Metadata:
name: sample_role
namespace: testspace
rules:
- apiGroups:
- '*'
resources:
- 'pods'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
Metadata:
name: sample_role_duplicate
namespace: testspace
rules:
- apiGroups:
- '*'
resources:
- 'pods'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
Metadata:
name: sample-role-binding
namespace: testspace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: sample_role
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: Engineer
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
Metadata:
name: sample-role-duplicate-binding
namespace: testspace
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: sample_role_duplicate
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: Operations
在此用例中,sample_role 和 sample_role_duplicate 都授予对 pod 的广泛访问权限。 sample_role 绑定到 Engineers 组, sample_role_duplicate 绑定到 Operations 组。我目前的方法会标记这两个角色并提醒编写此清单文件的人。但在第二个示例中,工程师组可以广泛访问 Pod,而运营组则不允许广泛访问 Pod。我识别任何此类异常的最初想法过程是创建此类角色绑定的列表并为该角色创建异常。但是,当添加任何类似的新角色和组时,这很难管理。我发现自动化这个过程更加困难。我想知道是否有更好的方法来解决这个问题?我想听听你的想法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)