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

使用Python google-cloud-billing库获取GCP项目成本报告的ServiceAccount配置问题

问题解答

关于ServiceAccount创建层级的疑问

项目层级创建ServiceAccount是完全可行的,不需要重新在其他层级创建。你遇到的“Billing Account Viewer角色不可用”问题,核心原因是这个角色属于账单账户层级权限,而非项目层级,所以无法在项目的IAM页面找到并绑定该角色。

ServiceAccount正确配置步骤

1. 为SA绑定账单账户层级权限

  • 打开GCP控制台,进入「账单」页面,选择你要访问的目标账单账户
  • 切换到「权限」标签页,点击「添加」按钮
  • 在「新成员」输入框中,填入你的ServiceAccount邮箱(格式:[SA名称]@[项目ID].iam.gserviceaccount.com)
  • 在「角色」搜索框中,找到并选择「Billing > Billing Account Viewer」角色,保存配置

2. 生成并配置SA密钥

  • 回到GCP控制台的「IAM与管理员 > 服务账号」页面,找到你创建的SA
  • 进入「密钥」标签页,点击「添加密钥 > 创建新密钥」
  • 选择「JSON」格式,点击「创建」,将生成的密钥文件下载到本地安全位置

3. 代码中配置认证与调用示例

在Python代码中,你可以通过两种方式配置SA认证:

  • 环境变量方式(推荐):
    在终端执行:
    export GOOGLE_APPLICATION_CREDENTIALS="/本地路径/你的密钥文件.json"
    
  • 代码内加载密钥:
    from google.cloud import billing_v1
    
    # 初始化客户端
    client = billing_v1.CloudBillingClient.from_service_account_json("/本地路径/你的密钥文件.json")
    
    # 获取指定账单账户下所有项目的账单信息
    billing_account_id = "你的账单账户ID"  # 格式类似:012345-ABCDEF-789012
    billing_account_name = f"billingAccounts/{billing_account_id}"
    
    request = billing_v1.ListProjectBillingInfoRequest(name=billing_account_name)
    response = client.list_project_billing_info(request=request)
    
    # 遍历输出项目成本关联信息
    for project_billing_info in response:
        print(f"项目ID: {project_billing_info.project_id}")
        print(f"项目名称: {project_billing_info.project_name}")
        print(f"账单启用状态: {project_billing_info.billing_enabled}\n")
    

额外说明

  • 如果需要获取更细粒度的成本数据(比如按SKU、时间维度拆分),可以绑定「Billing Account Costs Manager」角色,该角色拥有更全面的账单数据访问权限
  • 确保你的ServiceAccount所在的项目已关联到目标账单账户,否则无法访问该账单下的项目数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:22