繁体   English   中英

已删除 Compute Engine 默认服务帐号

[英]Deleted Compute Engine default service account

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

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

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

--> 在创建虚拟机时,它引用了我删除的服务帐户 ID..

现在我需要做什么? 是否有任何解决方案可以重新激活我的 Compute Engine 默认服务帐户。现在我完全震惊了,我无法创建新的 vms 和 kube.netes。 在此处输入图像描述

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

gcloud services enable compute

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

gcloud service-management enable compute.googleapis.com

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

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

  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

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

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

  1. 首先,您需要找到已删除的SERVICE_ACCOUNT_ID。 使用记录高级查询的方法是:
resource.type = "service_account"
protoPayload.authorizationInfo.permission = "iam.serviceAccounts.delete"

这里的例子:

==> 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 "

恢复 App Engine 或任何已删除的服务帐户

您可以取消删除服务帐户。 您将需要服务帐号的唯一 ID。 如果您没有,可以在 Google Cloud Logging 上找到它。

您可以在侧边菜单中找到Logging服务:

谷歌日志,在哪里可以找到

然后,您将需要按日期过滤并键入service account以查找服务被删除的确切时间。

Google Logging - 如何找到已删除服务帐户的唯一 ID

然后你可以

选项 1:使用 Google Cloud 命令行

您可以通过在您的计算机上安装命令行来运行它 ( https://cloud.google.com/sdk/docs/install )。 或者您可以使用 Google Cloud Platform 提供的Active Shell在线运行它。

在哪里可以找到 Google Cloud Active Shell - gcloud

您要运行的命令如下。

gcloud beta iam service-accounts undelete 12345678901234567890

选项 2:使用 Google Cloud API

使用curl ,使用以下命令调用 API。

您需要将API_KEYPROJECT_IDSERVICE_ACCOUNT_UID更改为实际值。

curl -X POST \
-H "Authorization: Bearer API_KEY \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_UID:undelete"

您可以从 Google Cloud 命令行获取 API_KEY:

gcloud auth application-default print-access-token

同样,您可以在本地计算机上安装gcloud ,也可以通过Active Shell在线使用它。

在哪里可以找到 Google Cloud Active Shell - gcloud

自 2022 年 2 月起,使用

gcloud beta iam service-accounts undelete <ACCOUNT ID>

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

例如,

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM