You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cloud Functions中获取所有GCP项目列表?

如何在Cloud Functions中获取所有GCP项目列表?

看起来你遇到的问题是Cloud Functions里的SDK调用和gcloud命令行的行为不一致,我来帮你理清楚问题出在哪,以及怎么解决。

问题根源分析

你用gcloud projects list能拿到所有项目,是因为gcloud默认使用的是你本地的用户凭据,这个凭据有访问你所有个人项目的权限;但Cloud Functions默认使用的是它的运行服务账号,哪怕你给这个账号设了Owner权限,可能还存在两个限制:

  1. Cloud Functions默认的授权范围(scope)可能没有包含足够的资源管理器权限;
  2. 空查询在某些环境下可能只会返回当前项目,而不是所有有权限的项目。

解决方案步骤

1. 确认服务账号权限

虽然你说已经设了Owner,但还是再核对下:Cloud Functions默认使用的服务账号格式是PROJECT_ID@appspot.gserviceaccount.com,这个账号需要具备resourcemanager.projects.list权限——Owner角色确实包含这个权限,但如果是手动配置的话,别漏加了。

2. 调整Cloud Functions的授权范围

这大概率是关键!Cloud Functions默认的授权范围有时会限制资源管理器的访问,你需要在部署函数时指定全平台权限的scope:

  • 如果用gcloud命令部署,添加--set-scopes参数:
gcloud functions deploy your_function_name \
  --runtime python311 \
  --trigger-http \
  --set-scopes=https://www.googleapis.com/auth/cloud-platform
  • 如果用控制台部署,在「运行时、构建、连接设置」→「服务账号」→「授权范围」里,添加Cloud Platform(或直接选「全云平台」)权限。

3. 优化代码查询参数

对于个人GCP账号,你的项目都是挂在个人用户身份下的,所以可以在查询里指定父资源为你的用户邮箱,确保返回所有属于你个人的项目,同时避免空查询的模糊性:

from google.cloud import resourcemanager_v3
import os

client = resourcemanager_v3.ProjectsClient()

# 把邮箱放在环境变量里,避免硬编码代码
user_email = os.environ.get("USER_EMAIL", "your-personal-email@example.com")
response = client.search_projects(request={"query": f"parent:user:{user_email}"})

# 提取项目ID(后续清理IP时更实用)
project_ids = [project.project_id for project in response]
print(project_ids)

你可以在Cloud Functions的环境变量配置里添加USER_EMAIL,不用在代码里写死邮箱。

关于list_projects报错的说明

list_projects方法确实必须指定parent参数(格式为users/{email}、organizations/{org_id}或folders/{folder_id}),对于个人账号,你可以这样用:

response = client.list_projects(request={"parent": f"users/{user_email}"})

不过search_projects更适合搜索所有有权限的项目,而list_projects是列出指定父资源下的项目,你可以根据需求选择。

针对你清理闲置IP的额外建议

既然你最终要每小时清理闲置静态IP,还要注意:

  • 给Cloud Functions的服务账号在每个项目里都添加Compute Network Admin或Compute Admin权限,这样才能操作每个项目的静态IP;
  • 用Cloud Scheduler定时触发你的Cloud Functions,实现每小时执行一次的需求;
  • 清理前要确认IP未被VM、负载均衡等资源占用,可以用compute_v1.AddressesClient查询每个项目的地址状态。

备注:内容来源于stack exchange,提问作者Joey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 16:44:33