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

如何用resourcemanager_v3 Python客户端获取GCP项目列表?遇403权限问题

GCP免费试用账号调用resourcemanager_v3获取项目列表报403权限错误

问题描述

我使用GCP免费试用账号(无法创建组织),尝试通过google.cloud.resourcemanager_v3 Python客户端库获取所有GCP项目列表,已为服务账号配置项目所有者权限,但执行代码时遭遇403权限拒绝错误。

代码示例

from google.cloud import resourcemanager_v3
import os

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'My Service Account JSON File'

# 创建Resource Manager API的客户端对象
client = resourcemanager_v3.ProjectsClient()

# 获取当前认证用户有权限访问的所有项目列表
projects = client.list_projects()

for project in projects:
    print(f"{project.project_id} ({project.name})")

报错信息

Traceback (most recent call last):
File "/home/jatin/.local/lib/python3.10/site-packages/google/api_core/grpc_helpers.py", line 72, in error_remapped_callable
return callable_(*args, **kwargs)
File "/home/jatin/.local/lib/python3.10/site-packages/grpc/_channel.py", line 946, in call
return _end_unary_response_blocking(state, call, False, None)
File "/home/jatin/.local/lib/python3.10/site-packages/grpc/_channel.py", line 849, in _end_unary_response_blocking
raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.PERMISSION_DENIED
details = "The caller does not have permission"
debug_error_string = "UNKNOWN:Error received from peer ipv4:142.250.194.202:443 {grpc_message:"The caller does not have permission", grpc_status:7, created_time:"2023-02-20T10:40:54.578602542+05:30"}"

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "/home/jatin/work/official Scripts/test2.py", line 14, in
projects = client.list_projects()
File "/home/jatin/.local/lib/python3.10/site-packages/google/cloud/resourcemanager_v3/services/projects/client.py", line 659, in list_projects
response = rpc(
File "/home/jatin/.local/lib/python3.10/site-packages/google/api_core/gapic_v1/method.py", line 113, in call
return wrapped_func(*args, **kwargs)
File "/home/jatin/.local/lib/python3.10/site-packages/google/api_core/retry.py", line 349, in retry_wrapped_func
return retry_target(
File "/home/jatin/.local/lib/python3.10/site-packages/google/api_core/retry.py", line 191, in retry_target
return target()
File "/home/jatin/.local/lib/python3.10/site-packages/google/api_core/timeout.py", line 120, in func_with_timeout
return func(*args, **kwargs)
File "/home/jatin/.local/lib/python3.10/site-packages/google/api_core/grpc_helpers.py", line 74, in error_remapped_callable
raise exceptions.from_grpc_error(exc) from exc
google.api_core.exceptions.PermissionDenied: 403 The caller does not have permission

问题原因及解决办法

1. 免费试用账号的核心限制

GCP免费试用账号没有组织层级的访问权限,默认调用list_projects()时,API会尝试遍历组织下的所有项目,这超出了免费账号的权限范围,直接触发403错误。

2. 权限配置验证

即使给服务账号分配了项目所有者权限,仍需确认:

  • 权限是否已生效:GCP权限变更通常需要1-5分钟的同步时间,等待后再重试
  • 是否添加了显式的项目列表权限:给服务账号额外添加Resource Manager Viewer或Project Viewer角色,确保拥有项目列表的访问权限

3. 代码修改方案

方案一:指定单个项目查询

如果只需要获取当前项目的信息,修改代码指定parent参数为当前项目ID(格式为projects/[你的项目ID]),避免访问组织级资源:

from google.cloud import resourcemanager_v3
import os

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'My Service Account JSON File'

client = resourcemanager_v3.ProjectsClient()

# 替换为你的项目ID
request = resourcemanager_v3.ListProjectsRequest(
    parent="projects/your-project-id"
)

projects = client.list_projects(request=request)

for project in projects:
    print(f"{project.project_id} ({project.name})")

方案二:使用搜索接口获取所有可访问项目

如果需要获取所有有权限的项目,改用search_projects()方法,该方法不需要组织权限,会返回当前账号能访问的所有项目:

from google.cloud import resourcemanager_v3
import os

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'My Service Account JSON File'

client = resourcemanager_v3.ProjectsClient()

# 空查询返回所有可访问项目
response = client.search_projects(query="")

for project in response:
    print(f"{project.project_id} ({project.name})")

额外检查项

  • 确认服务账号JSON密钥文件的路径正确,无拼写错误
  • 用gcloud auth activate-service-account --key-file=your-key.json命令验证密钥是否能正常完成认证
  • 在GCP控制台的API库中,确认Resource Manager API已启用

内容的提问来源于stack exchange,提问作者Jatin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:45:26