结算相关工作职责的 IAM 角色

本主题介绍如何为一组示例结算方案配置 Identity and Access Management (Cloud IAM) 权限。旨在说明公司应针对这类情况为结算相关职能人员授予哪些 IAM 角色。这些示例主要针对结算管理员和负责为组织管理结算任务的员工。

本文档不会详细介绍结算角色和权限。如需详细了解 Billing API 角色和权限,请参阅 Billing 访问权限控制页面。

小型公司配置结算权限

在此场景中,一家小型公司正尝试配置和使用 Google 结算账号。他们有一些负责开发和维护其应用的工程师,但没有人负责管理结算。他们有一位办公室经理,负责将付款与发票进行匹配,但出于合规性原因,不允许办公室经理访问项目中的 Google Cloud 资源。此外,CEO 负责保存和管理信用卡详情。

下表说明了组织管理员(在此场景中为 CEO)可以为该公司中的其他人员授予的结算 IAM 角色,以及在什么资源级别授予这些角色。

角色: 组织管理员 组织管理员角色使 CEO 能够为办公室经理分配权限。
资源: 组织
主账号: CEO
角色: Billing Account Administrator Billing Account Administrator 角色可让办公室经理和 CEO 管理付款和账单,而无需授予他们查看项目内容的权限。
资源: 组织
主账号: 办公室经理、CEO

此场景中附加到组织资源的允许政策如下所示:

{
  "bindings": [
    {
      "role": "roles/resourcemanager.organizationAdmin",
      "members": [
        "user:ceo@example.com"
      ]
    },
    {
      "role": "roles/billing.admin",
      "members": [
        "group:finance-admins-group@example.com"
      ]
    }
  ]
}

最佳做法是使用群组来管理主账号。在上面的示例中,对于第二个绑定,您需要将 CEO 和办公室经理添加到 finance-admins-group。当您需要修改能够执行此职能的人员时,您只需调整群组成员资格,而无需更新相应允许政策。因此,这两个单独的用户账号不会显示在角色绑定中。

财务团队负责管理预算

在此场景中,一家大型组织希望每个部门的财务团队能够设定预算并查看部门的团队支出,但不能访问 Google Cloud 资源。该机构不介意开发团队看到自己负责的项目的支出,但不允许开发团队了解总体费用。

将下表中的角色授予各部门的财务经理和开发者:

角色: Billing Account Administrator 此角色可为每个部门的财务经理授予设置预算并查看部门中结算账号支出情况的权限,但不会为他们授予查看项目内容的权限。
资源: 结算账号
主账号: 各部门的财务经理
角色: 结算账号查看者 Billing Account Viewer 角色允许开发者查看结算账号的费用。
资源: 结算账号
主账号: 项目的开发者。

针对这种情景,您可以使用结算控制台,向财务经理授予针对结算账号的 Billing Account Administrator 角色。此外,请向开发者授予针对结算账号的 Billing Account Viewer 角色。

完成后,结算账号的允许政策如下所示:

{
  "bindings": [
    {
      "role": "roles/billing.admin",
      "members": [
        "group:finance-admins-group@example.com"
      ]
    },
    {
      "role": "roles/billing.viewer",
      "members": [
        "group:developers@example.com"
      ]
    }
  ],
  "etag": "BwUjMhCsNvY=",
  "version": 1
}

客户自助服务门户,开发团队无法调整结算

在此场景中,客户的中央 IT 团队将 Google Cloud 资源作为其自助服务门户的一部分提供给他们的开发团队。开发团队通过该门户请求访问 Google Cloud 项目和其他已获批准的云端服务。开发团队成本中心负责向中央 IT 团队支付所用云资源的费用。

中央 IT 团队必须能够执行以下操作:

  • 将项目与结算账号相关联。
  • 为项目停用结算功能。
  • 查看信用卡信息。

他们无权查看项目内容。

开发者应该能够查看使用的 Google Cloud 资源的实际费用,但不能停用结算功能、将结算与项目关联,以及查看信用卡信息。

角色: Billing Account Administrator 结算管理员角色可为 IT 部门授予以下权限:将项目与结算账号相关联,为项目停用结算功能,以及查看他们转售给其客户的账号的信用卡信息。

此角色不会为他们授予查看项目内容的权限。

资源: 结算账号
主账号: IT 部门
角色: Billing Account User 结算账号用户角色为服务账号授予启用结算功能(将项目与组织中所有项目的结算账号关联)的权限,从而允许服务账号启用需要启用结算功能的 API。
资源: 组织
主账号: 用于自动创建项目的服务账号。
角色: 结算账号查看者 Billing Account Viewer 角色允许开发者查看结算账号的费用。
资源: 结算账号
主账号: 项目的开发者。

在此场景中,您需要执行两项不同的操作来分配适当的允许政策,因为它们附加在层次结构的不同级层上。

使用结算控制台可以向 IT 部门授予针对结算账号的 Billing Account Administrator 角色。此外,请向开发者授予针对结算账号的 Billing Account Viewer 角色。

然后,您需要在组织级层附加允许政策。此允许政策用于向服务账号授予 Billing Account User 角色。它类似于以下内容:

{
  "bindings": [
    {
      "role": "roles/billing.user",
      "members": [
        "serviceAccount:my-project-creator@shared-resources-proj.iam.gserviceaccount.com"
      ]
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

开发团队创建带结算功能的项目

一家当地大型数字公司想要允许所有开发团队在其组织账单结算账号上创建结算项目,而无需为他们授予结算账号管理员权限。

项目需要启用结算账号以确保可以启用默认设置以外的 API。因此,如果开发者创建项目,则需要将其与结算账号关联以启用 API。

角色: Billing Account User 通过 Billing Account User 角色,开发者可以将结算账号关联到组织内的新项目。
资源: 组织
主账号: 开发者

此场景的允许政策需要在组织级层关联,并且将如下所示:

{
  "bindings": [
    {
      "role": "roles/billing.user",
      "members": [
        "group:developers@example.com"
      ]
    }
  ],
  "etag": "BwUjMhCsNvY=",
  "version": 1
}

费用汇总

在此场景中,一家公司想要计算并跟踪每个团队、部门、服务或项目的费用。例如,跟踪测试部署每月的费用。

这可以使用以下做法进行跟踪:

  • 使用项目整理资源。费用按项目显示,并且导出的账单数据中包括项目 ID。
  • 使用标签标注项目,以指示额外的分组信息,例如 environment=test。标签包含在导出的账单数据中,便于您进行详细分析。但是,为项目上标签授予权限的方式与项目元数据的其余部分相同,这意味着项目所有者可以更改标签。您可以帮助员工了解哪些内容不会更改,然后监控(通过审核日志)或仅向他们授予精细权限,以便他们无法更改项目元数据。

您可以导出为 JSON 和 CSV,但我们建议直接导出到 BigQuery。这可以通过结算控制台的账单导出功能部分轻松配置。

如果每个成本中心都必须单独支付账单,一些工作负载的费用需要单独使用特定币种进行支付,则需要为每个成本中心使用单独的结算账号。但是,使用这种方法时,您需要为每个结算账号签署一份关联协议。