このチュートリアルでは、Microsoft Entra 監査ログを監視する Azure ロジック アプリを作成する方法について説明します。 ロジック アプリは、さまざまな監査ログ イベントに基づいて、セキュリティの電子メールによる通知をユーザーに送信できます。
このチュートリアルでは、ユーザーの認証方法が変更されたときに電子メールで送信されるセキュリティ通知について説明します。 ロジック アプリを使用して、他の監査ログ イベントのセキュリティ通知を送信するワークフローを作成することもできます。 これらのセキュリティ通知は、ユーザーを更新し、危険なアクティビティを通知するのに役立ちます。 ユーザーは、適切な手順を迅速に実行して報告できます。
前提条件
この機能を使用するには、次が必要です。
- Azure サブスクリプション。 Azure サブスクリプションを持っていない場合は、無料試用版にサインアップできます。
- Microsoft Entra テナント。
- Microsoft Entra テナントのセキュリティ管理者以上であるユーザー。
- Azure サブスクリプション内の Event Hubs 名前空間とイベント ハブ。 イベント ハブの作成方法に関するページを参照してください。
- ログをイベント ハブにストリーミングできるようにします。 ログをイベント ハブにストリーム配信する方法については、こちらを参照してください。 セキュリティ通知を送信するログのみを選択します。 このチュートリアルでは、監査ログをストリーミングします。
- Office 365 Outlook や Outlook.com など、Azure Logic Apps と連携するサービスの電子メール アカウント。 サポートされている他の電子メール プロバイダーについては、Azure Logic Apps のコネクタに関する記事をご覧ください。
ロジック アプリを作成します
- Azure portal にサインインします。
- ホーム ページの [Azure サービス] の下にある [Logic Apps] を選択します。
- [追加] を選択します。
-
[ロジック アプリを作成する] で、ロジック アプリを構成します。
ロジック アプリを作成する [サブスクリプション] を選択します。
イベント ハブ用に作成した [リソース グループ] を選択します。
[ロジック アプリ名] を入力すると、その名前が使用できるかどうかがすぐに自動で確認されます。
ロジック アプリの [リージョン] を選択します。
[プランの種類] で [従量課金] 階層を選択します。 組織のサイズとニーズに合ったリージョンとプランの種類を選択します。 階層間の違いについては、「Standard および従量課金ロジック アプリのワークフロー」を参照してください。
他の設定は変更しないでください。
注
ゾーン冗長をサポートするのは一部のリージョンのみです。 場所によっては、ゾーン冗長セクションが自動的に有効または無効になる可能性があります。 詳細については、「ゾーン冗長性と可用性ゾーンを使用してリージョンの障害からロジック アプリを保護する」を参照してください。
[Review + create](レビュー + 作成) を選択します。 次に、ロジック アプリの設定を確認し、[作成] を選択します。
デプロイが完了するまで待ってください。
空のテンプレートを選択する
Azure でロジック アプリ リソースが正常にデプロイされたら、[リソースに移動] を選択するか、Azure 検索ボックスに名前を入力してロジック アプリ リソースを検索して選択します。
ビデオの後まで下スクロールし、[テンプレート] の下で [空のロジック アプリ] を選択します。 テンプレートを選ぶと、デザイナーに空のワークフローが表示されます。
Logic Apps デザイナー
[コネクタとトリガー] セクションで、[Event Hubs] を選択するか、検索バーで検索します。
[Event Hubs トリガーでイベントを使用できるとき] を選択します。 Event Hubs トリガーを初めて使用すると、イベント ハブへの接続を作成するように求められます。 詳細および手順については、「イベント ハブ接続の作成」を参照してください。
[Event Hub 名] で、[前提条件] で作成したイベント ハブを選びます。 ロジック アプリでセキュリティ通知を送信するイベント ハブを選択します。
[項目のチェック頻度] の下で、イベント ハブをチェックする頻度を選択します。 このチュートリアルでは、1 分ごとにイベントをチェックします。
変数を初期化する
ここでは、3 つの変数を初期化します。 1 つは、トリガーされ、イベント ハブにストリーミングされたイベントの内容です。 他の 2 つの変数は、電子メール本文の空の変数と、アクティビティの日付と時刻であり、後でイベントの情報を入力します。
デザイナーの [Event Hubs トリガーでイベントを使用できるとき] の下で、[新しいステップ] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「変数」と入力し、[変数を初期化する] を選択します。
[名前] で、「コンテンツ」と入力します。
[型] で [文字列] を選択します。
[値] プロパティにカーソルを置くと、[動的コンテンツ] が表示されます。
[動的コンテンツ] ペインで、[コンテンツ] を検索して選択します。
[新しいステップ] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「変数」と入力し、[変数を初期化する] を選択します。
変数に emailBody などの 名前を付けます。
[タイプ] で、[文字列] を選択し、[値] を空白のままにします。
[新しいステップ] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「変数」と入力し、[変数を初期化する] を選択します。
変数に dateTime などの 名前を付けます。
[タイプ] で、[文字列] を選択し、[値] を空白のままにします。
JSON の解析
次に、JSON を解析してイベント ハブにストリーミングされたイベントから受信した生の JSON を書式設定し、そのコンテンツ内の特定のデータにアクセスできるようにします。
[変数 3 の初期化] の下で、[新しいステップ] を選択します。
[コネクタとアクションを検索する] 検索バーに、「Parse JSON」と入力します。
[アクション] タブに切り替えて、[Parse JSON] を選択します。
[コンテンツ] で、[動的コンテンツの追加] を選択します。
[動的コンテンツ] で、[変数] の下の [コンテンツ] を選択します。
[スキーマ] セクションで、次の JSON テンプレートをコピーして貼り付けます。
{ "type": "object", "properties": { "records": { "type": "array", "items": { "type": "object", "properties": { "time": { "type": "string" }, "resourceId": { "type": "string" }, "operationName": { "type": "string" }, "operationVersion": { "type": "string" }, "category": { "type": "string" }, "tenantId": { "type": "string" }, "resultSignature": { "type": "string" }, "durationMs": { "type": "integer" }, "correlationId": { "type": "string" }, "Level": { "type": "integer" }, "properties": { "type": "object", "properties": { "id": { "type": "string" }, "category": { "type": "string" }, "correlationId": { "type": "string" }, "result": { "type": "string" }, "resultReason": { "type": "string" }, "activityDisplayName": { "type": "string" }, "activityDateTime": { "type": "string" }, "loggedByService": { "type": "string" }, "operationType": { "type": "string" }, "userAgent": {}, "initiatedBy": { "type": "object", "properties": { "user": { "type": "object", "properties": { "id": { "type": "string" }, "displayName": {}, "userPrincipalName": { "type": "string" }, "ipAddress": { "type": "string" }, "roles": { "type": "array" } } } } }, "targetResources": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "displayName": {}, "type": { "type": "string" }, "userPrincipalName": { "type": "string" }, "modifiedProperties": { "type": "array" }, "administrativeUnits": { "type": "array" } }, "required": [ "id", "displayName", "type", "userPrincipalName", "modifiedProperties", "administrativeUnits" ] } }, "additionalDetails": { "type": "array" } } } }, "required": [ "time", "resourceId", "operationName", "operationVersion", "category", "tenantId", "resultSignature", "durationMs", "correlationId", "Level", "properties" ] } } } }
[Parse JSON] アクションは、次のスクリーンショットのようになります。
セキュリティ通知の電子メール本文
次に、アカウントに対して実行されたアクションについてユーザーに通知するセキュリティ電子メールを作成し、スタイルを設定します。 ここでは、発生したアクティビティをユーザーに通知し、自分のアクションではない場合は報告するように求めます。
[Parse JSON] の下で、[新しいステップ] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「for each」と入力し、[アクション] のリストから、[For each] を選択します。
[前の手順から出力を選択] の下で、[動的コンテンツの追加] を選択します。
[動的コンテンツ] で、[レコード] を選択します。
[For each] アクション内で、[アクションの追加] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「変数」と入力し、[変数の設定] を選択します。
[名前] の下で、作成した dateTime 変数を選択します。
[値] 内で、[動的コンテンツの追加] を選択します。
[動的コンテンツ] で、[Parse JSON] の下で [時間] を検索して選択します。
[変数の設定] の下で、[組み込み] を選択します。 検索ボックスに「変数」と入力し、[変数の設定] を選択します。
[名前] の下で、作成した emailBody 変数を選択します。
[値] の下で、セキュリティ通知電子メールの本文に表示するテキストを入力します。 本文は html で書式設定できます。 このテンプレートから始めてカスタマイズできます。 たとえば、href プレースホルダーを、組織に関連するリンクに置き換えます。
<div> <h2> You recently changed your authentication methods </h2> <p> We have been notified of the following action: (operation) on (date & time). <br><br> If you initiated this, no action is required. <br><br> If you haven't, please report it now. <br><br> <b>Instructions</b> <ol> <li>Review your account activity in <a href="https://mysignins.microsoft.com/security-info" class="link">Microsoft Security Info</a>.</li> <li>If you do not recognize this action, report it immediately:</li> <ul> <li>Go to <a href="#" class="link">ReportItNow</a> and select your security event.</li> <li>Provide any additional information in the form and submit.</li> </ul> </ol> <b>Information and Support</b> <ul> <li>Technical Assistance - Contact <a href="#" class="link">Helpdesk</a> support services</li> </ul> <b>Do NOT reply to this email. This is an unmonitored mailbox.</b><br> For more information, contact the <a href="#" class="link">Security Department</a> <br><br> <a href="#"><button type="button">Report device</button></a><br><br> <div class="footer"> Contoso, Ltd., 4567 Main St Buffalo, NY 98052<br> <br>Facilitated by <br> <img src="#" alt="Company Logo" style="height:70px;"> </div> <style> .link { text-decoration:none; color: #0078D4 } button { background-color: #0078D4; color: white; padding: 10px; border-radius: 5px; text-decoration: none; } button:hover { cursor: pointer; } .footer { width: 100%; height: 10%; padding-top: 10px; padding-left: 10px; padding-right: 10px; background-color: rgb(237, 237, 237); } </style> </p> </div>
動的コンテンツを電子メール本文に追加する
上記のテンプレートを使用している場合は、[変数の設定] アクションの [値] フィールドにコピーして貼り付けます。
テンプレートを貼り付けた値フィールド内で、最初の数行のテキストに戻り、"(コンテンツ)" を強調表示します。 下の画像を参照してください。
そのテキストが強調表示されると、 アクション ボックスの右側に [動的コンテンツ] がポップアップ表示されます。 [動的コンテンツ] の検索バーで、operationName を検索して選択します。
ここでも、テンプレートを貼り付けた値フィールド内で、最初の数行のテキストに戻り、"(date & time)" を強調表示します。 下の画像を参照してください。
そのテキストが強調表示されると、アクション ボックスの右側に [動的コンテンツ] セクションがポップアップ表示されます。 [式] タブに移動し、入力ボックスに次のコードを入力します。
formatDateTime(variables('dateTime'),'yyyy-MM-dd tH:mm:ss')
入力ボックスに上記のコードを貼り付けた後、[OK] を選択します。
動的コンテンツを使用して電子メールをさらにカスタマイズする方法の詳細については、「ワークフローの動的コンテンツ」を参照してください。
セキュリティ電子メールの送信
[変数の設定] アクションの下で、[アクションの追加] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「for each」と入力し、アクションリストから [For each] という名前のアクションを選択します。
[前の手順から出力を選択] で、[動的コンテンツ] から targetResources を選択します。
[For each 2] アクション ブロック内と targetResources の下で、[アクションの追加] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「条件」と入力し、[条件] という名前のアクションを選択します。
[値の選択] 内で operationName を検索して選択します。
[値の選択] に、セキュリティ通知電子メールを送信するアクティビティの正確な名前を入力します。 フィルター処理して通知を送信できるアクティビティの完全なリストについては、「監査ログ アクティビティ」を参照してください。
このチュートリアルでは、[ユーザー パスワードのリセット] アクティビティに関する電子メールを送信します。
複数のアクティビティのセキュリティ電子メールを送信する場合は、[条件アクション] ブロック内で [追加] を選択し、[行の追加] を選択し、[値の選択] で別のアクティビティ名に対してこれらの手順を繰り返します。
電子メール通知設定
[条件] の下に、[True] と [False] のアクションがあります。 [True] アクション ボックス内で、 [アクションの追加] を選択します。
[操作を選択してください] で [組み込み] を選択します。 検索ボックスに「電子メール」と入力し、[Office 365 Outlook] を選択します。 Outlook 電子メールの代わりに、さまざまなサービスで通知を送信できます。 別のサービスを見つけるには、[操作の選択] の検索バーに移動し、目的のサービスを検索します。
[アクション] の下で、下スクロールし、 [電子メールの送信 (V2)] を選択します。
[To] フィールド内で、[動的コンテンツ] で userPrincipalName を検索し、2 番目のオプションを選択します。
[件名] フィールドで、[動的コンテンツ] で operationName を検索して選択します。
[本文] フィールドで、[動的コンテンツ] で emailBody を検索して選択します。
[重要度] を選択すると、電子メールの重要度を変更できます。
ワークフローを実行する
ワークフローを手動で開始するには、デザイナーのツール バーで、[トリガーの実行]>[実行] を選択します。 監査ログがイベント ハブにストリーミングされると、ロジック アプリがセキュリティ通知を送信するようにトリガーされます。
このワークフローをカスタマイズして、他のログやアクティビティをフィルター処理したり、Teams などのさまざまなサービスを介して通知を送信したりして、ユーザーに疑わしいアクティビティを認識させる最適なエクスペリエンスを作成できます。