创建 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 管理哪些用户和服务账号可以访问您的集群并在其中执行操作。

准备工作

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

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

与 Kubernetes RBAC 进行交互

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

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

IAM 角色

以下部分介绍了 Google Cloud 中可用的 IAM 角色。

预定义 GKE 角色

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

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

Role Title Description Lowest resource
roles/container.admin Kubernetes Engine 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.

  • Project
roles/container.cloudKmsKeyUser Kubernetes Engine KMS Crypto Key User Allow the Kubernetes Engine service agent in the cluster project to call KMS with user provided crypto keys to sign payloads.
roles/container.clusterAdmin Kubernetes Engine Cluster Admin

Provides access to management of clusters.

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.

  • Project
roles/container.clusterViewer Kubernetes Engine Cluster Viewer

Provides access to get and list GKE clusters.

roles/container.defaultNodeServiceAccount Kubernetes Engine Default Node Service Account Least privilege role to use as the default service account for GKE Nodes.
roles/container.developer Kubernetes Engine Developer

Provides access to Kubernetes API objects inside clusters.

  • Project
roles/container.hostServiceAgentUser Kubernetes Engine Host Service Agent User

Allows the Kubernetes Engine service account in the host project to configure shared network resources for cluster management. Also gives access to inspect the firewall rules in the host project.

roles/container.viewer Kubernetes Engine Viewer

Provides read-only access to resources within GKE clusters, such as nodes, pods, and GKE API objects.

  • Project

如需查看每个角色中的各个权限的完整列表,请参阅 Google Kubernetes Engine 角色。您还可以使用 gcloud CLI 或 Google Cloud 控制台查看每个 IAM 角色中的权限。如需查看相关说明,请参阅查看 IAM 角色授予的权限

基本 IAM 角色

基本 IAM 角色可为用户授予对所有 Google Cloud 资源的全局项目级层访问权限。为确保项目和集群的安全,建议尽量使用预定义角色

如需详细了解基本角色,请参阅 IAM 文档中的基本角色

服务账号用户角色

Service Account User 角色可为 Google Cloud 用户账号授予执行操作的权限,就像服务账号在执行该操作一样。

  • 为某用户授予项目iam.serviceAccountUser 角色后,该用户将会获得为项目中的所有服务账号(包括将来可能创建的服务账号)授予的全部角色。

  • 为某用户授予特定服务账号的 iam.serviceAccountUser 角色后,该用户将会获得为该服务账号授予的全部角色。

此角色可提供以下权限:

  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • resourcemanager.projects.get
  • resourcemanager.projects.list

如需详细了解 ServiceAccountUser 角色,请参阅 IAM 文档中的 ServiceAccountUser

以下命令演示了用于授予 Service Account User 角色的语法:

gcloud iam service-accounts add-iam-policy-binding \
  SA_NAME@PROJECT_ID.iam.gserviceaccount.com \
  --member=user:USER \
  --role=roles/iam.serviceAccountUser

替换以下内容:

  • SA_NAME 替换为服务账号的名称。
  • PROJECT_ID:您的 Google Cloud 项目的 ID。
  • USER:用户的电子邮件地址。

Host Service Agent User 角色

Host Service Agent User 角色仅用于共享 VPC 集群。此角色可提供以下权限:

  • compute.firewalls.get
  • container.hostServiceAgent.*
  • dns.networks.bindDNSResponsePolicy
  • dns.networks.bindPrivateDNSPolicy
  • dns.networks.bindPrivateDNSZone

自定义角色

如果预定义角色不能满足您的需要,您可以使用自己定义的权限创建自定义角色

如需了解如何创建和分配自定义角色,请参阅创建和管理自定义角色

查看 IAM 角色授予的权限

您可以使用 gcloud CLI 或 Google Cloud 控制台查看各角色授予的权限。

gcloud

如需查看特定角色授予的权限,请运行以下命令:

gcloud iam roles describe roles/ROLE

ROLE 替换为任意 IAM 角色。GKE 角色带有 roles/container 前缀,例如 gcloud iam roles describe roles/container.admin

控制台

要查看特定角色授予的权限,请执行以下步骤:

  1. 转到 Google Cloud 控制台中 IAM 和管理页面的角色部分。

    进入“IAM 和管理”

  2. 如需查看 GKE 的角色,请在过滤表字段中输入 Kubernetes Engine

  3. 选择要查看的角色。系统会显示角色说明和已分配权限列表。

管理 IAM 角色

如需了解如何为真人用户管理 IAM 角色和权限,请参阅 IAM 文档中的授予、更改和撤消针对项目成员的访问权限

如需了解如何为服务账号管理这些角色和权限,请参阅为服务账号授予角色

示例

以下示例说明了如何将 IAM 与 GKE 搭配使用:

  • 一名新员工加入某公司。该员工需要加入 GCP 项目中,但他只需要查看该项目的集群及其他 GCP 资源。项目所有者为其分配项目级别 Compute Viewer 角色。此角色提供用于获取和列出节点的只读访问权限,这些节点属于 Compute Engine 资源。
  • 该员工在运营部门工作,该部门需要使用 gcloud 或 Google Cloud 控制台更新集群。此操作需要 container.clusters.update 权限,因此项目所有者为该员工分配了 Kubernetes Engine Cluster Admin 角色。该员工现在同时拥有 Kubernetes Engine Cluster Admin 和 Compute Viewer 角色授予的权限。
  • 该员工需要调查 Deployment 出现问题的原因。他需要运行 kubectl get pods 来查看集群中运行的 Pod。该员工已具有 Compute Viewer 角色,但该角色无权列出 Pod。该员工需要被授予 Kubernetes Engine Viewer 角色。
  • 该员工需要创建新集群。项目所有者为其授予 PROJECT_NUMBER-compute@developer.gserviceaccount.com 服务账号的 Service Account User 角色,这样,该员工的账号便可访问 Compute Engine 的默认服务账号。此服务账号具有 Editor 角色,该角色提供一系列广泛的权限。

后续步骤