請求アカウントの管理

本節では Google Cloud リソースを扱うために必要な課金の設定について記述します。 Google Cloud は階層型のリソース構造を構成することが出来、大きく、組織、フォルダ、プロジェクト、リソースがあることを前節で説明しました。具体的には、Google Cloud の中で作成する組織と呼ばれるルートノードの配下にプロジェクトを作成し、そのプロジェクトの中で作成したコンピュート リソースやオブジェクト ストレージ等のリソースがプロジェクトに紐づく形になります。一方、課金の概念はそれとは若干違い、組織の中で別に用意する請求先アカウントというリソースに対してプロジェクトを紐付けることで、プロジェクト内で作成されたリソースに対する支払いを実現します。

請求先アカウントは 1 対多の関係で 任意のプロジェクトと紐付けることができ、紐付いたプロジェクトで発生した全ての費用を管理します。さらに請求先アカウントは 1 対 1 の関係で Google お支払いプロファイルと関連付けられており、その Google お支払いプロファイルで設定されている支払い方法に基づき、請求先アカウントに対して請求が発生する流れとなります。今までの説明を図にすると以下のようになります。 

2-0

請求先アカウントへのアクセスは、前節で紹介した Cloud Identity and Access Management(Cloud IAM)のロールによって管理されているため、グループやユーザーに課金に関するロールを適切に付与することで、請求情報へのアクセスや請求先アカウントとプロジェクトの紐付けが出来るユーザーを必要最小限にすることが可能です。

本節では、以下の項目について説明していきます。

  • 請求情報へのアクセスを制限する
  • 請求費用を詳細に分析する

参照文献

horizontalline

請求情報へのアクセスを制限する

解決する課題・使い所

請求先アカウントは紐付いている複数の Google Cloud プロジェクトの課金情報を管理しており、請求先アカウントの管理者もしくは閲覧者のロールを所持したユーザーは、紐付いているGoogle Cloud プロジェクトの課金情報を閲覧することが出来ます。本項では、請求先アカウントに関連するロールを理解し、請求情報へのアクセスを限られたメンバーに制限することを目的としています。

アーキテクチャ

まず、事前定義の主な請求関連 IAM ロールの説明を記載します。詳細につきましては、「Cloud IAM の Cloud Billing ロールの概要※1」を御覧ください。 

  • 請求先アカウント作成者(roles/billing.creator)
    • このロールは、組織に対するロールです。このロールが付与されたユーザーは、新しいセルフサービス請求先アカウント(支払い方法としてクレジット カードまたはデビッドカードが適応される)を作成するのに必要なロールです。ただし、Google としては組織内にメインの請求先アカウントを 1 つのみ作成することを推奨しており※2、追跡されないクラウド利用が組織内で拡散しないよう、本ロールを持つユーザーの数は必要最小限にすることをオススメします。
  • 請求先アカウント管理者(roles/billing.admin)
    • このロールは、組織または特定の請求先アカウントに対するオーナーロールです。このロールは、支払い方法の管理、請求のエクスポートの構成、費用情報の表示、プロジェクトのリンクとリンク解除、請求先アカウントの他のユーザーロールの管理に使用します。なお、請求先アカウントにプロジェクトを紐付る為には、このロールの権限以外に、紐付けるプロジェクト側のオーナーの権限(roles/owner)もしくはプロジェクト支払い管理者(roles/billing.projectManager)の権限も必要となります。 
  • 請求先アカウント ユーザー(roles/billing.user)
    • このロールは、組織または特定の請求先アカウントに対するユーザーロールです。このロールが付与されたユーザーは、権限のある請求先アカウントにプロジェクトを紐付けることが出来ます。なお、請求先アカウントにプロジェクトを紐付る為には、このロールの権限以外に、紐付けるプロジェクト側のオーナーの権限(roles/owner)もしくはプロジェクト支払い管理者(roles/billing.projectManager)の権限も必要となります。 
  • 請求先アカウント閲覧者(roles/billing.viewer)
    • このロールは、組織または特定の請求先アカウントに対する閲覧者のロールです。このロールが付与されたユーザーは、請求先アカウントの費用情報とトランザクションを表示出来るロールです。これにより、利用額情報を利用するためのアクセス権は与えられますが、プロジェクトのリンクやリンク解除、またはアカウントのプロパティの管理権限は付与されません。 

