【发布时间】:2022-01-28 00:19:41
【问题描述】:
我们正在现有 GKE 集群中启用 Google Cloud Groups RBAC。
为此,我们首先在 Workspace 中创建了所有组,并根据文档创建了所需的“gke-security-groups@ourdomain.com”。
这些组是在 Workspace 中创建的,并与 Active Directory 集成以实现单点登录。
如文档所述,所有组都是“gke-security-groups@ourdomain”的成员。并且所有组都可以查看成员。
集群已更新以启用 Google Cloud Groups RBAC 标志,我们将值指定为“gke-security-groups@ourdomain.com”。
然后,我们将其中一个组(我们称之为 group_a@ourdomain.com)添加到 IAM 并分配了一个自定义角色,该角色只允许访问:
"container.apiServices.get",
"container.apiServices.list",
"container.clusters.getCredentials",
"container.clusters.get",
"container.clusters.list",
这只是用户能够登录到 Kubernetes 集群并从那里能够应用 Kubernetes RBAC 的最低要求。
在 Kubernetes 中,我们应用了一个角色,它提供特定命名空间中的 pod 列表,以及一个角色绑定,用于指定我们刚刚添加到 IAM 的组。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: test-role
namespace: custom-namespace
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: test-rolebinding
namespace: custom-namespace
roleRef:
kind: Role
name: test-role
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: Group
name: group_a@ourdomain.com
到目前为止,一切看起来都很好。但是,当尝试使用属于组“group_a@ourdomain.com”的用户列出此命名空间的 pod 时,我们得到:
来自服务器的错误(禁止):Pod 被禁止:用户 “my-user@ourdomain.com”无法列出 API 组“”中的资源“pod” 在命名空间“custom-namespace”中:需要 ["container.pods.list"] 之一 权限。
当然,如果我将 container.pods.list 赋予 group_a@ourdomain 分配的角色,我可以列出 pod,但它会为所有命名空间打开,因为 GCloud 中的此权限是全局的。
我在这里错过了什么?
不确定这是否相关,但我们在 gcloud 中的组织名为“my-company.io”,而 SSO 的组名为“...@groups.my-company.io”,并且gke-security-groups 组也是使用“groups.my-company.io”域创建的。
另外,如果我直接指定用户而不是 RoleBinding 中的组,它可以工作。
【问题讨论】:
标签: kubernetes google-cloud-platform google-kubernetes-engine kubernetes-rbac