访问权限控制


本页面介绍了 Google Kubernetes Engine 中 Identity and Access Management (IAM) 和 Kubernetes 基于角色的访问控制 (RBAC) 之间的区别,这些区别有助于管理对项目中资源的访问权限。

本页面适用于控制权限访问并希望了解 IAM 和 RBAC 之间的差异和重叠的安全专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

当您创建某一 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 资源的访问权限。您可以使用以下类型的角色:

主账号可以是以下任何一种:

  • 用户账号
  • 服务账号
  • Google Workspace Google 群组
  • Google Workspace 网域
  • Cloud Identity 网域

IAM 政策类型

IAM 支持以下政策类型:

  • 允许政策:向主账号授予角色。如需了解详情,请参阅允许政策
  • 拒绝政策:阻止主账号使用特定的 IAM 权限,无论这些主账号被授予了哪些角色。如需了解详情,请参阅拒绝政策

使用拒绝政策可以限制特定主账号在您的项目、文件夹或组织中执行特定操作,即使 IAM 允许政策为这些主账号授予提供相关权限的角色也是如此。

IAM 建议

请考虑使用以下 IAM 预定义角色以方便用于常见场景:

如需查看可用的预定义 IAM 角色的列表,请参阅预定义 GKE 角色

GKE 使用关联到节点的 IAM 服务账号来运行日志记录和监控等系统任务。这些节点服务账号必须至少拥有项目的 Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount) 角色。默认情况下,GKE 会将 Compute Engine 默认服务账号(在您的项目中自动创建)用作节点服务账号。

IAM 与 Kubernetes RBAC 的交互

IAM 和 Kubernetes RBAC 协同工作,帮助管理对集群的访问。RBAC 控制集群级层和命名空间级层的访问权限,而 IAM 控制项目级层的访问权限。实体在任一级层都必须具有足够权限,才能使用集群中的资源。

后续步骤