【问题标题】:Deleted Compute Engine default service account已删除 Compute Engine 默认服务帐号
【发布时间】:2016-04-28 08:05:26
【问题描述】:

我无法在 GCE 中创建虚拟机。创建它时显示错误消息,我附上了错误消息的屏幕截图。我将简要解释我做了什么。

--> 我已经从我的服务帐户列表中删除了我的计算引擎默认服务帐户.. 后来我创建了新的服务帐户..

--> 在创建虚拟机时我选择了新创建的服务帐户,创建虚拟机失败但错误显示在服务帐户下找不到已删除的服务帐户ID..

--> 在创建 vm 时,它指的是我已删除的服务帐户 id..

现在我需要做什么?是否有任何解决方案可以重新激活我的 Compute Engine 默认服务帐户.. 我现在完全震惊了,我无法创建新的虚拟机和 kubernetes。

【问题讨论】:

  • 能否详细介绍一下您是如何创建虚拟机的?
  • 我正在使用默认服务帐户通过 GCE 控制台创建虚拟机。当我删除默认服务帐户时,我使用另一个服务帐户来创建 vm 并且它工作正常。但在 GKE 的情况下,默认情况下,在创建 GKE 集群时它将使用默认服务帐户,所以它失败了。跨度>

标签: google-compute-engine google-kubernetes-engine


【解决方案1】:

要恢复您的 google 计算默认服务帐户,请在您的项目中运行以下 gcloud 命令:

gcloud services enable compute

在以前的版本中,该命令已知为:

gcloud service-management enable compute.googleapis.com

如本期所述:https://issuetracker.google.com/issues/69612457

【讨论】:

  • 仅供参考,我需要使用 services 而不是 service-management
【解决方案2】:

您现在可以通过执行如下 curl 请求来“取消删除”服务帐户:

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-length: 0" "https://iam.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_ID:undelete"

SERVICE_ACCOUNT_ID 是您要恢复的帐户的 ID

你可以通过运行获取服务帐户列表:

gcloud logging read "resource.type=service_account" --freshness=10y

参考: https://cloud.google.com/iam/docs/creating-managing-service-accounts#undeleting_a_service_account

【讨论】:

  • 目前还可以使用命令gcloud beta iam service-accounts undelete,使用起来更方便(但最终调用的是同一个API)。
【解决方案3】:

有两个默认服务帐户,我不确定您指的是哪一个:

  1. Google API 服务帐户,在您的情况下称为:933144605699@cloudservices.gserviceaccount.com。这是一个特殊的服务帐户。它始终被创建,但从未在 gcloud 或 Web 控制台中列出。它旨在由代表用户的某些内部 Google 流程使用。 GKE 可能是使用此帐户的服务之一(我不确定)。 无法删除此帐户,您唯一能做的就是将其从项目中的任何角色中删除。默认为Editor。您可以随时将其添加回来。
  2. 默认服务帐号:933144605699-compute@developer.gserviceaccount.com。这是一个普通的服务帐户,您可以将其删除。

在您粘贴的错误消息中,有一个不同的服务帐户名称,是您创建的新名称吗?如果是这种情况,您可能只需要转到 Web 控制台上的 IAM 设置并将您的用户添加到服务帐户参与者。看看这个手​​册页:https://cloud.google.com/compute/docs/access/iam#the_serviceaccountactor_role

【讨论】:

    【解决方案4】:
    1. 首先您需要找到已删除的SERVICE_ACCOUNT_ID。使用 Logging 高级查询是:
    resource.type = "service_account"
    protoPayload.authorizationInfo.permission = "iam.serviceAccounts.delete"
    

    Example here:

    ==> unique_id 值为 SERVICE_ACCOUNT_ID

    1. 使用@sherief-el-feky 提供的API:
    curl -X POST -H "Authorization: Bearer $ (gcloud auth print-access-token)" -H "Content-length: 0" https://iam.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_ID : undelete "
    

    【讨论】:

      【解决方案5】:

      截至 2022 年 2 月,使用

      gcloud beta iam service-accounts undelete <ACCOUNT ID>
      

      ACCOUNT ID 是已删除服务帐户的最后一部分 unique id (uid) 的 21 位数字。

      例如,

      deleted:serviceAccount:abc-project@kubeflow-ml.iam.gserviceaccount.com?uid=123451234512345123451
      

      uid是上述服务帐号的最后一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-09
        • 1970-01-01
        • 2018-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-03
        • 1970-01-01
        相关资源
        最近更新 更多