当多个集群角色分配给 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).
这是我们必须记住的 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。
我知道当您希望您的服务帐户访问多个命名空间时,您可以为一个服务帐户分配多个角色,但我想知道的是,当您为它分配多个集群作用域的 clusterrole 时,它会如何表现.从我的角度来看,我认为它会选择其中之一,但我不确定。
如果您使用多个角色或集群角色绑定为服务帐户分配多个集群角色,则服务帐户将拥有所有这些集群角色的聚合权限,这意味着这些集群角色中定义的所有资源上的所有动词。
Permissions are purely additive (there are no "deny" rules).
这是我们必须记住的 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。