こんにちは、最近Google Cloudを頑張って勉強している上野です。
今回はSecurity Command Centerおよびその通知設定方法を紹介します。
Security Command Centerとは?
Security Command Center(以下SCC)は、Google Cloudの組織配下のプロジェクトにおいて、セキュリティリスクのある設定や、脆弱性(アプリも含む)を見つけてくれるサービスです。 見つけた結果を表示するダッシュボード機能もあります。 なお、SCCは組織に対して設定するサービスのため、プロジェクト単体では使用できません。
無料のスタンダード ティアと有料のプレミアム ティアがあり、スタンダードでは一部機能のみ使用できます。
機能(サービス)名 | 機能概要 | スタンダード | プレミア |
---|---|---|---|
Security Health Analytics | 公開FWなど、Google Cloud の脆弱性と構成ミスをに検出 | 一部利用可(公開FWなど一部の設定検知のみ) | 利用可(CISなど各種基準に対する準拠チェックも含む) |
Web Security Scanner | アプリケーションの脆弱性スキャン | 一部利用可(公開 URL と IPをスキャン) | 利用可(アプリ脆弱性を含めスキャン) |
Event Threat Detection | アカウントへの不正アクセスなど各種イベントを検知 | 利用不可 | 利用可 |
Container Threat Detection | コンテナへの攻撃を検知 | 利用不可 | 利用可 |
これらの基本4サービスのほか、以下の3つも統合されたサービスとして、検知内容をSCC上で確認できるようになっています。スタンダードでも利用可能です。
統合されたサービス名 | 機能概要 |
---|---|
Anomaly Detection | 仮想マシン(VM)のセキュリティ異常(漏洩された認証情報やコイン マイニングなど)を検知 |
Cloud Armor | DDoSやXSSなどの攻撃を保護 |
Data Loss Prevention | 機密性の高いデータを検出、分類、保護 |
Security Command Centerを有効にする
できればプレミア、特にEvent Threat Detectionを試したいところですが、予算の関係上今回は泣く泣くスタンダードで見ていきます。
有効にするのは、SCCの画面からポチポチやっていけば簡単にできます。
有効にすると、以下のように各種検知情報が見れます。
検知した情報をSlackへ通知する
検知情報をダッシュボードから見るだけであれば、すぐにできましたが、検知内容を通知するとなると、追加の設定がいくつか必要です。 以下のドキュメントを参考に、設定していきます。
通知の構成は以下のとおりです。SCCの設定は組織単位で行いますが、通知用の処理は特定のプロジェクト内に作成します。
Pub/Sub トピックの作成
Cloud ShellからgcloudコマンドでPub/Sub トピックを作成していきます。 トピック名「scc-findings-topic」とサブスクリプション名「scc-findings-sub」は任意の名前でOKです。
gcloud config set project [プロジェクトID] export PROJECT_ID=[プロジェクトID] export ORG_ID=[組織ID] #トピックの作成 gcloud pubsub topics create scc-findings-topic #サブスクリプションの作成(Cloud Function通知用) gcloud pubsub subscriptions create scc-findings-sub \ --topic scc-findings-topic export TOPIC=projects/$PROJECT_ID/topics/scc-findings-topic #SCCの通知をトピックへパブリッシュする設定 gcloud scc notifications create scc-critical-and-high-severity-findings-notify \ --pubsub-topic $TOPIC \ --organization $ORG_ID \ --filter "state=\"ACTIVE\""
今回は有効な検知をすべて通知するようにしていますが、結果の重要度によってフィルターしたい場合は、最後の部分を次のように修正すればOKです。
--filter "(severity=\"HIGH\" OR severity=\"CRITICAL\") AND state=\"ACTIVE\""
Slack APIの設定、Tokenの発行
トピックの設定ができたので、Slack側のAPIを準備していきます。
Slack APIのページから、Create New Appでアプリを作ります。
初期設定として、「Bots」を押下し、
Botの名前(Slackでの表示名)を入れておきます。
その後、OAuth & Permissionsを選択します。
Bot Token Scopesから「Add an OAuth Scope」を押下します。
以下のようにchat:write
とchat:write.public
を追加しておきます。
画面上部のInstall to WorkSpaceを押下します。 押下すると、Slackとの接続を許可する画面が出るので、許可しておきます。
Tokenが発行されるので、メモしておきます。
通知用Cloud Functionの作成
通知用のCloudFunctionを作成していきます。
トリガーのタイプを Cloud Pub/Subにし、作成したトピックを指定します。
コードの編集画面になるので、ランタイムをpython 3.9
にして、ドキュメントのコードを参考に、TOKENと通知先チャンネル名だけ変更しておきます。
import base64 import json import requests ## 取得したTOKENに変更 TOKEN = [取得したトークン] def send_slack_chat_notification(event, context): pubsub_message = base64.b64decode(event['data']).decode('utf-8') message_json = json.loads(pubsub_message) finding = message_json['finding'] requests.post("https://slack.com/api/chat.postMessage", data={ "token": TOKEN, ## 通知したいチャンネル名に変更 "channel": "[通知先チャンネル名]", "text": f"A high severity finding {finding['category']} was detected!" })
requirements.txt へrequests
の追加もしておきます。
変更したらデプロイを押します。デプロイが正常終了すれば、通知の設定は完了です。
通知のテスト
実際のリソースで検知させてみます。今回は検証用に、RDP(3389ポート)を公開したファイアウォールルールを作成してみます。
※今回は検証用のため作成していますが、むやみにこのような公開されたルールを作るのはやめましょう。
するとSlack上に以下の通知が来ました!
無事に通知設定ができました。
ちなみに通知のテストを繰り返し行いたい場合は、SCCの結果画面からアクティブ状態を変更して、非アクティブ→有効にすれば再度通知されます。
まとめ
SCCの有効は簡単にできましたが、通知までは少し手間がかかったかなという印象です。私が慣れてないというのもあります。 スタンダードであれば無料で利用できるので、Google Cloudを使う場合は基本有効にして通知まで設定しておきたいですね。
今回はSlackへ通知を行いましたが、メール通知やBiqQueryに送って分析など、ほかの活用方法もありそうです。
これから設定を試そうと思っている方、参考になれば幸いです。
最後にですが、Google Cloudでセキュリティ設定ってなにやればいいの?って迷ったときは、以下の資料がおススメです!私もよく参考にしています。
それではまた!