谷歌云:不小心删除了一个默认服务帐号,"projects.serviceAccounts.undelete"权限在哪里?



我在整个项目中扮演着所有者的角色。我不小心删除了一个默认的服务帐户,现在我无法启动任何VM实例。

我了解到,我可以使用gcloud alpha iam service-accounts undelete <ID>命令或类似的curl命令curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://iam.googleapis.com/v1/projects/<project_id>/serviceAccounts/<ID>:undelete"来取消删除服务帐户,但两者都会给我以下错误:

PERMISSION_DENIED: Permission iam.serviceAccounts.undelete is required to perform this operation on service account

我在任何地方都找不到iam.serviceAccounts.undlete权限。所有者角色(我拥有(拥有所有其他iam.serviceAccounts权限(创建、删除、更新…(,但没有此权限。

我该如何运行该命令?

编辑:我的错,我一直在使用错误的serviceAccount ID,我在复制/粘贴时错过了最后一位。。。尽管如此,错误消息还是很奇怪。

好的,以下对我有效:

gcloud projects create ${PROJECT}
gcloud iam service-accounts create ${ROBOT} --project=${PROJECT}
ID=$(
gcloud iam service-accounts describe 
${ROBOT}@${PROJECT}.iam.gserviceaccount.com 
--project=${PROJECT} 
--format="value(uniqueId)") && echo ${ID}
gcloud iam service-accounts delete ${ROBOT}@${PROJECT}.iam.gserviceaccount.com 
--project=${PROJECT}
gcloud alpha iam service-accounts undelete ${ID} --project=${PROJECT}

收益率:

restoredAccount:
email: ${ROBOT}@${PROJECT}.iam.gserviceaccount.com
etag: ...
name: projects/${PROJECT}/serviceAccounts/${ROBOT}@${PROJECT}.iam.gserviceaccount.com
oauth2ClientId: '${ID}'
projectId: ${PROJECT}
uniqueId: '${ID}'

我也在默认的计算引擎帐户上尝试过,认为这可能会有不同的行为,但它也会取消删除:

NUM=$(gcloud projects describe ${PROJECT} 
--format="value(projectNumber)")
ID=$(
gcloud iam service-accounts describe 
${NUM}-compute@developer.gserviceaccount.com 
--project=${PROJECT} 
--format="value(uniqueId)") && echo ${ID}
gcloud iam service-accounts delete ${NUM}-compute@developer.gserviceaccount.com 
--project=${PROJECT}
gcloud alpha iam service-accounts undelete ${ID} --project=${PROJECT}

向谷歌的Issue Tracker提交了一份FR,因为在删除帐户后,似乎无法(!?(枚举已删除的服务帐户来查找uniqueId

扩展@halfer的答案,您可以通过查看活动日志来找到已删除的唯一id。利用时间可以缩小索引范围。查找Delete service account,然后它应该显示为${IAM account} deleted ${unique id}

链接:https://console.cloud.google.com/home/activity?project=${project}

相关内容

最新更新