【问题标题】:Error Creating Google Cloud Dataproc Cluster - no access to initialization proxy script创建 Google Cloud Dataproc 集群时出错 - 无法访问初始化代理脚本
【发布时间】:2020-01-16 09:50:58
【问题描述】:

我正在尝试使用以下命令创建我的第一个 Google Cloud Dataproc 集群:

gcloud dataproc clusters create hive-cluster    \ 
    --scopes sql-admin  \   
    --image-version 1.3  \   
    --initialization-actions "gs://goog-dataproc-${PROJECT}:${REGION}:hive-metastore" \
    --master-machine-type n1-standard-1 \
    --master-boot-disk-size 15 \
    --num-workers 2 \
    --worker-machine-type n1-standard-1 \
    --worker-boot-disk-size 15 \
    --region us-east1 \
    --zone us-east1-b

但是,我收到以下错误:

    Dataproc could not validate the initialization action using the service-owned service accounts. Cluster creation may still succeed if the initialization action is accessible from GCE VMs.
    Reason: service-1456309104734317@dataproc-accounts.iam.gserviceaccount.com does not have storage.objects.get access to goog-dataproc-initialization-actions-us-east1/cloud-sql-proxy/cloud-sql-proxy.sh.
    Waiting for cluster creation operation...done.
    ERROR: (gcloud.dataproc.clusters.create) Operation [projects/traits-seater-824109/regions/us-east1/operations/5b36fb82-ade2-3d5f-a6bd-cb1a206bb54e] failed: Multiple Errors:
     - Error downloading script 'gs://goog-dataproc-initialization-actions-us-east1/cloud-sql-proxy/cloud-sql-proxy.sh': 1456309104734317-compute@developer.gserviceaccount.com does not have storage.objects.get access to goog-dataproc-initialization-actions-us-east1/cloud-sql-proxy/cloud-sql-proxy.sh.

我检查了 IAM 中的权限,并将 storage->Object viewer 角色分配给了上面错误消息中提到的服务帐户,但我仍然遇到同样的错误。 有什么建议可以克服这个错误吗?

【问题讨论】:

  • 您的 stackoverflow 问题中可能存在拼写错误,您删除了部分初始化操作标志并将其与 --metadata 标志混合,但我认为这只是此处发布的问题中的拼写错误由于错误消息引用了正确的 init 操作路径,因此您实际运行的命令。
  • 我们已经解决了对区域存储桶的权限问题,请重试您的命令。
  • 感谢@IgorDvorzhak!做到了。该文件现在具有公共访问权限,并且命令运行正常。

标签: google-cloud-platform gcloud google-cloud-dataproc google-iam


【解决方案1】:

Dataproc 的初始化操作的区域托管版本的权限设置似乎存在临时问题 - 从长远来看,这些区域副本确实是您应该使用的,以便更好地隔离初始化操作的区域可靠性并避免init 操作的跨区域复制,但与此同时,您可以使用 init 操作的共享“全局”副本:

gcloud dataproc clusters create hive-cluster    \ 
--initialization-actions gs://dataproc-initialization-actions/cloud-sql-proxy/cloud-sql-proxy.sh \
...

【讨论】:

    【解决方案2】:

    问题可能来自您在创建集群时提供的scopes。您只能限制您的集群访问sql-admin API (https://www.googleapis.com/auth/sqlservice.admin)。

    您可能需要添加storage-ro 范围(或https://www.googleapis.com/auth/devstorage.read_only):

    gcloud dataproc clusters create hive-cluster \ 
        --scopes sql-admin,storage-ro \
        [...]
    

    如果没有storage-ro 范围,即使存储桶goog-dataproc-initialization-actions-us-east1 是公共的,我认为Dataproc 集群将无法从GCS 检索文件。

    【讨论】:

    • 好主意,尽管现在 Dataproc 预计会自动插入基本必需的范围,尤其是必要的存储范围,并且 Dataproc 托管的 init 操作预计将是公开读取的——那里这里可能发生了其他事情。
    • 它是否记录在某处(Dataproc 自动插入基本范围的事实)?在回答之前,我一直在文档中寻找这个但找不到它:(
    • 范围不是问题。正如 Igor Dvorzhak 在上面的 cmets 中提到的,区域存储桶的权限已更新,因此我的帐户现在可以访问该文件。
    • @norbjd 很好的问题,这似乎以某种方式从裂缝中溜走了,所以发现这一点的唯一方法是在没有指定范围时比较“gcloud dataproc clusters describe”中的范围列表以及何时指定了单个范围。我已提出将信息添加到cloud.google.com/dataproc/docs/concepts/configuring-clusters/… 的请求
    • 作为参考,将在该页面添加以下信息:
    猜你喜欢
    • 2017-02-16
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多