GKE 中的访问权限范围

本页面介绍向 Google Kubernetes Engine (GKE) 集群中的节点授予的默认访问权限范围。通过阅读本页面,您可以了解向集群授予的默认访问权限范围,以及如何在需要时配置自定义访问权限范围。

本页面适用于创建和管理集群的安全专家和运维人员,他们必须了解授予集群的默认访问权限,以及如何在需要时修改该访问权限。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务

什么是访问权限范围?

访问权限范围是为节点以及节点上运行的工作负载(如果工作负载使用应用默认凭据 [ADC])授予权限的传统方法。 访问权限范围定义来自客户端库或 gcloud CLI 的 API 调用中使用的 OAuth 范围。

我们建议您不要指定您自己的访问权限范围。您应该使用 IAM 权限Kubernetes 基于角色的访问权限控制 (RBAC) 向特定 IAM 服务账号或 Kubernetes 服务账号授予访问权限。

默认访问权限范围

当您创建新的 GKE 集群时, Google Cloud 会根据节点使用的服务账号为节点分配一组默认的访问权限范围。这些访问权限范围可为 GKE 启用特定功能。您还可以在创建 Standard 集群Autopilot 集群节点池时使用 --scopes 标志手动设置访问权限范围。您无法修改现有节点池的访问权限范围。请改为创建具有新范围的新节点池,并将工作负载迁移到该节点池。

以下几个部分介绍了 GKE 根据您是否指定自定义服务账号以及是否手动指定访问权限范围向节点添加的默认访问权限范围。

Autopilot 集群

服务账号 您是否手动指定了访问权限范围? GKE 添加的访问权限范围
Compute Engine 默认服务账号
  • https://www.googleapis.com/auth/devstorage.read_only
  • https://www.googleapis.com/auth/service.management.readonly
  • https://www.googleapis.com/auth/servicecontrol
  • https://www.googleapis.com/auth/trace.append
  • https://www.googleapis.com/auth/logging.write:如果已启用 Cloud Logging,则添加
  • https://www.googleapis.com/auth/monitoring:如果已启用 Cloud Monitoring,则添加
手动指定的范围
自定义服务账号 https://www.googleapis.com/auth/cloud-platform
手动指定的范围

Standard 集群

服务账号 手动指定了访问权限范围? GKE 访问权限范围
Compute Engine 默认服务账号
  • https://www.googleapis.com/auth/devstorage.read_only
  • https://www.googleapis.com/auth/service.management.readonly
  • https://www.googleapis.com/auth/servicecontrol
  • https://www.googleapis.com/auth/trace.append
  • https://www.googleapis.com/auth/logging.write:如果已启用 Cloud Logging,则添加
  • https://www.googleapis.com/auth/monitoring:如果已启用 Cloud Monitoring,则添加
  • 手动指定的范围
  • https://www.googleapis.com/auth/monitoring.write
  • https://www.googleapis.com/auth/logging.write:如果已启用 Cloud Logging,则添加
  • https://www.googleapis.com/auth/monitoring:如果已启用 Cloud Monitoring,则添加
自定义服务账号
  • https://www.googleapis.com/auth/userinfo.email
  • https://www.googleapis.com/auth/cloud-platform
  • 手动指定的范围
  • https://www.googleapis.com/auth/monitoring.write
  • https://www.googleapis.com/auth/logging.write:如果已启用 Cloud Logging,则添加
  • https://www.googleapis.com/auth/monitoring:如果已启用 Cloud Monitoring,则添加

为工作负载配置自定义服务账号

IAM 是一种访问权限控制系统,用于向Google Cloud 项目中的用户和服务账号授予已获授权的角色。服务账号是一种特殊的 Google 账号,用于代表您执行部署应用等任务。您可以使用 IAM 创建服务账号,然后使用 IAM 政策绑定来保护该账号。

如果您的工作负载需要访问 Compute Engine,请向服务账号授予 Compute Engine Admin 角色。如果您的工作负载需要从 Artifact Registry 拉取私有映像,请参阅为 Artifact Registry 代码库配置访问权限控制

创建服务账号

如需创建名为 kubernetes-engine-node-sa 的自定义服务账号,请运行以下命令:

export NODE_SA_NAME=kubernetes-engine-node-sa
gcloud iam service-accounts create $NODE_SA_NAME \
  --display-name "GKE Node Service Account"
export NODE_SA_EMAIL=`gcloud iam service-accounts list --format='value(email)' \
  --filter='displayName:GKE Node Service Account'`

授予最小角色

如需为服务账号配置最小的必要角色和权限以便 GKE 节点正常运行,请运行以下命令,其中 $PROJECT 是您的项目 ID

export PROJECT=`gcloud config get-value project`
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.metricWriter
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/monitoring.viewer
gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/logging.logWriter

授予其他角色

要向服务账号授予 Compute Engine Admin 角色,请运行以下命令:

gcloud projects add-iam-policy-binding $PROJECT \
  --member serviceAccount:$NODE_SA_EMAIL \
  --role roles/compute.admin

如需了解如何向服务账号授予 Artifact Registry 中存储的私有映像的访问权限,请参阅授予对 Google Kubernetes Engine 集群的访问权限

创建使用自定义服务账号的集群或节点池

要创建使用自定义服务账号的集群,请运行以下命令:

gcloud container clusters create --service-account=$NODE_SA_EMAIL

要在现有集群中创建节点池,请运行以下命令:

gcloud container node-pools create --service-account=$NODE_SA_EMAIL