gcloud asset搜索资源报VPC_SERVICE_CONTROLS组织策略禁止错误排查
问题根因与解决方案
这个VPC_SERVICE_CONTROLS类拦截和IAM权限配置无关,是目标项目所在的VPC Service Controls(VPC SC)服务边界拦截了跨边界的Cloud Asset API请求,你在其他项目、其他环境能正常执行命令,是因为对应资源不在配置了Asset API保护的服务边界内,按以下步骤调整配置即可解决:
- 确认服务边界匹配关系
登录GCP组织管理员账号,进入VPC Service Controls控制台,定位目标项目projID归属的服务边界,确认边界受保护服务列表是否纳入了cloudasset.googleapis.com(Cloud Asset API),如果纳入,所有从边界外发起的Asset API调用默认都会被直接拦截,返回你看到的类权限报错。 - 配置入站放行规则
如果你是从边界外环境(本地终端、非边界内的云资源、其他组织/项目的环境)执行命令,在对应服务边界的入站流量规则中新增放行策略:- 来源身份:填写你执行gcloud命令使用的用户账号/服务账号
- 目标资源:选中目标项目
projID - 目标服务:选中Cloud Asset API
- 放行操作:覆盖
searchAllResources接口的调用权限
配置保存后等待2-5分钟策略全局生效,再重新执行原命令即可。
- 校验组织级全局策略
如果入站规则配置后仍报错,检查组织级VPC SC的全局强制策略,确认是否存在优先级更高的、全局禁止跨边界调用Cloud Asset API的规则,这类规则会覆盖服务边界的单独配置,需要给你的调用身份添加对应豁免项。 - 快速验证手段
你可以在目标项目所属VPC SC边界内的GCE实例上,使用同一身份执行原命令:
如果边界内执行成功,即可完全确认拦截来自VPC SC边界规则,无需调整任何IAM权限配置。gcloud asset search-all-resources --scope=projects/projID
注意:报错中提示的
User does not have permission是VPC SC拦截的通用返回文案,不代表实际缺少IAM角色,反复给账号加Asset相关权限无法解决该问题。
原始报错信息:User does not have permission to access projects instance (or it may not exist): Request is prohibited by organization's policy.
内容的提问来源于stack exchange,提问作者ciao_bella
相关产品推荐
相关产品推荐

