本页面介绍了如何创建 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 |
Kubernetes Engine Admin
(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:
|
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
|