设置基于角色的访问权限控制 (RBAC)

身份验证通常与 Kubernetes 基于角色的访问权限控制 (RBAC) 结合使用,从而为经过身份验证的用户和服务账号提供针对集群的更精细的访问权限控制。建议您创建使用群组名称(而非用户标识符)的 RBAC 政策。通过将 RBAC 政策明确关联到群组,您可以完全通过身份提供商管理用户访问权限,这样在用户权限更改时就不需要更新集群。请注意,如需使用 OIDC 根据安全群组的成员资格配置访问权限控制,您必须确保 GKE Identity Service 已设置为支持从身份提供商获取群组成员资格信息。

示例

如果您希望某些经过身份验证的用户有权访问集群的 Pod,请创建一个 ClusterRole 来授予对这些资源的访问权限,如以下示例所示:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  # The resource type for which access is granted
  resources: ["pods"]
  # The permissions granted by the ClusterRole
  verbs: ["get", "watch", "list"]

然后创建相应的 ClusterRoleBinding,以将 ClusterRole 中的权限授予相关用户(在本例中,为 us-east1-cluster-admins 安全群组的成员和 ID 为 u98523-4509823 的用户):

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: read-pods-admins
subjects:
  # Grants anyone in the "us-east1-cluster-admins" group
  # read access to Pods in any namespace within this cluster.
- kind: Group
  name: gid-us-east1-cluster-admins # Name is case-sensitive
  apiGroup: rbac.authorization.k8s.io
  # Grants this specific user read access to Pods in any
  # namespace within this cluster
- kind: User
  name: uid-u98523-4509823
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

在以下示例中,此 ClusterRoleBindingClusterRole 中的权限授予 ID 为 12345678-BBBb-cCCCC-0000-123456789012 的相关群组。请注意,此设置仅与 Azure AD 提供方相关,并且适用于 Google Distributed Cloud 集群。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: pod-reader-binding
subjects:
  # Retrieves group information for the group ID mentioned
- kind: Group
  name: 12345678-BBBb-cCCCC-0000-123456789012
  apiGroup: rbac.authorization.k8s.io

如需详细了解如何使用 RBAC,请参阅配置基于角色的访问控制使用 RBAC 授权

创建 RBAC 角色以提供 Google Cloud 控制台访问权限

使用 OIDC 提供商进行身份验证的用户可以从 Google Cloud 控制台以及命令行登录集群

想要在 Google Cloud 控制台中访问集群资源并且经过身份验证的用户需要具备相关的 Kubernetes 权限。如果您不想向这些用户授予更广泛的权限(例如集群管理员的权限),则可以创建一个包含查看集群节点、永久性卷、pod 和存储类别的最低权限的自定义 RBAC 角色。您可以通过在集群中创建 ClusterRole RBAC 资源 cloud-console-reader 来定义这组权限。

cloud-console-reader 会向用户授予针对集群的节点、永久性卷、pod 和存储类别的 getlistwatch 权限,从而允许他们查看这些资源的详细信息。

kubectl

要创建 cloud-console-reader ClusterRole 并将其应用于集群,请运行以下命令:

cat <<EOF > cloud-console-reader.yaml
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cloud-console-reader
rules:
- apiGroups: [""]
  resources: ["nodes", "persistentvolumes", "pods"]
  verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
  resources: ["storageclasses"]
  verbs: ["get", "list", "watch"]
EOF
kubectl apply -f cloud-console-reader.yaml

然后,您可以在设置权限政策时向用户授予此 ClusterRole,如上一部分所述。请注意,用户还需要 IAM 权限才能在 Google Cloud 控制台中查看集群。