Security Command Centerを使用してGoogle Cloud内のセキュリティイベントを検知する

こんにちは、最近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の画面からポチポチやっていけば簡単にできます。

f:id:fu3ak1:20210813162834p:plain

f:id:fu3ak1:20210813162928p:plain

f:id:fu3ak1:20210813134414p:plain

f:id:fu3ak1:20210813134456p:plain

有効にすると、以下のように各種検知情報が見れます。

f:id:fu3ak1:20210813135424p:plain

検知した情報をSlackへ通知する

検知情報をダッシュボードから見るだけであれば、すぐにできましたが、検知内容を通知するとなると、追加の設定がいくつか必要です。 以下のドキュメントを参考に、設定していきます。

cloud.google.com

通知の構成は以下のとおりです。SCCの設定は組織単位で行いますが、通知用の処理は特定のプロジェクト内に作成します。

f:id:fu3ak1:20210813141952p:plain

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」を押下し、

f:id:fu3ak1:20210813153149p:plain

Botの名前(Slackでの表示名)を入れておきます。

f:id:fu3ak1:20210813153236p:plain

その後、OAuth & Permissionsを選択します。

f:id:fu3ak1:20210813152227p:plain

Bot Token Scopesから「Add an OAuth Scope」を押下します。

f:id:fu3ak1:20210813152357p:plain

以下のようにchat:writechat:write.publicを追加しておきます。

f:id:fu3ak1:20210813152710p:plain

画面上部のInstall to WorkSpaceを押下します。 押下すると、Slackとの接続を許可する画面が出るので、許可しておきます。

f:id:fu3ak1:20210813152835p:plain

Tokenが発行されるので、メモしておきます。

f:id:fu3ak1:20210813153551p:plain

通知用Cloud Functionの作成

通知用のCloudFunctionを作成していきます。

トリガーのタイプを Cloud Pub/Subにし、作成したトピックを指定します。

f:id:fu3ak1:20210813154325p:plain

コードの編集画面になるので、ランタイムをpython 3.9 にして、ドキュメントのコードを参考に、TOKENと通知先チャンネル名だけ変更しておきます。

f:id:fu3ak1:20210813154716p:plain

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の追加もしておきます。

f:id:fu3ak1:20210813155236p:plain

変更したらデプロイを押します。デプロイが正常終了すれば、通知の設定は完了です。

通知のテスト

実際のリソースで検知させてみます。今回は検証用に、RDP(3389ポート)を公開したファイアウォールルールを作成してみます。

※今回は検証用のため作成していますが、むやみにこのような公開されたルールを作るのはやめましょう。

f:id:fu3ak1:20210813160413p:plain

するとSlack上に以下の通知が来ました!

f:id:fu3ak1:20210813164042p:plain

無事に通知設定ができました。

ちなみに通知のテストを繰り返し行いたい場合は、SCCの結果画面からアクティブ状態を変更して、非アクティブ→有効にすれば再度通知されます。

まとめ

SCCの有効は簡単にできましたが、通知までは少し手間がかかったかなという印象です。私が慣れてないというのもあります。 スタンダードであれば無料で利用できるので、Google Cloudを使う場合は基本有効にして通知まで設定しておきたいですね。

今回はSlackへ通知を行いましたが、メール通知やBiqQueryに送って分析など、ほかの活用方法もありそうです。

これから設定を試そうと思っている方、参考になれば幸いです。

最後にですが、Google Cloudでセキュリティ設定ってなにやればいいの?って迷ったときは、以下の資料がおススメです!私もよく参考にしています。

speakerdeck.com

それではまた!

f:id:fu3ak1:20210325095452j:plain

執筆者上野史瑛

Japan APN Ambassador 2020
AWSを中心としたクラウドの導入、最適化を専門に行っています。