grasys blog
grasysブログ

Google Cloud Day: Digital ’22 セッションレポート 〜数百のプロジェクトに跨がった請求システムをセキュアに運用する方法〜

grasys では Google Cloud プレミア Service パートナーとして、数百を超える顧客のプロジェクトを運用しており、各プロジェクトの使用量を計算するシステムを運用しています。大切な顧客の情報を含むため、セキュリティは第一です。
ここでは、Google Kubernetes Engine と HashiCorp Vault で、セキュアなシステムを効率よく実現する方法を事例とデモを交えてご紹介します。

【スピーカープロフィール】
株式会社grasys 松原 優
Cloud Infrastructure Division, OpsTeam, Leader
2020 年 5 月に grasys へ入社。grasys 入社以前もゲーム業界でフロントエンドやバックエンドの開発に関わる。現在はプレイヤーとしてインフラ構築・運用をしつつメンバーのサポートを行っている。

HashiCorp Japan株式会社 草間 一人
Senior Solutions Architect
HashiCorp の Senior Solutions Architect として、Terraform や Vault、Consul などのプリセールスに携わるエンジニア。
プライベートの活動として、日本最大のクラウドネイティブ技術のカンファレンス CloudNative Days の Co-Chair も務めています。

なぜ請求システムが必要だったのか

grasysではGoogle Cloud プレミア Service パートナーとして200以上のプロジェクトを管理しています。その各プロジェクトのインスタンス数やコンテナのイメージ数といった情報が運用費計算で必要となるため、請求システムを自動化する必要がありました。
リソース情報などの多くの顧客情報を扱い、外部のサービスとの連携もあるのでよりセキュアなシステムであること、さらにコストを最小限に抑えられると言う点からGKEでの請求システム導入を選択しました。また、動的な認証情報の生成を行うため、APIキーやパスワードなど各種機密情報を安全に保存・取り出しをすることが可能なHashi Corp社の『Vault』を導入しています。VaultとはAPIキーやパスワードなど各種機密情報を安全に保存・取り出しをすることができます。このVaultの導入によりセキュアなシステムを実現しています。

請求システムの構成とHashiCorp Vault の利用事例

<請求システムの全体構成>

GCPのサービスとしてはGKE / Cloud Storage / BigQueryの3つを使用しています。
GKEは請求システム用 / Vault用 / データベース用と3つのクラスターに分ける構成で、クラスターはVPC ペアリングによって互いに接続できる様にしています。

システム全体の流れとしては、大まかに3つです。

  1. 各プロジェクトからリソース情報を取得
  2. リソース情報とCRM顧客管理サービスとの連携
  3. CRMで管理されているデータと帳票管理サービスとを連携

まずはプロジェクト情報の取得です。

管理しているプロジェクト全てにリソース情報を取得するためのサービスアカウントを登録しています。CronJobが定期的にトリガーされ、タスクキュー管理アプリにジョブを登録します。そしてWorkerサーバーが、登録されたジョブを取得します。ここでVaultへアクセスし、vaultのGoogle Cloud Secrets Engineを使い、サービスアカウントでCloudAPIにアクセスするためのトークンを発行して、APIを叩き、インスタンス数などのリソース情報を取得します。取得した情報はGCSへと保存します。
次にプロジェクトのリソース情報をCRMへ登録するまでの流れです。

Y GCSに保存したデータをBigQueryへロードします。CloudSQLではなくBigQueryに保存している理由は、ストレージ保存料金の観点でBigQueryを選択しているからです。

こちらもCronJobをトリガーにジョブを作成します。今度はVaultのKV Secrets Engineを用いて外部のCRMのAPIを叩くためのトークンを取得しています。BigQueryから集計データを取得して、CRMへの転送内容を送る前にGCSへと保存後、CRMへ転送します。
一度、GCSへと保存する理由としては、CRMに間違ったデータが登録されていたり、保存されなかったなど問題があった際に、原因の特定をしやすくするためです。

最後にCRMから帳票管理サービスへの流れです。

先ほどと同様にCronJobからジョブを作成し、そのJobがVaultのKV Secrets Engine を使ってCRMと帳票管理サービスのAPIを叩くためのトークンを取得します。また、VaultのDatabase Secrets Engineを使いMySQLのクレデンシャルを生成します。
CRMから取得したデータとデータベース内のマスターデータを取得し、計算を行い、結果を帳票管理サービスへと送ります。こちらも先ほど同様に送信する前にGCSへ格納してから、そのデータを送ります。

これで帳票管理システムから請求書を発行できる状態になります。
この様にしてgrasysではGKE とVault を使ってセキュアな自動化された請求システムを運用しています。
先日実装上の問題でトラブルが発生しましたが、運用開始から2年ほどメンテナンスなしでの運用ができており、運用コストを下げることに成功しています。

今後、よりコストダウンを行なっていくならば、今回ご紹介したシステムは、CronJobによる一時的なPod利用が多いため、プリエンプティブル VMに切り替えるという方法が考えられます。プリエンプティブル VMは最長持続時間が 24 時間で、可用性が保証されていないCompute Engine VM インスタンスになります。
次に、一般公開前の機能となりますが、Spot VMに切り替える方法です。プリエンプティブル VM は 24 時間後に期限切れになりますが、Spot VM には有効期限はありません。その代わりにSpot VM は、Compute Engine が別の場所でリソースを必要とする場合にのみ終了します。他にもGKE Autopilotに移行するという方法もあります。ノードが完全にマネージドとなり、Pod 単位の課金となるので今回のようなバッチ処理ととても相性が良いものかと思います。

GKE Autopilotの中でもSpot Podにすることも考えられます。Spot VMベースのノードで作成されるため、こちらも別の場所でリソースが必要となった場合は終了します。
今後もコスト削減方法について今後検討をしていきたいと思っています。


株式会社grasys(グラシス)は、技術が好きで一緒に夢中になれる仲間を募集しています。

grasysは、大規模・高負荷・高集積・高密度なシステムを多く扱っているITインフラの会社です。Google Cloud、Amazon Web Services (AWS)、Microsoft Azureの最先端技術を活用してクラウドインフラやデータ分析基盤など、ITシステムの重要な基盤を設計・構築し、改善を続けながら運用しています。

お客様の課題解決をしながら技術を広げたい方、攻めのインフラ技術を習得したい方、とことん技術を追求したい方にとって素晴らしい環境が、grasysにはあります。
お気軽にご連絡ください。