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

GCE Service Account with Compute Instance Admin permissions

我已经使用具有以下角色的服务帐户在 Google 计算引擎上设置了一个调用 运行 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 运行ner 实例然后 运行:

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

我收到以下错误:

The user does not have access to service account {NAME_OF_SERVICE_ACCOUNT}. User: {NAME_OF_SERVICE_ACCOUNT} . Ask a project owner to grant you the iam.serviceAccountUser role on the service account.

除了计算实例管理员之外,我还需要其他一些权限才能使用我的实例创建实例吗?

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

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

首先找出你是谁

  • 如果您使用的是 Web UI:您使用什么电子邮件地址登录?
  • 如果您使用的是本地 gcloudterraform:找到包含您的 gcloud 凭据的 json 文件(通常命名与 myproject*.json 类似)并查看是否它包含电子邮件grep client_email myproject*.json

GCP IAM 变更

  1. 转到https://console.cloud.google.com
  2. 转到 IAM
  3. 查找您的电子邮件地址
  4. 成员 -> 编辑 -> 添加另一个角色 -> 输入角色名称 Service Account User -> 添加

(您可以使用条件缩小范围,但暂时保持简单)。

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

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

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