创建 GCP Dataproc 集群时出错:'compute.projects.get' 的权限被拒绝

Error when creating GCP Dataproc cluster: permission denied for 'compute.projects.get'

我正在尝试通过 Cloud SDK 使用服务帐户创建 Dataproc 集群。它抛出 compute.projects.get 被拒绝的错误。服务帐户具有计算查看者访问权限、计算实例管理员访问权限和数据处理编辑访问权限。无法理解为什么会出现此错误。在 IAM 策略疑难解答程序中,我检查了 dataproc.cluster.create 已分配给服务帐户

命令是:

gcloud dataproc clusters create cluster-dqm01 \
  --region europe-west-2 \
  --zone europe-west2-b \
  --subnet dataproc-standalone-paasonly-europe-west2 \
  --master-machine-typne n1-standard-4 \
  --master-boot-disk-size 500 \
  --num-workers 2 \
  --worker-machine-type n1-standard-4 \
  --worker-boot-disk-size 500 \
  --image-version 1.3-deb9 \
  --project xxxxxx \
  --service-account xxxx.iam.gserviceaccount.com

ERROR: (gcloud.dataproc.clusters.create) PERMISSION_DENIED: Required 'compute.projects.get' permission for 'projects/xxxxxx'

该项目是正确的,因为我尝试从控制台创建时遇到相同的错误,从控制台向 运行 使用服务帐户生成了 gcloud 命令。这是第一次为项目创建 dataproc 集群

如果您已将各种权限分配给使用 --service-account 指定的同一服务帐户,问题是您可能打算改为指定 --impersonate-service-account

这里有三个相关的身份:

  1. 发出 CreateCluster 命令的身份 - 这通常是一个人的身份,但如果您使用 --impersonate-service-account 或 运行 来自另一个 GCE VM 内部的命令进行自动化操作,它可能本身就是一个服务帐户。
  2. "Control plane" 身份 - 这是 Dataproc 后端服务用来实际创建 VM 的身份
  3. "Data plane" 身份 - 这是 Dataproc 工作器在处理数据时的行为。

通常,#1 和#2 需要各种 "compute" 权限和一些最小的 GCS 权限。 #3 通常只需要 GCS 和可选的 BigQuery、CloudSQL、Bigtable 等权限,具体取决于您实际处理的内容。

有关这些身份的更深入解释,请参阅 https://cloud.google.com/dataproc/docs/concepts/iam/dataproc-principals

它还列出了预先存在的精选角色,使这一切变得简单(通常,"default" 项目设置将自动拥有正确的角色,因此您不必担心)。基本上,"human identity" 或您与 --impersonate-service-account 一起使用的服务帐户需要 Dataproc EditorProject Editor 角色,"control plane identity" 需要 Dataproc Service Agent,并且 "data plane identity" 需要 Dataproc Worker.