具有计算实例管理员权限的GCE服务帐户

时间:2018-06-06 13:29:09

标签: google-compute-engine google-iam

我已经设置了一个名为在Google Compute引擎上使用具有以下角色的服务帐户运行cronjobs的计算实例: Custom Compute Image User + Deletion rights Compute Admin Compute Instance Admin (beta) Kubernetes Engine Developer Logs Writer Logs Viewer Pub/Sub Editor Source Repository Reader Storage Admin 不幸的是,当我ssh到这个cronjob runner实例然后运行:

sudo gcloud compute --project  {REDACTED} instances create e-latest \
    --zone {REDACTED} --machine-type n1-highmem-8 --subnet default \
    --maintenance-policy TERMINATE  \
    --scopes  https://www.googleapis.com/auth/cloud-platform \
    --boot-disk-size 200  \
    --boot-disk-type pd-standard --boot-disk-device-name e-latest \
    --image {REDACTED} --image-project {REDACTED} \
    --service-account NAME_OF_SERVICE_ACCOUNT \ 
    --accelerator type=nvidia-tesla-p100,count=1 --min-cpu-platform Automatic

我收到以下错误:

  

用户无权访问服务帐户{NAME_OF_SERVICE_ACCOUNT}。用户:{NAME_OF_SERVICE_ACCOUNT}。请项目所有者授予您服务帐户上的iam.serviceAccountUser角色。

除了计算实例管理员之外,我还需要能够使用我的实例创建实例吗?

进一步说明:(1)当我尝试不指定--service-account时,错误是相同的,除了我的用户无权访问的服务帐户是默认的'51958873628-compute@developer.gserviceaccount。 com公司。 (2)添加/删除sudo不会改变任何东西

3 个答案:

答案 0 :(得分:3)

创建使用服务帐户的实例要求您拥有该服务帐户的compute.instances.setServiceAccount权限。要使此工作正常,请将iam.serviceAccountUser角色授予您的服务帐户(在整个项目或您希望能够创建实例的特定服务帐户上)。

答案 1 :(得分:0)

找出你是谁

  • 如果使用Web UI:您使用什么电子邮件登录?
  • 如果使用本地gcloud或terraform:找到包含您的gcloud凭据的json文件(通常命名为grep client_email myproject*.json),然后查看其中是否包含电子邮件:Service Account User

GCP IAM更改

  1. 转到https://console.cloud.google.com
  2. 转到IAM
  3. 找到电子邮件
  4. 成员->编辑->添加其他角色->输入角色名称dfn->添加

(您可以使用“条件”来缩小它的范围,但让它保持简单一会儿。)

答案 2 :(得分:0)

确保NAME_OF_SERVICE_ACCOUNT是当前项目的服务帐户。

如果您更改项目ID,但不更改NAME_OF_SERVICE_ACCOUNT,那么您将遇到此错误。

可以在Google控制台-> IAM和管理-> IAM上进行检查。 然后查找服务名称....- compute@developer.gserviceaccount.com,并检查开头的数字是否正确。每个项目在此服务名称中都有不同的编号。