Cloud Logging を使用してログを一元管理
Google Cloud Japan Team
※この投稿は米国時間 2020 年 8 月 22 日に、Google Cloud blog に投稿されたものの抄訳です。
ログは、クラウド デプロイのセキュリティを確保するために不可欠なツールです。このシリーズの最初の投稿では、Cloud Identity ログについて説明し、Cloud Identity 管理コンソールで悪意のあるアクティビティのアラートを設定してクラウド デプロイのセキュリティを強化する方法を紹介しました。今回は、さらに一歩進んで、これらのログの収集を一元化してデプロイ全体のアクティビティを 1 か所に表示する方法を見ていきます。
Google では、Google Cloud Platform(GCP)を使用する企業向けのベスト プラクティスとして、お客様に GCP の Cloud Logging でログの管理、運用、検索、分析を一元化することをおすすめしています。ただし、お客様がご利用のサービスやアプリケーションの中には、Cloud Logging に自動的に、または完全にログを記録しないものもあります。その一例が Cloud Identity です。
幸い、オープンソースの G Suite ログ エクスポータ ツールを実行する Cloud Functions の関数を使用して、Cloud Identity ログをこの中央リポジトリに取り込むことができます。Cloud Scheduler のジョブは、この Cloud Functions の関数の実行をユーザーが定義した頻度で自動的にトリガーします。このフローを視覚的に表現すると、次のようになります。
Google Cloud プロフェッショナル サービスでは、このソリューションに関連する GCP ツールのデプロイを自動化するために役立つリソースも提供しています。さらに、使用されるサービスはフルマネージドであるため、デプロイ後に必要な作業はありません。
このソリューションが適している組織
先に進む前に、この投稿で紹介するツールが貴社に適しているかどうかを判断しましょう。Cloud Identity Premium には、Cloud Identity ログを BigQuery に直接エクスポートできる機能があります。BigQuery のログを分析できるだけでよい場合は、これで十分です。ただし、通常のロギング処理の一環としてログを保持する、またはさらに処理するために、ログを Cloud Logging にエクスポートした方がよい場合もあります。
GCP には、一部の Cloud Identity ログを Cloud Logging に自動的に公開する G Suite 監査ログ機能もあります。どの Cloud Identity ログがこの機能の対象となるかは、ドキュメントで確認できます。この投稿で取り上げる G Suite ログ エクスポータ ツールを使用すると、Cloud Identity ログに加えてモバイル、OAuth トークン、ドライブの各ログも Cloud Logging に取り込むことができ、また Cloud Identity から取り込むログをユーザーが具体的に指定することもできます。
これらの状況のいずれかが貴社に該当する場合は、先を読み進めてください。
使用するツール
G Suite ログ エクスポータは、Google Cloud プロフェッショナル サービスによって開発、保守されているオープンソース ツールです。これは G Suite の Reports API を呼び出して、Cloud Identity からのデータのエクスポートを処理します。GCP の Cloud Logging をログの宛先として指定し、Cloud Identity ログを取得し、クリーンアップと再フォーマットを行い、Cloud Logging API を使用して Cloud Logging に書き込みます。
このツールを実行する方法の 1 つは、Google Compute Engine を使用して仮想マシンを起動することです。ツールを Python パッケージとしてインポートして実行することも、一定の頻度でツールを実行する cronjob を設定することもできます。この設定を自動化する Terraform モジュールも用意されています。非常に簡単なように思われますが、この方法をとる場合は、VM のセキュリティを確保する方法や VM がどのプロジェクトや VPC に属しているかなど、考慮すべき点がいくつかあります。
もう 1 つの方法は、Google が管理するサービスを使用してこのコードを実行することです。Cloud Functions は、サーバーレスなプラットフォームを提供してイベントベースでコードを実行します。コードを実行するためのリソースを起動したり管理したりする必要はありません。Cloud Scheduler は、Google のエンタープライズ クラスのフルマネージド cronjob スケジューラです。次の手順に沿って Cloud Functions の関数と Cloud Scheduler ジョブを組み合わせることで、スケジュールに合わせてコードを自動的に実行できます。
- Cloud Pub/Sub トピックにサブスクライブする Cloud Functions の関数を作成する
- その関数をトリガーする Pub/Sub トピックを作成する
- Pub/Sub トリガーを呼び出す Cloud Scheduler ジョブを作成する
- Cloud Scheduler ジョブを実行する
また、この方法にスクリプトや Terraform モジュールを使用する場合に役立つオープンソースの例も用意されています。デプロイ後、繰り返し実行される Cloud Scheduler ジョブによって Cloud Functions の関数がトリガーされ、G Suite ログ エクスポータ ツールが無期限に実行されます。これで、最新の Cloud Identity ログが Cloud Logging に書き込まれるようになりました。これにはフルマネージドの GCP サービスが使用されるため、追加の作業は不要です。
ソリューションのカスタマイズ
上記のオープンソースの例は、ニーズに合わせてカスタマイズすることもできます。スクリプトを使用する例を見てみましょう。
この例では、デフォルトの deploy.sh スクリプトにより、15 分ごとにエクスポータ ツールをトリガーする Cloud Scheduler ジョブが作成されます。ここで、セキュリティ要件を満たすために、5 分ごとにログを取得する必要があるとしましょう。このファイルの「--schedule」フラグを変更するだけで、エクスポータ ツールを必要な頻度で起動できるようになります。頻度は unix-cron 形式で定義されます。
main.py をカスタマイズして、どの Cloud Identity ログを取得するかを制御することもできます。この例では、管理アクティビティ、Google ドライブ アクティビティ、ログイン アクティビティ、モバイル アクティビティ、OAuth トークン アクティビティといった、エクスポータ ツールで現在サポートされているすべてのログタイプが取得されます。ログタイプを定義するには、このファイルで sync_all 関数呼び出しを使用します。エクスポートするログタイプをカスタマイズするには、「applications=」行(34行目)を編集するだけです(以下を参照)。
次のステップ
スクリプトまたは Terraform モジュールを実行して数分後に、必要なログを Cloud Identity から自動的に取得して、定義したスケジュールでこのログを Cloud Logging に格納する Cloud Functions の関数がデプロイされます。これで Cloud Identity ログを既存のロギング処理に組み込めるようになりました。ログを送信して Cloud Storage で保持、BigQuery で分析、Pub/Sub トピックで Splunk などの宛先にエクスポートといった処理を行うことができます。
Cloud Functions の関数と Cloud Scheduler ジョブの組み合わせは、Cloud Identity ログを Cloud Logging に収集する簡単で効果的な方法です。これにより、Google Cloud ログを 1 か所で利用できるようになります。今回説明した、フルマネージドで簡単にデプロイできる例により、リソースと時間が解放されるため、組織ではクラウドのセキュリティ確保にさらに注力できます。
-Cloud テクニカル レジデント Josh Davis