Python调用GCP Resource Manager无法列出组织文件夹下项目
问题根因
GCP Resource Manager v3 的list_projects接口不会递归遍历子节点,当你传入parent='organizations/12345'时,接口仅会返回直接挂载在组织根节点下的项目。所有存放在文件夹(含多层嵌套文件夹)下的项目,父级资源是对应文件夹而非组织根节点,因此不会被该请求返回,该问题和服务账号权限无关,你当前配置的Organization Administrator、Folder Viewer角色已经满足资源查询的权限要求。
解决方法
优先使用search_projects接口实现需求,该接口默认会递归检索指定作用域下所有层级的项目,无需手动遍历文件夹结构,代码示例如下:
from google.cloud import resourcemanager_v3 from google.oauth2 import service_account def list_all_projects(): proj_list = [] credentials = service_account.Credentials.from_service_account_file('../key.json') resourcemanager_v3_projects_client = resourcemanager_v3.ProjectsClient(credentials=credentials) # 用search_projects递归检索组织下所有项目 search_request = resourcemanager_v3.SearchProjectsRequest( query="parent:organizations/12345", show_deleted=False ) page_result = resourcemanager_v3_projects_client.search_projects(request=search_request) for response in page_result: proj_list.append(response.project_id) return proj_list
如果因业务场景必须使用list_projects接口,需要额外实现递归逻辑:
- 先调用Resource Manager的文件夹相关接口,递归列出组织下所有层级的文件夹
- 分别以组织根节点、每个文件夹的资源名作为
parent参数调用list_projects - 汇总所有返回结果得到组织下全量项目列表
注意:
search_projects接口返回结果与list_projects字段结构完全一致,不会出现字段缺失问题,是官方推荐的跨层级查询项目的方式。
内容的提问来源于stack exchange,提问作者Atharva
相关产品推荐
相关产品推荐

