NRIネットコム Blog

NRIネットコム社員が様々な視点で、日々の気づきやナレッジを発信するメディアです

【BigQuery】Google Cloudで課金情報を閲覧制御する

本記事は  【Advent Calendar 2023】  18日目の記事①です。
🎄  17日目  ▶▶ 本記事 ▶▶  18日目記事② ▶▶  19日目  🎅

はじめに

こんにちは。Webシステムサービス事業部 右代谷です。
最近携わったGoogle Cloud案件で、GoogleCloudで発生した料金について"特定のユーザ"が"特定の情報だけ"見れるようにするという対応を行ったので対応過程を残したいと思います。
今回はデータベース管理者のIAMユーザがCloudSQLの課金額だけ閲覧できるようにするというシナリオで記載していきます。(実際に行った対応はまた別のシナリオでしたが、対応過程はほとんど同じです。)

課題

Google Cloudでは[お支払い]ページにて請求先アカウントの課金額を確認することができ、日付/サービス/プロジェクトなど様々な観点での課金額や割引額などを確認することができ非常に便利です。
その反面、[お支払い]ページへのアクセス権があればその請求先アカウントについての課金額が色々と見れてしまい、一部ユーザには見る必要がない情報まで[お支払い]ページで見れてしまいます
組織ポリシーIAMのカスタムロールでは、ユーザーごとに[お支払い]ページで閲覧できる課金情報を制御するということが仕様上できなかったため、 対応手順に示すようにBigQueryを主に使って制御することにしました。

↓[お支払い]ページの画面です。

対応手順

IAMロール設定

データベース管理者ユーザに最小限のロールを割り当てます。
今回は「Cloud SQL 管理者」のロールだけを割り当てました。これにより[お支払い]ページへのアクセスはできなくなります。
※のちに出てくるBigQueryに関するロールはこの時点では付与する必要はありません。ここで付与すると必要なBigQueryテーブル以外も閲覧できてしまいます。

Cloud SQLへのラベル付け

後のクエリ実行時にCloud SQLの課金データを識別できるようにラベル付けを行います。



BigQueryへの課金データのエクスポート

[お支払い]ページからBigQueryに課金データをエクスポートすることができます。

cloud.google.com

「標準の使用料金」と「詳細な使用料金」がありますが、今回はCloudSQLというサービス単位で課金額が表示できれば良いので「標準の使用料金」をエクスポートしています。
詳細な設定手順は上記のサイトで確認できますので省略させていただきます。

設定が完了すると1日に数回自動で[お支払い]ページからBigQueryに課金データがエクスポートされるようになります。
BigQueryテーブルの有効期限を設定しない限りBigQueryのテーブルに課金データが積みあがっていきます。



BigQueryでクエリを作成

BigQueryのテーブルに課金データがエクスポートされるようになりました。
次に課金データの中でCloudSQLの課金データだけ抽出するクエリを作成します。

クエリは↓のサイトを参考にさせていただきました。 cloud.google.com



クエリのスケジューリング

さきほど作成したクエリを毎日手動で実行していくのは手間なので、自動化します。
BigQueryでは標準でクエリのスケジューリング機能が備わっているので、この機能を活用します。

cloud.google.com

今回は元の課金データがあるデータセット内に別のテーブルを追加するという形で設定しました。
↓テーブル(test_cloudsql)が追加されました。



BigQueryテーブルのアクセス制限

クエリ実行後のテーブルだけにデータベース管理者のユーザがアクセスできるようにBigQueryテーブルのアクセス制限を設定します。
BigQueryのテーブル単位でアクセス制限ができる機能が標準で備わっているので、この機能を活用します。(BigQueryには様々な便利機能があって助かっています)

cloud.google.com

CloudSQLの課金データのみを持ったtest_cloudsqlテーブルについて、データベース管理者のIAMユーザに"BigQuery データ閲覧者"のロールを付与します。(ここで付与されたロールは[IAMと管理]ページのIAMユーザごとのロール一覧には反映されないようです。)

データベース管理者ユーザのコンソール画面では↓のようにテーブルを確認することができ、「test_cloudsql以外のテーブルが表示されないこと」や「削除権限がないこと」が見て取れます。

おわりに

今回は簡易的な対応でしたが、BigQueryをはじめGoogle Cloudでは様々機能が実装されているので、設定次第でより複雑なシナリオにも対応できるかなと思いました。
また、Google Cloud認定資格のAssociate Cloud Engineer、Professional Cloud Architectで得た知識が非常に役に立ちました。
Google Cloudの業務に携わっている方は取得してみることをおすすめします。

執筆者:右代谷 淳元 インフラ系