Google CloudのSecurity Command Center(SCC)は、クラウド環境に潜むセキュリティ上の問題を一元的に可視化してくれるサービスです。とはいえ、検出されたFindingsを確認する時間がない、あるいは見落としてしまったらどうなるでしょうか。チェックを怠れば、開いたままのファイアウォールは放置され、公開設定のストレージバケットも中身を確認されないまま残り続けます。

Findingsをもっと先回りして扱い、リアルタイムで通知を受け取れるとしたらどうでしょうか。
本記事では、Cloud Monitoringと連携してアラートを設定し、SCC Findingsの活用範囲を広げる方法を解説します。
仕組み
SCCにはひとつ弱点があります。FindingsはOrganizationレベルでしか参照できないため、Cloud Monitoringによるメトリクスやアラートが使えないのです。FindingsをPubSubにエクスポート[1]し、本プロジェクトのスクリプトと組み合わせれば、Cloud Monitoring上で通知を扱えるようになります。
本プロジェクトのスクリプトでできることは次のとおりです。
- SCC NotificationsからPubSubへの設定・削除をプロジェクト内で自動化
- Findingsをプロジェクトにログ出力し、Cloud LoggingおよびCloud Monitoringで利用可能にする
- 独自スクリプトの作成を最小限に抑え、可能な限り標準のGCP機能を活用

前提条件
スクリプトの実行には以下が必要です。
- Organization ID — プロジェクトが属する組織のID
- Project ID — リソースをインストールするプロジェクトのID
- Service Account — SCC Notificationsの実行に使うサービスアカウント
- プロジェクトで以下のAPIを有効化:組織のSecurity Command Center API、Cloud Build API、Cloud Functions API
- 必要なIAMロール:
- Security Center Admin — 通知の設定用
- Organization Admin — 必要なロールを付与したサービスアカウントを構成するため
インストール
リポジトリをクローンする
リポジトリをCloud Shellにクローンします。VMやローカルマシンへのクローンでも構いません。
git clone https://github.com/gschaeffer/scc-findings-to-pubsub
変数を編集する
setup.sh内のスクリプト変数を編集します。organization id、project id、service accountの値は必須項目です。その他の変数は任意で設定してください。
セットアップを実行する
まずは、Googleのドキュメント[上記1]に従ってSCC NotificationsからPubSubへの連携をインストールします。この一連の処理を自動化するのがsetup.shコマンドです。gcloudの設定が対象プロジェクトIDになっていることを事前に確認してください。
gcloud config set core/project YOUR_PROJECT_ID ./setup.sh apply # if prompted with 'API [securitycenter.googleapis.com] not enabled # on project. Would you like to enable and retry?', select 'y'.
これでSCC Notificationsドキュメント[1]に記載されたリソースのみが作成されます。この時点で、SCCが検出した通知がPubSubトピックに届き始めるはずです。
Cloud Functionを追加する
次に、FindingsイベントをCloud Monitoringで扱えるようにするため、提供されているCloud Functionをインストールします。これにより、PubSubからCloud LoggingおよびCloud MonitoringへのFindings送信が始まります。インストールスクリプトはfunctionsディレクトリにあります。
cd functions/ ./deploy_logger_func.sh
このスクリプトは、PubSubトピックへのFindings追加をトリガーに動くシンプルなPython関数をインストールします。インストール後、Cloud Loggingにログエントリが表示され始めます。エントリは検索しやすいように scc_notifications_log という名前のログに記録されます。
FindingsがCloud Loggingに入れば、Google Cloudの標準ツールやサービスをそのまま使ってメトリクスとアラートを設定できます https://cloud.google.com/monitoring/alerts。BigQueryやCloud Storage、あるいは別のPubSubトピックでこのデータを扱いたい場合は、Logging Exports https://cloud.google.com/logging/docs/export を使って任意の宛先に送信できます。
クリーンアップ
インストールしたリソースを削除するには、同じsetupコマンドに delete 引数を付けて実行し、Cloud Functionは gcloud で削除します。関数名やリージョンの変数は必要に応じて書き換えてください。
./setup.sh delete FUNCTION="scc_notification_handler" REGION= gcloud functions delete $FUNCTION --region $REGION
初出: https://github.com .