GCP导出磁盘镜像到Storage bucket失败:service account缺失问题咨询
GCP镜像导出默认服务账号缺失修复方案
问题背景
将GCP中构建的磁盘镜像导出为vmdk格式并存储到Cloud Storage存储桶时,导出操作失败,错误提示Compute Engine默认服务账号不存在,错误日志如下:
[image-export-ext.export-disk.setup-disks]: 2021-10-06T18:52:00Z CreateDisks: Creating disk "disk-export-disk-os-image-export-ext-export-disk-j8vpl". [image-export-ext.export-disk.setup-disks]: 2021-10-06T18:52:00Z CreateDisks: Creating disk "disk-export-disk-buffer-j8vpl". [image-export-ext.export-disk]: 2021-10-06T18:52:01Z Step "setup-disks" (CreateDisks) successfully finished. [image-export-ext.export-disk]: 2021-10-06T18:52:01Z Running step "run-export-disk" (CreateInstances) [image-export-ext.export-disk.run-export-disk]: 2021-10-06T18:52:01Z CreateInstances: Creating instance "inst-export-disk-image-export-ext-export-disk-j8vpl". [image-export-ext]: 2021-10-06T18:52:07Z Error running workflow: step "export-disk" run error: step "run-export-disk" run error: operation failed &{ClientOperationId: CreationTimestamp: Description: EndTime:2021-10-06T11:52:07.153-07:00 Error:0xc000712230 HttpErrorMessage:BAD REQUEST HttpErrorStatusCode:400 Id:5314937137696624317 InsertTime:2021-10-06T11:52:02.707-07:00 Kind:compute#operation Name:operation-1633546321707-5cdb3a43ac385-839c7747-2ca655ee OperationGroupId: OperationType:insert Progress:100 Region: SelfLink:https://www.googleapis.com/compute/v1/projects/savvy-bonito-207708/zones/us-east1-b/operations/operation-1633546321707-5cdb3a43ac385-839c7747-2ca655ee StartTime:2021-10-06T11:52:02.708-07:00 Status:DONE StatusMessage: TargetId:840687976797195965 TargetLink:https://www.googleapis.com/compute/v1/projects/savvy-bonito-207708/zones/us-east1-b/instances/inst-export-disk-image-export-ext-export-disk-j8vpl User:494995903825@cloudbuild.gserviceaccount.com Warnings:[] Zone:https://www.googleapis.com/compute/v1/projects/savvy-bonito-207708/zones/us-east1-b ServerResponse:{HTTPStatusCode:200 Header:map[Cache-Control:[private] Content-Type:[application/json; charset=UTF-8] Date:[Wed, 06 Oct 2021 18:52:07 GMT] Server:[ESF] Vary:[Origin X-Origin Referer] X-Content-Type-Options:[nosniff] X-Frame-Options:[SAMEORIGIN] X-Xss-Protection:[0]]} ForceSendFields:[] NullFields:[]}: Code: EXTERNAL_RESOURCE_NOT_FOUND Message: The resource '494995903825-compute@developer.gserviceaccount.com' of type 'serviceAccount' was not found. [image-export-ext]: 2021-10-06T18:52:07Z Workflow "image-export-ext" cleaning up (this may take up to 2 minutes). [image-export-ext]: 2021-10-06T18:52:08Z Workflow "image-export-ext" finished cleanup. [image-export] 2021/10/06 18:52:08 step "export-disk" run error: step "run-export-disk" run error: operation failed &{ClientOperationId: CreationTimestamp: Description: EndTime:2021-10-06T11:52:07.153-07:00 Error:0xc000712230 HttpErrorMessage:BAD REQUEST HttpErrorStatusCode:400 Id:5314937137696624317 InsertTime:2021-10-06T11:52:02.707-07:00 Kind:compute#operation Name:operation-1633546321707-5cdb3a43ac385-839c7747-2ca655ee OperationGroupId: OperationType:insert Progress:100 Region: SelfLink:https://www.googleapis.com/compute/v1/projects/savvy-bonito-207708/zones/us-east1-b/operations/operation-1633546321707-5cdb3a43ac385-839c7747-2ca655ee StartTime:2021-10-06T11:52:02.708-07:00 Status:DONE StatusMessage: TargetId:840687976797195965 TargetLink:https://www.googleapis.com/compute/v1/projects/savvy-bonito-207708/zones/us-east1-b/instances/inst-export-disk-image-export-ext-export-disk-j8vpl User:494995903825@cloudbuild.gserviceaccount.com Warnings:[] Zone:https://www.googleapis.com/compute/v1/projects/savvy-bonito-207708/zones/us-east1-b ServerResponse:{HTTPStatusCode:200 Header:map[Cache-Control:[private] Content-Type:[application/json; charset=UTF-8] Date:[Wed, 06 Oct 2021 18:52:07 GMT] Server:[ESF] Vary:[Origin X-Origin Referer] X-Content-Type-Options:[nosniff] X-Frame-Options:[SAMEORIGIN] X-Xss-Protection:[0]]} ForceSendFields:[] NullFields:[]}: Code: EXTERNAL_RESOURCE_NOT_FOUND; Message: The resource '494995903825-compute@developer.gserviceaccount.com' of type 'serviceAccount' was not found. ERROR ERROR: build step 0 "gcr.io/compute-image-tools/gce_vm_image_export:release" failed: step exited with non-zero status: 1
无资源风险重建默认服务账号步骤
该操作不会修改或删除任何已有的Compute Engine资源(包括虚拟机、磁盘、镜像、快照等),无数据丢失风险。
- 确认你的GCP项目ID,后续命令中将
<YOUR_PROJECT_ID>替换为实际的项目ID - 打开Cloud Shell或者本地已配置gcloud CLI的终端,切换到目标项目:
gcloud config set project <YOUR_PROJECT_ID> - 执行Compute Engine API启用命令,缺失的默认服务账号会自动重建:
gcloud services enable compute.googleapis.com
需授予的角色
重建完成后,需要为该服务账号(格式为<项目编号>-compute@developer.gserviceaccount.com,本案例中为494995903825-compute@developer.gserviceaccount.com)授予以下权限:
- Compute Engine 服务代理(
roles/compute.serviceAgent):这是默认服务账号的基础内置角色,包含Compute Engine常规操作所需的核心权限,重建后默认会自动授予,若未自动添加可手动配置 - 存储对象创建者(
roles/storage.objectCreator):针对存储导出镜像的目标Cloud Storage存储桶授予该角色,保证服务账号有权限写入导出的vmdk文件 - Compute 镜像用户(
roles/compute.imageUser):针对待导出的源磁盘镜像授予该角色,保证服务账号有权限读取镜像内容
验证
权限配置完成后重新执行镜像导出操作即可正常运行。
内容的提问来源于stack exchange,提问作者Luc Dijon
相关产品推荐
相关产品推荐