上記から、請求先アカウントの情報を閲覧出来るのは請求先アカウント管理者もしくは請求先アカウント閲覧者のロールを持つユーザーとなります。本ペルソナの場合ですと、以下の様に部署とロールを振り分けることが推奨されます。「Cloud Billing のアクセス制御※3」の例も参考になりますので、こちらも是非ご確認いただけますと幸いです。

  • Google Cloud 主管チーム
    • 付与するロール: 請求先アカウント作成者、請求先アカウント管理者
    • 運用項目:
      • 組織でメインとなる請求先アカウントを作成する
      • 支払い方法を管理する
      • 予算アラートを設定する
      • 課金サポートへの問い合わせ
      • 請求情報を管理し、開発チームに利用額を通知する
  • 財務部門
    • 付与するロール: 請求先アカウント閲覧者
      • 運用項目: 請求レポートを表示する
      • CxO と連絡を取る
  • Google Cloud 利用部門
    • 付与するロール: プロジェクトオーナー、請求先アカウント ユーザー
    • 運用項目:
      • 新しいプロジェクトを管理する
      • 請求先アカウントユーザーの権限を持つ請求先アカウントに作成したプロジェクトを紐付ける 
2-1

注意事項

  • 利用部門自体でプロジェクトで発生する費用を確認したい場合は、次項で記載する「毎月の請求費用を分析する」を利用して課金データ全体を BigQuery へエクスポートし、個別のビューや Data Portal を使うことで利用部門に制限された課金情報を開示することが出来ます。 

参考文献

※1:Cloud IAM の Cloud Billing ロールの概要
※2:重要な決定: 1 つの請求先アカウントか複数の請求先アカウントか
※3: Cloud Billing のアクセス制御の例

horizontalline

毎月の請求費用を BigQuery を用いて分析する

解決する課題・使い所 クラウド サービスを利用するユーザーは、毎月の請求費用に関して下記のような情報を知りたいというニーズを持っていることが一般的です。 

  • 毎月の支出の傾向を知りたい
  • 組織配下のどのプロジェクトで最も費用がかかったか知りたい
  • どのプロダクト(ex. Compute Engine)で最も費用がかかったか知りたい
  • 過去の傾向に基づいて予測される将来の費用はいくらか知りたい
  • リージョンごとの費用はどのくらいか知りたい
  • 特定のラベルが付与されたリソースの合計費用を調べたい 

こうした情報を常に把握・分析することで、サービス利用の無駄を排除し毎月のコストを削減・最適化することができます。Google Cloud ではこうしたニーズに答えるための手段として、「請求レポート」という機能を提供しています。

「請求レポート」とは、毎月の請求費用のサマリーデータをグラフ表示する機能で、Google Cloud Console から利用することができます。この機能を利用することで Google Cloud の使用量を視覚的に把握し、傾向を分析することができます。請求レポートには請求先アカウントに紐付いている全プロジェクトの使用料が含まれます。目的に合わせて傾向を確認するために、対象期間やプロジェクト、プロダクト、SKU またはロケーションなどを利用して、表示するデータの範囲を絞り込むことができます。

一方で、標準で提供される「請求レポート※1」機能だけではカバーしきれない要件も存在します。下記にその一例を示します。

  • 「フォルダ」毎に費用を集計したい
  • プロジェクトに付与したラベル毎に費用を集計したい
  • グラフの見た目をカスタマイズしたい 

このような場合、毎月の詳細な請求データを BigQuery にエクスポートすることで、標準的な機能ではカバーできない粒度の集計・分析を実行することができます。

アーキテクチャ

5-2

BigQuery を利用して請求データを集計・分析する場合には、まず「その請求データを誰が管理するか」について考慮する必要があります。 今回は、Google Cloud 主管部門のメンバーが部署毎の請求データを集計することを想定し、Google Cloud 主管部門フォルダ配下のプロジェクトにおいて請求データ格納用の BigQuery データセットを作成する構成としています。 

