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

使用Python API获取Google Cloud项目用户及权限返回空的原因及解决方法

问题分析与解决方案

嘿,我立刻就发现问题出在哪了——你调用了错误的IAM API!

为什么projects.roles/list返回空对象{}?

你混淆了两个完全不同的IAM接口:

  • 你用gcloud projects get-iam-policy MY_PROJECT拿到的是项目的完整IAM权限绑定清单(也就是用户/服务账号和对应角色的映射关系),这个命令背后调用的是projects.getIamPolicy API。
  • 而你实际调用的projects.roles/list API,它的作用是列出项目中你自定义的IAM角色。如果你的项目从来没创建过自定义角色,这个API返回空对象{}是完全正常的,但这根本不是你要的用户权限数据!

正确的实现方式

1. 调用正确的API获取权限绑定

你需要使用projects.getIamPolicy API来获取项目的IAM政策。这里给你一个curl调用的示例:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://iam.googleapis.com/v1/projects/MY_PROJECT:getIamPolicy" \
  -X POST -d '{"options": {"requestedPolicyVersion": 3}}'

这个请求会返回和gcloud命令一致的结果,包含所有成员(用户、服务账号、群组等)以及他们对应的角色权限。

2. 其他可行的实现方式

除了命令行和API,还有几种实用的方法可以获取项目的用户权限:

  • Cloud Console可视化查看:直接进入项目的「IAM与管理员」→「IAM」页面,就能直观看到所有成员的角色,还能点击导出按钮获取CSV格式的权限清单。
  • 官方客户端SDK:用你熟悉的编程语言调用Google Cloud官方SDK,比如Python的示例代码:
from google.cloud import iam_v2

client = iam_v2.IamClient()
request = iam_v2.GetIamPolicyRequest(
    resource="projects/MY_PROJECT",
    options=iam_v2.GetPolicyOptions(requested_policy_version=3),
)
response = client.get_iam_policy(request=request)
# 打印所有权限绑定关系
for binding in response.bindings:
    print(f"角色: {binding.role}, 成员: {binding.members}")
  • Terraform数据源:如果用Terraform管理基础设施,可以通过google_project_iam_policy数据源获取IAM政策:
data "google_project_iam_policy" "project_permissions" {
  project = "MY_PROJECT"
}

output "all_iam_bindings" {
  value = data.google_project_iam_policy.project_permissions.bindings
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:17:59