Microsoft Defender for Cloud のセキュリティ アラートで Logic Apps をトリガーして対応を自動化する
こちらは Microsoft Azure Tech Advent Calendar 9日目 の記事です。
はじめに
Azure における CSPM/CWPP といえば、Microsoft Defender for Cloud (MDfC) が挙げられます。この統合コンソールを通して、IT 管理者はセキュリティやリソース構成の観点から全体を把握できます。
MDfC は推奨事項やセキュリティ アラートをこのコンソールの随所に提示をしてくれるのですが、その変化にいち早く気付き、場合によっては自動対応までを行うことが求められます。
実は、MDfC には Logic Apps との連携機能が組み込まれており、アラートなどをトリガーにしてフローを実行できます。うまく使いこなすと単なるアラート以外の処理も行えるため、プレイ ブックに沿った対応が自動で構成できる可能性があります。
今回はその設定の流れを確認します。
設定方法
Microsoft Defender for Cloud のを開き、設定していきます。
自動ワークフローの構成
[Workflow automation] > [+ workflow automation] から作成していきます。Trigger conditions
には Security alert
を設定します。
[Actions] では、トリガーするフロー用の Logic Apps が必要なため、[visit the Logic Apps page] をクリックします。Logic Apps のページから [+ Add] をクリックし、Consumption
を選択の上、任意のパラメータを入れて作成します。
完了後、作成した Logic Apps のページへアクセスし、[Overview] の [Get Started] から、[Choose template] を選択します。
ここで、[When a HTTP request is received] を選択します。
Logic Apps デザイナーが開いたら、一旦 [Save] をして MDfC の画面に戻ります。
先ほどの、[Actions] の項目で [Refresh] をクリックし、作成した Logic Apps リソースを選択します。そのまま、[Create] します。
すると、MDfC にワークフローが追加されたことが確認できます。
サンプル アラートの生成
続いて、Security Alert の画面を開き [Sample alerts] からサンプルのアラートを作成します。自動化ワークフローでスコープに設定されているサブスクリプションを選択し、アラートを発生させます。
サンプル アラートは以下のように生成されます。
ここで、Logic Apps リソースを開き、[Run history] を見てみると、大量に実行履歴が残っていることが分かります。
実行履歴のうちの1つをクリックし、中身を見てみると、確かに MDfC からのものであるとわかります。
さらに、Show raw outputs から詳細に中身を見てみると、AlertDisplayName
や Description
といった内容が確認できます。
(省略)
...
"AlertDisplayName": "[SAMPLE ALERT] Unusually large response payload transmitted between a single IP address and an API endpoint",
"Description": "THIS IS A SAMPLE ALERT: A suspicious spike in API response payload size was observed for traffic between a single IP and one of the API endpoints. Based on historical traffic patterns from the last 30 days, Defender for APIs learns a baseline that represents the typical API response payload size between a specific IP and API endpoint. The learned baseline is specific to API traffic for each status code (e.g., 200 Success). The alert was triggered because an API response payload size deviated significantly from the historical baseline. \n\n",
...
(省略)
このように、アラートを起点にして Logic Apps のフローをトリガーできることと、その中身のスキーマが分かったため、Logic Apps に簡単なフローを追加してもう一度試してみます。
Logic Apps のフロー作成
ここからは、Logic Apps の設定の話になります。MDfC のセキュリティ アラートをベースに実行したい内容を自由に作っていけばよいです。ここでは例として、メールを飛ばしてみます。
Gmail の [Send email] コンポーネントを配置し、接続名を入れたうえで Gmail アカウントでサインインします。そのアカウントから、任意の宛先にメールを通知できるようになります。つまり、管理用のアカウントがあれば、そこから担当者にメールを飛ばすことができます。
メッセージの Body
には、動的なコンテンツとして、[manual コンポーネント] の output
の body
をとりあえずそのまま入れています。
保存して、[Run with payload] からテストをします。Body
には、実行履歴からコピーした Body のテキストをそのままペーストします。
すると、確かにサイン インした Gmail アカウントからメールが飛んで来ることを確認できます。
フローで扱うデータの体裁の調整
あとは作り込みの問題なので、ここまででも挙動確認としては十分ですが、もう少し体裁を整えます。
[manual] と [Send email] の間に [Parse JSON] というデータ操作のコンポーネントを挟みます。Content
には 動的コンテンツとして [manual] の Body
を入れ、スキーマはサンプル ペイロードから生成します。
サンプルのペイロードは、実行履歴からとってきたものを貼り付けます。
続いて、[Send email] の設定に反映していきます。Subject パラメータには [Parse JSON] で取り出した、AlertDisplayName
を挿入します。Body パラメータには同じく取り出した、Description
を挿入します。
では今度は、MDfC からもう一度サンプル アラートを生成して挙動確認をしてみましょう。メールの大量発生を防ぐために、ここでは App Service のみを選択します。
すると、メールが飛んできます。タイトルと、中身が非常にわかりやすくなりました。
そのほかの拡張
必要に応じて Azure Resource Manager のコネクタを使用して Azure リソースの操作をしたり[1]、HTTP コネクタや Azure OpenAI Service コネクタ経由で LLM モデルを呼び出して分析や要約の処理させたりできます。コネクタ[2]は多く準備されているので、組み合わせて様々なフローを実現できます。
本記事では、Gmail コネクタを使用していますが、現在以下のような制約[3]があり、ほかのコネクタの使用に影響があるかもしれない点には注意してください。自分はあとから気づき、使いたかったコネクタを同時使用できずに悲しくなりました。
ご利用のワークフローで Gmail コネクタと Gmail コンシューマー アカウント (@gmail.com または @googlemail.com) で終わる電子メール アドレス) が使用されている場合、そのワークアカウントで使用できるのは、特定の Google によって承認されたトリガー、アクション、およびコネクタのみとなります。
おわりに
このような形で、MDfC 側の変化を Logic Apps でキャッチすると、情報のカスタマイズやチケットの生成、メッセージの送信、何らかの Azure リソースの操作など、できることの幅がかなり拡がります。リソース操作で何かできないかと考えたのですが、アラートに対して即リソース操作するというシナリオがぱっと思いつかず、いったん通知のみにとどめています。Azure リソースを Logic Apps から操作する場合には、マネージド ID と権限の付与をお忘れなく。
Logic Apps は難易度のわりに非常に多くのインパクトのある自動化ができるツールなので、扱えるようになると非常に便利です。
ちなみに、フローの中で Azure OpenAI Service を簡単に呼び出してアラートの翻訳と要約をさせようと思ったのですが、Outlook を使っていればそもそも Copilot がいるので要約してくれることに気づいて作るのはやめました(笑)。
cf. ネタを提供くださった N様に感謝します。
Discussion