請求先アカウントから請求データを BIgQuery に取り込む環境を構築するまでには、大きく下記の5つのステップが存在します。

  1. 請求先アカウントの請求データを保存するプロジェクトを作成する
    1. 上記アーキテクチャ例では「billing-analytics」というプロジェクトを作成しています
    2. 作成したプロジェクトでは必ず課金を有効にします 
  2. 必要な権限を持ったアカウントを準備する
    1. 請求先アカウントからエクスポートできる請求データには下記 2 種類存在します
      • 1 日の費用の詳細データ※2
      • 料金データ※3
    2. 「1日の費用の詳細データ」のみを BigQuery に取り込む場合は下記の権限が必要です 
      • 対象の請求先アカウントの管理者ロール
      • データ保存先の BigQuery データセットを持つプロジェクトにおける BigQuery ユーザーロール 
    3. 「料金データ」も合わせて BigQuery に取り込む場合は上記に加えて下記の権限が必要です
      • データ保存先の BigQuery データセットを持つプロジェクトにおけるBigQuery 管理者ロール
  3. BigQuery Data Transfer Service API を有効にする
    1. 「料金データ」のエクスポートにはBigQueryの Data Transfer Service※4 を利用します
    2. 「1日の費用の詳細データ」のみエクスポートする場合はこちらのステップは不要です 
  4. データを保存する BigQuery データセットを作成する
    1. 請求データを取り込む先として BigQuery データセットを作成します 
    2. 上記アーキテクチャ例では「bigquery-analytics-dataset」というデータセットを作成しています
    3. データセットはプロジェクト単位で管理されます
    4. データセットに対する権限を適切に制御することで、請求データを必要なユーザーのみアクセス可能なように構成します
  5. 請求アカウントにて請求データのエクスポートを有効にする
    1. 最後に請求データのエクスポートをアクティベートします 

各ステップの詳細な手順については Google Cloud の公式ドキュメント※5をご参照ください。

利点

標準で提供される請求費用分析ツール(請求レポート)では満たせない分析要件をカバーすることができます。また、 BigQuery は Data Portal※6 や Looker 、その他サードパーティのBIツールと組み合わせて利用することができるため、分析結果を簡単に可視化することも可能です。

注意事項

  • BigQuery データセットにエクスポートされる請求データは、請求データのエクスポートをアクティベートしたタイミング以降に発生したデータのみが反映されます。アクティベート以前の請求データはエクスポートされません。
  • BigQuery への 「1 日の費用の詳細データ」のエクスポートを最初に有効にした際には、Google Cloud の費用データが表示されるまでに数時間かかる場合があります。
  • BigQuery への「料金データ」のエクスポートを最初に有効にした際には、Google Cloud の料金データが表示されるまでに最大 48 時間かかる場合があります。 

サンプル コンフィグや Code(提供可能な場合)

BigQuery にエクスポートした「1 日の費用の詳細データ」及び「料金データ」に含まれるデータの内容については下記を参照ください。

また、それぞれの請求データを活用した分析クエリの例については下記の通りです。

  • 「1 日あたりの費用の詳細」を利用したクエリ例
    • 請求書の料金総額を返す
      • 例 1: 請求書ごとのすべての費用の合計
      • 例 2: 請求月ごとの料金タイプ別詳細を取得する
    • ラベルを使用したクエリの例
      • グループ化せずにすべての行に対してクエリを発行
      • ラベルマップ別に JSON 文字列としてグループ化
      • ラベル値を基準に特定のキーについてグループ化
      • キー / 値のペア別にグループ化
    • 確約利用割引のクエリ
      • 確約料金の表示
      • 確約クレジット額の表示
    • その他のクエリ例
      • 指定した請求月のプロジェクトごとの費用とクレジット額のクエリ 
  • 「料金データ」を利用したクエリ例
    • 特定の SKU の正規価格を取得する
    • 特定の SKU の正規価格を取得し、サービスの説明を含める
      • 例 1: ネストされたデータを返す
      • 例 2: 同じテーブルに結合されたネストされていないデータを返す
    • 商品分類と地域分類を使用して、SKU をクエリする
      • SKU の商品分類を取得する
      • 特定の商品分類に関するすべての SKU を取得する
      • 特定の地域分類と商品分類に関するすべての SKU を取得する 

参照文献