GCP误删IAM用户恢复后创建私有服务连接报权限错误如何解决
问题背景
- 执行Terraform的
google_project_iam_binding资源变更时,意外删除了项目下所有IAM主体,目前已完成全部用户的权限恢复。 - 后续创建GCP私有服务连接、为Cloud SQL分配私有IP的过程中触发权限报错:
创建连接时遇到问题,对项目'projects/XXXXXX'缺少必需的'compute.globalAddresses.list'权限,帮助令牌:XXXXXXX
- 已执行的排查修复操作:
- 禁用所有相关服务后重新启用
- 当前操作使用的IAM账号已绑定Owner角色
PROJECT_NUMBER@cloudservices.gserviceaccount.com服务账号已授予Editor角色
- 完成上述操作后,创建私有连接仍然报相同错误,报错截图如下:

根因与修复步骤
该报错的核心原因是批量删除IAM时,误删了Service Networking服务对应的Google托管服务代理账号的权限,仅恢复PROJECT_NUMBER@cloudservices.gserviceaccount.com的权限无法覆盖私有服务连接的底层操作权限要求。
按以下步骤修复即可:
- 定位目标服务代理账号,账号格式为
service-[你的项目数字ID]@service-networking.iam.gserviceaccount.com,该账号是GCP私有服务访问功能的官方托管执行身份,负责私有连接创建、全局IP地址预留等底层计算资源操作,重新启用服务不会自动为该账号补全缺失的IAM权限。 - 为该服务账号绑定项目级的
roles/compute.networkAdmin(计算网络管理员)角色,可直接执行以下gcloud命令完成绑定:
gcloud projects add-iam-policy-binding 你的项目ID \ --member="serviceAccount:service-你的项目数字ID@service-networking.iam.gserviceaccount.com" \ --role="roles/compute.networkAdmin"
- 等待1-2分钟待IAM权限全局同步生效后,重新尝试创建私有服务连接即可。
补充校验:如果后续其他GCP服务也出现无理由的权限报错,可执行gcloud projects get-iam-policy 你的项目ID导出全量IAM策略,核对所有service-*@*.gserviceaccount.com格式的Google托管服务账号是否绑定了对应默认角色,补全缺失的角色绑定即可。
内容的提问来源于stack exchange,提问作者bhumiraj parmar
相关产品推荐
相关产品推荐

