MicrosoftSentinelでGoogleWorkspaceのログを取得する
GoogleDriveのログを長期間保存したいという要件が出てきたので、要件を満たすついでに以前から試してみたかったMicrosoft Sentinel(以下、Sentinel)を触ってみました。
有効化からGoogle Workspace(以下、GWS)のログを取得するところまでやっていきます。
Sentinelを有効化する
手順は下記公式ページを参照して行います。有効化に関してはサービスからSentinelを探して数クリックするだけで難しいところは無いので割愛します。
とりあえずデータコネクタを設定してみる
Sentinelを有効化後、Sentinelのページから設定を行っていきます。手順によるとログを収集するにはデータコネクタを設定する必要があるようなので、「コンテンツハブ」から適当にデータコネクタをインストールしてみることにします。
「Microsoft Entra ID」というわかりやすそうなコンテンツがあったので、試しにいれてみることにしました。「おすすめ」らしいですしね。
Microsoft Entra IDデータコネクタを設定する
インストールすると「データコネクタ」に「Microsoft Entra ID」のデータコネクタが表示されるので、クリックして「コネクタページを開く」をクリックします。
コネクタページが表示されたら、試しにサインインログと監査ログを取得してみることにします。「構成」で「Sign-in Logs」と「監査ログ」にチェックを入れて「変更の適用」をクリックします。
変更を適用して少し待つと、データコネクタが接続状態になってSentinelにデータが入ってきました。
これでとりあえず、Sentinelの有効化からデータの取得までの流れは分かりました。
GWSのログをSentinelで取り込む
ここからが本題。GWSのログをSentinelに取り込むための作業を行っていきます。
GWSに接続するための情報を取得する
公式でGWSへ接続する手順が公開されているので、こちらを参照して進めていきます。
特に難しい手順は無いのですが、
上記のPythonスクリプトを叩くところで、Python環境が端末に入ってなかった&構築が面倒だったのでcredentials.jsonをGoogleDriveにアップしてColaboratoryから叩いて済まそうとしたのですが、ローカル環境で実行しないとGoogle Pickle Stringが確認できませんでした。
仕方なくVSCodeをインストールしてPythonを実行→GWSへのログイン要求が出てくるのでログインして許可します。許可すると、VSCodeのターミナルにGoogle Pickle Stringが表示されるのでメモしておきます。
手順3では、テンプレを使うか手動でやるかの2パターンの手順が案内されています。せっかくテンプレがあるので、Azure Resource Manager (ARM) テンプレートからの作成でやってみます。
ただ、手順内の下記の記述が意味不明で少し時間を取られました。
「以下」と書いてありますが、もちろん手順には何も書いてありません。なんのこっちゃと調べたら、下記の「ワークスペース ID とキー」のセクションに説明がありました。
Log AnalyticsのワークスペースIDとキー、ということでした。Sentinelを接続しているLog Analyticsを確認して確認できたので手順を進めます。
手順内にある「Deploy to Azure」のボタンをクリックするとカスタムデプロイという画面が表示されるので、必要な情報を適宜入力していきます。
作成を実行すると、必要なリソースが勝手に作成されていきます。テンプレートなので仕方ないですが、いくらかかるかよくわからないリソースを勝手に作られるのって気持ち悪いですよね・・・。
作成されたリソースを確認する
展開が終わったあとリソースを見てみると、
App Service プラン
Application Insights
ストレージ アカウント
Azure Functions
アクション グループ
スマート検出機能アラートルール
が作られていました。何を作られたかわからないので、中身を見ておきます。
App Service プラン
プランは「Y1」。これはAzure Functions用の従量課金プランらしい。コスト垂れ流しじゃないのはありがたいが、いくら掛かるかは不明。
Application Insights
実行中のアプリケーションを監視するサービスで、Azure Functionsの状態を監視するように組まれている。料金は取り込んだログの量に応じた従量課金。
ストレージ アカウント
構成は下記。
パフォーマンス:Standard
レプリケーション:ローカル冗長ストレージ (LRS)
アカウントの種類:StorageV2 (汎用 v2)
既定のアクセス層:Hot
中身を見ると、関数の実行ログとか環境設定ファイルらしきものが入っている。
Azure Functions
GWSのデータを取得するためのコードが書いてある。コードを書き換えればコントロールはできそう。
アクション グループ
スマート検出機能アラートルール
スマート検出機能アラートルールで検出ルールが設定してあって、そのルールに則ってApplication Insightsが監視している?
アラートの送り先にアクショングループを指定してある
アクショングループでは、アラートの通知先がロールで指定してある
間違ってるかもしれませんが、こんな感じでした。むやみにリソースを削除したりすると動かなくなったりする可能性があるので、一旦様子を見ることにします。
GWSのログを確認する
リソースを色々調べているうちに30分くらい経っていたのですが、Functionsの実行状況を見てみたら既に何度か関数が実行されていました。
Sentinelに接続されているLog Analyticsのテーブルを見ると、GWSのテーブルも確認できました。
また、データコネクタを確認すると、GWSのデータコネクタが作成されていました。
とりあえず繋がった様子なので、取り込んだデータがちゃんと見れるかを確認します。「コネクタページを開く」>「ログ分析に移動」と遷移するとクエリの実行画面になるので、下記のKQLを叩いてみます
GWorkspace_ReportsAPI_drive_CL
| sort by TimeGenerated desc
すると、ちゃんとデータが確認できました。
しっかり取れていてひとまず安心です。
コストについて
ここで気になるのがコストです。Sentinelには31日間の無料期間があり、無料期間中は10GB/日の取り込み料が無料です。
ただ、Sentinelは結構料金体系が複雑で、ログも実際にログを取り込んでみるまでどの程度の量が流れ込んでくるか分からなかったので、GWSに繋いだ瞬間課金死しないか心配だったのですが、アカウント数200弱のGWSだけなら数日間取り込み続けていても取り込み料は無料枠で収まっていました。
また、今回はテンプレートを利用して展開しましたが、関数をいじりたければ下記URLのZIP(展開された関数の元ファイル)を再編集してAzure Functionsに上げなおせば良さそうです。Azure Functionsは全然詳しくないので、このあたりは要勉強。
【Azure Functionsのコード 】
https://aka.ms/sentinel-GWorkspaceReportsAPI-functionapp
下記は上記コードの一部ですが、恐らくこれでGWSの取得するログの項目を管理しているので、要らないログはコメントアウトしてしまえば取らなくなるのではないかと考えています。
activities = [
"user_accounts",
"access_transparency",
"admin",
"calendar",
"chat",
"drive",
"gcp",
"gplus",
"groups",
"groups_enterprise",
"jamboard",
"login",
"meet",
"mobile",
"rules",
"saml",
"token",
"context_aware_access",
"chrome",
"data_studio"
]
ログ取り込みの次は
とりあえず、GWSのログ取り込みまで作業してみました。ここまでの作業でGWSのログを長期保管したいという最初の目的は達成できますが、それだけだとSentinelを利用する意味があまりありません。
脅威検出、分析、ハンティング、アラートが発生した際の自動化などの設定も入れてなんぼなので、まだまだこれからが本番です。と、言いつつSIEMはSentinelが触るのが初めてなので、勉強しながら構築していく形になるのですが。自分もまだまだこれからです。
あと、数週間ほど動かしてみてコストについてもなんとなく見えてきたので、それは別でまとめてみようと思います。
この記事が気に入ったらサポートをしてみませんか?