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

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

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

小型公司配置结算权限

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

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

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

此场景中附加到组织资源的 Cloud IAM 政策与下面的内容相似:

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

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

财务团队负责管理预算

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

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

角色: 结算帐号管理员 此角色可为每个部门的财务经理授予设置预算并查看部门中结算帐号支出情况的权限,但不会为他们授予查看项目内容的权限。
资源: 结算帐号
成员: 各部门的财务经理
角色: 查看者 查看者角色可让开发团队查看他们拥有的项目的费用。
资源: 项目
成员: 项目的开发者。

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

为结算帐号分配权限:

使用结算控制台可以向用户授予针对结算帐号的结算帐号管理员角色。从已设置结算帐号的帐号中,为财务经理授予结算帐号的结算帐号管理员权限。

需要附加到项目的 Cloud IAM 政策将类似于以下内容:

{
      "bindings": [
      {
         "role": "roles/viewer",
         "members": [
                   "group:developers@example.com"
         ]
      }
      ]
    }
    

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

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

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

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

他们无权查看项目内容。

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

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

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

资源: 结算帐号
成员: IT 部门
角色: 结算帐号用户 结算帐号用户角色为服务帐号授予启用结算功能(将项目与组织中所有项目的结算帐号关联)的权限,从而允许服务帐号启用需要启用结算功能的 API。
资源: 组织
成员: 用于自动创建项目的服务帐号。
角色: 查看者 查看者角色可让开发团队查看他们拥有的项目的费用。
资源: 项目
成员: 项目的开发者。

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

使用结算控制台可以向用户授予针对结算帐号的结算帐号管理员角色。从已设置结算帐号的帐号中,为财务经理授予结算帐号的结算帐号管理员权限。

然后,您需要两项不同的 Cloud IAM 政策,因为您要将它们附加在层次结构的不同级别上。

第一个 Cloud IAM 政策需要附加在组织级,为服务帐号授予结算帐号用户角色。该政策形如以下示例。

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

第二个 Cloud IAM 政策需要附加在项目级。为开发团队授予项目的 Viewer 角色:

{
      "bindings": [
      {
         "role": "roles/viewer",
         "members": [
           "group:developers@example.com"
         ]
      }
      ]
    }
    

开发者负责创建结算项目

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

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

角色: 结算帐号创建者 结算创建者角色将使开发团队能够:
  • 创建新的结算帐号
  • 将结算帐号附加到项目中
资源: 项目
成员: 开发者

针对此场景的 Cloud IAM 政策需要附加在项目级,该政策将如下所示:

{
      "bindings": [
      {
         "role": "roles/billing.creator",
         "members": [
                   "group:developers@example.com"
         ]
      }
      ]
    }
    

费用汇总

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

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

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

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

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