当多个集群角色分配给 kubernetes 中的一个服务帐户时会发生什么?

What happens when multiple cluster roles are assigned to one service account in kubernetes?

我知道当您希望您的服务帐户访问多个命名空间时,您可以为一个服务帐户分配多个角色,但我想知道的是,当您为它分配多个集群作用域的 clusterrole 时,它​​会如何表现.从我的角度来看,我认为它会选择其中之一,但我不确定。

如果您使用多个角色或集群角色绑定为服务帐户分配多个集群角色,则服务帐户将拥有所有这些集群角色的聚合权限,这意味着这些集群角色中定义的所有资源上的所有动词。

Permissions are purely additive (there are no "deny" rules).

reference

这是我们必须记住的 kubernetes RBAC 角色的黄金法则。

“纯加法”意味着总是允许不撤销。

因此,“纯加法”意味着既没有冲突,也没有优先顺序

  • 它不像 AWS IAM 策略,我们有拒绝和允许......是时候了,我们必须知道哪个具有最高优先级。
  • 不像 subnets ACL ,我们有 DENY 和 ALLOW .. 是时候了,我们需要为每个规则分配编号。这个数字将决定优先顺序。

示例:

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  # "namespace" omitted since ClusterRoles are not namespaced
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  # "namespace" omitted since ClusterRoles are not namespaced
  name: node-reader
rules:
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["get", "watch", "list"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: pod-reader
subjects:
- kind: User
  name: abdennour
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: node-reader
subjects:
- kind: User
  name: abdennour
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: node-reader
  apiGroup: rbac.authorization.k8s.io

如您在此示例中所见,用户 Abdennour 最后应该对以下两个节点具有广泛的读取访问权限:节点和 pods。