我们正在现有 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”无法在命名空间“custom-namespace”中的 API 组“”中列出资源“pod”:需要 [“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 中的组,则它可以工作。