Google Compute Engine写入/读取元数据

时间:2019-03-01 10:07:56

标签: google-cloud-platform google-compute-engine service-accounts

尝试从自身(从实例内部)向Compute Engine实例添加元数据时遇到问题。

在IAM中,我创建了一个具有计算实例管理员(v1)角色test-compute@test.iam.gserviceaccount.com的特定服务帐户

实例化VM时,我指定先前的服务帐户:test-compute@test.iam.gserviceaccount.com

使用ssh连接到虚拟机时,可以看到该帐户已设置为正确的服务帐户。

gcloud config list
[core]
account = test-compute@test.iam.gserviceaccount.com
disable_usage_reporting = True
project = test-project

Your active configuration is: [default]
  

然后,当我尝试从VM本身向VM添加元数据时,出现此错误。

gcloud compute instances add-metadata --metadata "start=true" --zone europe-
west1-b <INSTANCE_NAME>
ERROR: (gcloud.compute.instances.add-metadata) Could not fetch resource:
 - The user does not have access to service account 'test-compute@test.iam.gserviceaccount.com'.  U
ser: 'test-compute@test.iam.gserviceaccount.com'.  Ask a project owner to grant you the iam.service
AccountUser role on the service account

2 个答案:

答案 0 :(得分:2)

有两个可能的问题导致此错误:

  1. 您的VM实例没有所需的作用域。
  2. 您的服务帐户没有所需的IAM角色。

Compute Engine的默认服务帐户仅具有编辑者角色。但是,这通常会更改,因此我指定了一个两步过程来解决此问题。

您将需要关闭实例以更改实例的设置。

  • 转到Compute Engine-> VM实例。
  • 关闭您的实例。
  • 单击您的实例。
  • 单击顶部的“编辑”按钮。
  • 向下滚动到底部,然后单击“设置每个API的访问权限”。
  • 向下滚动到“计算引擎”
  • 将权限更改为“读写”。
  • 点击保存并启动您的实例。

请注意,VM实例“ Cloud API访问范围”无法提供对您的服务帐户所不具有的VM实例的权限。如果仍然有相同的错误消息,则需要将角色roles/iam.serviceAccountUser添加到服务帐户中。

  • 转到IAM&管理员-> IAM
  • 找到您的服务帐户。铅笔图标位于右侧。单击它。
  • 点击添加其他角色
  • 向下滚动到“服务帐户”。选择服务帐户用户。
  • 单击“保存”。
  • 返回到Compute Engine-> VM实例并启动您的实例。

答案 1 :(得分:0)

当我将roles/iam.serviceAccountUser添加到我的服务帐户时,它可以工作。由于用户是服务帐户(User == ServiceAccount),我不明白为什么我必须添加此角色?