当您创建某一 Google Cloud 项目后,您便成为该项目的唯一用户。默认情况下,其他任何用户都无权访问您的项目或其资源,包括 Google Kubernetes Engine (GKE) 资源。GKE 支持多种选项,以使用基于角色的访问控制 (RBAC) 管理对项目及其集群中的资源的访问权限。
虽然这些机制在功能上存在一些重叠,但它们针对的是不同类型的资源。下文中简要介绍了各项机制:
Kubernetes RBAC 内置于 Kubernetes 中,可授予针对 Kubernetes 集群内部对象的细化权限。权限以 ClusterRole 或 Role 对象形式存在于集群中。RoleBinding 对象可向Kubernetes 用户、Google Cloud 用户、IAM 服务账号或 Google 群组授予角色。
如果您主要使用 GKE,并且需要集群内各对象和操作的细化权限,那么 Kubernetes RBAC 是最佳选择。
IAM 可管理 Google Cloud 资源,包括集群及其各种对象。系统可为 IAM 主账号分配权限。
IAM 中不存在相应机制可用于授予特定 Kubernetes 对象的权限。例如,您可以向用户授予创建 CustomResourceDefinition (CRD) 的权限,但不能向该用户授予仅创建一个特定 CustomResourceDefinition 的权限,也不能仅限创建特定命名空间或项目中的特定集群。IAM 角色可授予项目中所有集群的权限,如果在文件夹级层应用角色,则可以授予所有子项目中全部集群的权限。
如果您使用多个 Google Cloud 组件,并且不需要管理特定于 Kubernetes 的细化权限,则 IAM 是一个不错的选择。
Kubernetes RBAC
Kubernetes 内置了对 RBAC 的支持,可让您创建属于 Kubernetes 集群的细化 Role。Role 可以限定为特定的 Kubernetes 对象或 Kubernetes 对象类型,并可定义其针对该对象授予的操作(称为动词)。RoleBinding 也是 Kubernetes 对象,并可向用户授予 Role。GKE 用户可以是以下任一项:
- Google Cloud 用户
- IAM 服务账号
- Kubernetes ServiceAccount
- Google Workspace 用户
- Google Workspace Google 群组
- 使用 X509 客户端证书进行身份验证的用户
如需了解详情,请参阅基于角色的访问权限控制。
IAM
IAM 可让您为主账号授予角色。角色可提供一组权限,授予给主账号后,它可控制对一个或多个 Google Cloud 资源的访问权限。您可以使用以下类型的角色:
- 基本角色:提供仅针对 Owner、Editor 和 Viewer 的粗略权限。
- 预定义角色(例如 GKE 的预定义角色):提供比基本角色更细化的访问权限,适用于许多常见使用场景。
- 自定义角色:用于创建一组独有的权限。
主账号可以是以下任何一种:
- 用户账号
- 服务账号
- Google Workspace Google 群组
- Google Workspace 网域
- Cloud Identity 网域
IAM 政策类型
IAM 支持以下政策类型:
使用拒绝政策可以限制特定主账号在您的项目、文件夹或组织中执行特定操作,即使 IAM 允许政策为这些主账号授予提供相关权限的角色也是如此。
IAM 建议
请考虑使用以下 IAM 预定义角色以方便用于常见场景:
- Kubernetes Engine Cluster Viewer (
roles/container.clusterViewer
):只需要连接到集群的 DevOps、工程师和应用开发者。 - Kubernetes Engine Cluster Admin (
roles/container.clusterAdmin
):需要管理 Google Cloud 项目中的一个或多个集群的平台管理员和集群运维人员。
如需查看可用的预定义 IAM 角色的列表,请参阅预定义 GKE 角色。
此外,请考虑创建自定义 IAM 服务账号供节点使用,而不是创建 Compute Engine 默认服务账号。 向自定义服务账号授予 GKE 正常工作所需的最低权限。如需查看相关说明,请参阅使用最小权限 IAM 服务账号。
IAM 与 Kubernetes RBAC 的交互
IAM 和 Kubernetes RBAC 协同工作,帮助管理对集群的访问。RBAC 控制集群级层和命名空间级层的访问权限,而 IAM 控制项目级层的访问权限。实体在任一级层都必须具有足够权限,才能使用集群中的资源。