Cloud Function调用GCP资源管理器API列组织项目遇403权限错误
缺少列出项目的核心权限
你配置的Browser、Compute Viewer、Folder Viewer、Organization Viewer这几个角色里,Organization Viewer仅能查看组织基本信息,不包含resourcemanager.projects.list这个列出所有项目的关键权限。要获取组织内所有项目,得给服务账号加上**Project Browser(roles/resourcemanager.projectBrowser)或者Project Viewer(roles/resourcemanager.projectViewer)**角色,这两个角色包含该权限。Cloud Resource Manager API未启用
调用该API前,必须在Cloud Function所在的GCP项目中启用Cloud Resource Manager API。如果API未开启,哪怕权限配置正确,也会返回403错误。请求未指定组织范围
你的代码调用的接口未添加过滤条件指定组织ID,默认情况下该接口只会返回当前凭证关联的项目,或你有权限查看的部分项目。要拿到组织内所有项目,需在请求URL中加入过滤参数,示例:request_url = 'https://cloudresourcemanager.googleapis.com/v3/projects?filter=parent.type%3D%22organization%22+AND+parent.id%3D%22你的组织ID%22'未指定组织范围的话,服务账号的组织级权限无法生效,会触发权限拒绝。
Cloud Function使用了错误的服务账号
确认Cloud Function实际使用的服务账号是否为你配置了权限的那个。默认情况下,Cloud Function会使用项目的App Engine默认服务账号([项目ID]@appspot.gserviceaccount.com),如果你给其他账号配置了权限但Cloud Function未使用它,自然会报错。IAM权限未完成生效同步
GCP的IAM权限变更通常需要5-15分钟才能全局生效,若你刚完成权限配置就测试,可能权限还未同步,等待一段时间后重试即可。
内容的提问来源于stack exchange,提问作者Michael

