如何将 GCP 用户与 GKE Kubernetes 用户相关联,以进行身份​​验证和后续授权?

Mar*_*ehm 2 google-cloud-platform kubernetes google-kubernetes-engine

我在 GCP 中使用 GKE Kubernetes。我是 GCP、GKE 和 kubectl 的新手。我正在尝试创建新的 Kubernetes 用户,以便为他们分配 ClusterRoleBindings,然后以这些用户身份登录 (kubectl)。

我没有看到 GCP 用户和 Kubernetes“用户”之间的关系(我知道 Kubernetes 中没有 User 对象类型)。

根据https://cloud.google.com/kubernetes-engine/docs/concepts/security-overview,Kubernetes 用户帐户是 Google 帐户。

因此,我创建了一些 Google 帐户,然后通过 IAM 将它们与我的 GCP 帐户相关联。我可以在 IAM 中很好地看到这些帐户。

然后我对这些新用户执行 gcloud auth login,我可以在 gcloud auth 列表中看到他们。然后我尝试以我的各种用户身份访问 gcloud 资源(gcloud 计算磁盘列表)。这按预期工作 - GCP 用户权限得到尊重。

然后我创建了一个 Kubernetes UserRole。下一步是使用 UserRoleBinding 将这些用户绑定到这些角色。

ClusterRole.yaml(创建良好):

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  # "namespace" omitted since ClusterRoles are not namespaced
  name: cluster-role-pod-reader-1
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
Run Code Online (Sandbox Code Playgroud)

ClusterRoleBinding.yaml(创建良好):

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cluster-role-binding-pod-reader-1
subjects:
- kind: User
  name: MYTESTUSER@gmail.com  # not real userid
  apiGroup: rbac.authorization.k8s.io
roleRef: 
  kind: ClusterRole
  name: cluster-role-pod-reader-1
  apiGroup: rbac.authorization.k8s.io
Run Code Online (Sandbox Code Playgroud)

在 Kubernetes 中,我可以创建绑定,但我的第一个问题是我可以在现有 UserRole 和存在的用户之间创建 UserRoleBinding 。我会认为那会失败。这意味着我错过了一些重要的东西。

我的第二个问题是我不知道如何以新用户之一的身份登录 kubectl。

总的来说,我缺少 GCP/IAM 用户和 GKE 用户之间的联系。帮助将不胜感激!

Ran*_*ndy 5

Kubernetes 没有用户数据库。用户住在集群之外,通常由云提供商控制。

如果您使用 GKE,则用户由 GCP IAM 控制。因此,您无法列出带有kubectl.

不过,您可以创建服务帐户。但是,了解服务帐户和用户之间的区别很重要。用户适用于真实的人,而服务帐户适用于 Kubernetes 内部和外部的进程。

当您创建 ClusterRoleBinding 时,这对 kubernetes 意味着:

如果用户名MYTESTUSER@gmail.com的用户进入集群,将他绑定到 ClusterRole cluster-role-pod-reader-1

要将 kubernetes 与 GCP IAM 用户一起使用,您必须执行以下操作:

  • 将用户添加到 IAM
  • 将他添加到角色中 roles/container.viewer
  • 创建您选择的 RoleBinding/ClusterRoleBinding

您可以使用以下命令列出相应的 IAM 角色(不要与 RBAC 角色混淆):

gcloud iam roles list | grep 'roles/container\.' -B2 -A2
Run Code Online (Sandbox Code Playgroud)

考虑到最小特权原则,您应该只授予用户登录集群的最低权限。其他 IAM 角色(除了roles/container.clusterAdmin)将自动授予对项目所有集群内对象的更高权限的访问权限。

RBAC 只允许添加权限,因此您应该选择具有最少权限的 IAM 角色,并通过 RBAC 在顶部添加所需的权限。