创建 IAM 允许政策

本页面介绍了如何创建 Identity and Access Management (IAM) 允许政策,以在 Google Kubernetes Engine (GKE) 中进行授权。

每个 Google Cloud、GKE 和 Kubernetes API 调用都要求发出请求的账号必须具备必要的权限。默认情况下,除了您之外,其他任何人均无法访问您的项目或其资源。您可以使用 IAM 管理哪些人可以访问您的项目以及可以执行哪些操作。IAM 权限可与 Kubernetes RBAC 搭配使用,后者可为集群或命名空间内的特定对象提供精细的访问权限控制。IAM 更侧重于项目和组织级层的权限,但它也为 GKE 提供了多个专用的预定义角色。

如需为用户和服务账号授予对 Google Cloud 项目的访问权限,请将其添加为项目团队成员,然后为这些团队成员分配角色。角色定义了账号可以访问的Google Cloud 资源以及可以执行的操作。

在 GKE 中,您还可以使用 IAM 管理哪些用户和服务账号可以访问您的集群并在其中执行操作。

本页面适用于使用 IAM 允许政策来管理 GKE 集群中的授权的安全专家和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务

在阅读本页面之前,请确保您熟悉以下概念:

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。如果您之前安装了 gcloud CLI,请通过运行 gcloud components update 命令来获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。

将 IAM 与 Kubernetes RBAC 搭配使用

Kubernetes 具有内置的访问权限控制机制,即基于角色的访问控制 (RBAC)。RBAC 控制集群级层和命名空间级层的访问权限,而 IAM 控制项目级层的访问权限。

IAM 和 RBAC 可以搭配使用。实体必须具有足够的 RBAC 和 IAM 权限才能处理集群中的资源。

了解 IAM 角色

以下部分介绍了可用于控制对 Google Cloud 资源的访问权限的 IAM 角色类型。如需详细了解其中每种类型的角色以及何时使用这些角色,请参阅选择要使用的角色类型

预定义 GKE 角色

IAM 提供的预定义角色可以授予对特定 Google Cloud 资源的访问权限,并防止对其他资源进行未经授权的访问。

IAM 为 GKE 提供以下预定义角色。

Role Permissions

(roles/container.admin)

Provides access to full management of clusters and their Kubernetes API objects.

To set a service account on nodes, you must also have the Service Account User role (roles/iam.serviceAccountUser) on the user-managed service account that your nodes will use.

Lowest-level resources where you can grant this role:

  • Project

cloudkms.keyHandles.*

  • cloudkms.keyHandles.create
  • cloudkms.keyHandles.get
  • cloudkms.keyHandles.list

cloudkms.operations.get

cloudkms.projects.showEffectiveAutokeyConfig

container.*

  • container.apiServices.create
  • container.apiServices.delete
  • container.apiServices.get
  • container.apiServices.getStatus
  • container.apiServices.list
  • container.apiServices.update
  • container.apiServices.updateStatus
  • container.auditSinks.create
  • container.auditSinks.delete
  • container.auditSinks.get
  • container.auditSinks.list
  • container.auditSinks.update
  • container.backendConfigs.create
  • container.backendConfigs.delete
  • container.backendConfigs.get
  • container.backendConfigs.list
  • container.backendConfigs.update
  • container.bindings.create
  • container.bindings.delete
  • container.bindings.get
  • container.bindings.list
  • container.bindings.update
  • container.certificateSigningRequests.approve
  • container.certificateSigningRequests.create
  • container.certificateSigningRequests.delete
  • container.certificateSigningRequests.get
  • container.certificateSigningRequests.getStatus
  • container.certificateSigningRequests.list
  • container.certificateSigningRequests.update
  • container.certificateSigningRequests.updateStatus
  • container.clusterRoleBindings.create
  • container.clusterRoleBindings.delete
  • container.clusterRoleBindings.get
  • container.clusterRoleBindings.list
  • container.clusterRoleBindings.update
  • container.clusterRoles.bind
  • container.clusterRoles.create
  • container.clusterRoles.delete
  • container.clusterRoles.escalate
  • container.clusterRoles.get
  • container.clusterRoles.list
  • container.clusterRoles.update
  • container.clusters.connect
  • container.clusters.create
  • container.clusters.createTagBinding
  • container.clusters.delete
  • container.clusters.deleteTagBinding
  • container.clusters.get
  • container.clusters.getCredentials
  • container.clusters.impersonate
  • container.clusters.list
  • container.clusters.listEffectiveTags
  • container.clusters.listTagBindings
  • container.clusters.update
  • container.componentStatuses.get
  • container.componentStatuses.list
  • container.configMaps.create
  • container.configMaps.delete
  • container.configMaps.get
  • container.configMaps.list
  • container.configMaps.update
  • container.controllerRevisions.create
  • container.controllerRevisions.delete
  • container.controllerRevisions.get
  • container.controllerRevisions.list
  • container.controllerRevisions.update
  • container.cronJobs.create
  • container.cronJobs.delete
  • container.cronJobs.get
  • container.cronJobs.getStatus
  • container.cronJobs.list
  • container.cronJobs.update
  • container.cronJobs.updateStatus
  • container.csiDrivers.create
  • container.csiDrivers.delete
  • container.csiDrivers.get
  • container.csiDrivers.list
  • container.csiDrivers.update
  • container.csiNodeInfos.create
  • container.csiNodeInfos.delete
  • container.csiNodeInfos.get
  • container.csiNodeInfos.list
  • container.csiNodeInfos.update
  • container.csiNodes.create
  • container.csiNodes.delete
  • container.csiNodes.get
  • container.csiNodes.list