Azure Sentinelのアラートを基にSlackへAWSコンソールへのパーマリンクを通知する

こんにちは、ひろかずです
Azure Sentinelの運用をしていると、事前定義アラートの通知内容では調査の取り掛かりまで時間がかかることに気づきます
SOAR機能であるプレイブック(実体はLogic App)を使って、調査対象のパーマリンクを作ることができたので、一筆書きます

tl;dr的な何か

  • Sentinelの事前定義アラート(Changes to AWS Security Group ingress and egress settings)では、Security Groupが変更されたということまでしかわからない
  • クエリーを書けば変更内容を確認することはできるが、当該のSecurity Groupがどこでどのように使われているかはAWSコンソールを見なければならず、重要度の判定には手間がかかる
  • Sentinelのアラートをトリガーに、追加情報をクエリーで取得して、AWSコンソールの当該イベント一覧へのパーマリンクを生成し、Slackに通知するプレイブックを実装しました

ざっくり構成

前提条件

  • Azure Sentinelが有効化済みであり、ワークスペースが利用可能であること
  • CloudTrail Eventsを参照できるAWS環境を保有していること
  • Azure SentinelのデータコネクタでAWSを繋ぎ込んでいること

参考ドキュメント

工程

  1. 事前準備(結合アカウントの作成)
  2. プレイブックの作成(前篇)
  3. プレイブックへの結合アカウントの設定
  4. プレイブックの作成(後編)
  5. 動作確認

1. 事前準備(結合アカウントの作成)

  • Azureコンソールにログインして、結合アカウント画面を開く
  • 結合アカウント名とAzure Sentinelで利用しているサブスクリプションとリソースグループ、Log Analyticsワークスペースを指定して、[作成]を選択
    • この結合アカウントは、後続で使用するJavaScriptコネクタのために作成するので、今回はhirokazu-javascriptという名前にしました
    • [2020/2/6追記] 価格レベルは必ず確認してください。標準だと結構なお値段がかかります。

  • 結合アカウントが作成されたことを確認

2. プレイブックの作成(前篇)

  • AzureコンソールのAzure Sentinel管理画面から[プレイブック]を選択し、[プレイブックの追加]を選択

  • プレイブック名とAzure Sentinelで利用しているサブスクリプションとリソースグループを指定して、[作成]を選択

  • [空のロジックアプリ]を選択

  • 検索窓にSentinelと入力し、トリガーに表示された[When a response to an Azure Sentinel alert is triggered]を選択して、[保存]を選択

3. プレイブックへの結合アカウントの設定

  • [Logic Appの管理画面]から、先程作成したプレイブックを選択し、[ワークフロー設定]から[結合アカウント]に事前準備で作成した結合アカウントを設定して、[保存]を選択

4. プレイブックの作成(後編)

  • [ロジック アプリ デザイナー]を選択する

4-0. 後編作業の全体像

  • 以下アクションを作成していく

4-1. Run qurry and list results

  • [前編]で作成したアクションの下の[アクションを追加]を選択
  • [Azure Monitor Logs]を検索して選択し、[Run qurry and list results]を選択

  • Azure Sentinelで利用しているサブスクリプションとリソースグループ、リソース名を指定して、以下のように設定する

  • Queryは以下のように設定する
AWSCloudTrail
| where EventName == "AuthorizeSecurityGroupEgress"      or EventName == "AuthorizeSecurityGroupIngress"      or EventName == "RevokeSecurityGroupEgress"      or EventName == "RevokeSecurityGroupIngress"
| project SessionCreationDate , EventName  , AWSRegion , UserIdentityAccountId , RequestParameters , UserIdentityArn

4-2. JavaScript コードの実行

  • [Run qurry and list results]の下の[アクションを追加]を選択
  • [インライン]を検索し、[JavaScript コードの実行]を選択

  • コードは以下のように設定する

var objDate = new Date();
objDate.setDate(objDate.getDate() - 1);
var year    = objDate.getFullYear(),
    month   = objDate.getMonth()+ 1,
    day     = objDate.getDate();
if (month < 10) {
month = "0" + month;
}
if (day < 10) {
day = "0" + day;
}
var retdate = (year + '-' + month + '-' + day + 'T00:00:00.000Z' );
return retdate;

4-3. 作成

  • [JavaScript コードの実行]の下の[アクションを追加]を選択
  • [データ操作]を検索し、[作成]を選択

  • [作成]欄を選択し、動的コンテンツ一覧から[結果]を選択

4-4. For each

  • [作成]の下の[アクションを追加]を選択
  • [データ操作]を検索し、[作成]を選択

  • [作成]欄を選択し、動的コンテンツ一覧から[AWSRegion],[EventName],[UserIdentityAccountId]を選択
    • 1つ目の動的コンテンツを選択した時点で、アクションはFor eachにラップされます

  • [作成]の下の[アクションを追加]を選択
  • [Slack]を検索し、[投稿メッセージ]を選択

  • 以下のように、テキストと動的コンテンツを組み合わせながら投稿メッセージを設定する

  • 動的コンテンツは適宜調整すること
@{triggerBody()?['AlertDisplayName']}
EventName == @{items('For_each')?['EventName']}
AWS Account ID == @{items('For_each')?['UserIdentityAccountId']}
https://@{items('For_each')?['AWSRegion']}.console.aws.amazon.com/cloudtrail/home?region=@{items('For_each')?['AWSRegion']}#/events?EventName=@{items('For_each')?['EventName']}&StartTime=@{outputs('作成')}
  • [保存]を選択

5. 動作確認

  • AWS環境のセキュリティグループを変更
  • Sentinelの事前定義アラート[Changes to AWS Security Group ingress and egress settings]の実行間隔を5分に変更
  • 以下のように通知されました

  • 通知のパーマリンクを選択すると、AWSコンソールのCloudTrail Events画面に遷移し、指定したイベント名と時刻が反映された形で表示されました

  • 表示されたイベントの内容から、Configタイムラインを選択

  • 変更されたSecurity Groupに関連付けられているリソースを確認

  • 変更されたSecurity Groupの変更前後内容を確認

おわりに

  • 変更されたことを伝えるだけだったアラートを、変更内容への直通パーマリンクを通知するようにできました
  • これで当該インシデント対応が一手、二手短縮できると思います
  • このように、よく発生するインシデントについて、調査が捗る調整を加えると、日々の運用が楽になっていくと思います
  • 対応手順書のリンクを埋め込むのもいいですね
  • 地道ですが、このような作り込みを重ねていくのがいいでしょう

今日はここまでです
お疲れ様でした

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です