设置基于角色的访问权限控制 (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
在以下示例中,此 ClusterRoleBinding
将 ClusterRole
中的权限授予 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 和存储类别的 get
、list
和 watch
权限,从而允许他们查看这些资源的详细信息。
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 控制台中查看集群。