创建 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 提供以下预定义角色。

如需查看每个角色中的各个权限的完整列表,请参阅 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 角色,该角色提供一系列广泛的权限。

后续步骤