我想创建一个在非默认服务帐户下运行的数据集群。以下适用于计算实例:
gcloud compute instances create instance-1 --machine-type "n1-standard-1" --zone "europe-west1-b" --scopes xxxxxxxx@yyyyyyyy.iam.gserviceaccount.com="https://www.googleapis.com/auth/cloud-platform"
但创建数据空间实例时,相同的--scopes
参数失败:
gcloud dataproc clusters create --zone "europe-west1-b" --scopes xxxxxxxx@yyyyyyyy.iam.gserviceaccount.com="https://www.googleapis.com/auth/cloud-platform" testdataproc12345
错误:(gcloud.dataproc.clusters.create)无效的服务帐户范围:'xxxxxxxxx@yyyyyyyy.iam.gserviceaccount.com = https://www.googleapis.com/auth/cloud-platform'
是否可以在非默认服务帐户下运行dataproc?
答案 0 :(得分:1)
不幸的是,目前无法使用正常的“范围和元数据”相关的身份验证设置来指定您的自定义服务帐户。但是,这是一个已知的功能请求,因此它将在未来的Dataproc更新中可用。
与此同时,即使您在使用Dataproc时无法使用默认GCE服务帐户禁用“存储读/写”范围,您也可以通过使用密钥文件使Hadoop端通过密钥文件使用特定服务帐户IAM & Admin > Service accounts页面下的“创建密钥”选项,以获取服务帐户的JSON密钥文件,然后执行以下两项操作:
在群集创建时添加以下属性:
--properties core:fs.gs.auth.service.account.json.keyfile=/etc/hadoop/conf/my-service-account.json
使用将您的JSON密钥文件复制到节点的init操作;请注意,这仍然意味着您的JSON密钥文件必须可作为读者访问GCE默认服务帐户,并且有权访问您的JSON密钥文件的GCS位置的任何人现在也能够代表该服务帐户执行操作,因此您仍然需要在必要时保证您的项目安全。
#!/bin/bash
# Save this somewhere as gs://somepath/my-keyfile-setup.sh
gsutil cp gs://path/to/your/json/file/in/gcs/my=service-account.json \
/etc/hadoop/conf/my-service-account.json
然后应用该init操作:
gcloud dataproc clusters create --initialization-actions gs://somepath/my-keyfile-setup.sh ...