ManageEngine Exchange Reporter Plus のログを収集する
このドキュメントでは、ManageEngine Exchange Reporter Plus を構成して、Webhook を使用してログを Google Security Operations に push する方法について説明します。
ManageEngine Exchange Reporter Plus は、Microsoft Exchange Server と Exchange Online 環境向けのウェブベースのレポート、監査、モニタリング ソリューションです。ハイブリッド Exchange 環境のメールボックス サイズ、メール トラフィック、パブリック フォルダ、Exchange ActiveSync ログ、管理者アクティビティと構成変更の監査ログに関する包括的なレポートを提供します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- ManageEngine Exchange Reporter Plus がインストールされ、Exchange Server または Exchange Online をモニタリングするように構成されている
- ManageEngine Exchange Reporter Plus ウェブ コンソールへの管理者アクセス権
- Google Cloud コンソールへのアクセス(API キーの作成用)
Google SecOps で Webhook フィードを作成する
フィードを作成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで [単一フィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
ManageEngine Exchange Reporter Plus Logs)。 - [Source type] として [Webhook] を選択します。
- [ログタイプ] として [ManageEngine Exchange Reporter Plus] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- Split delimiter(省略可): 複数行のイベントを分割するには、
\nを入力します。 - アセットの名前空間: アセットの名前空間
- Ingestion labels: このフィードのイベントに適用されるラベル
- Split delimiter(省略可): 複数行のイベントを分割するには、
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
秘密鍵を生成して保存する
フィードを作成したら、認証用のシークレット キーを生成する必要があります。
- フィードの詳細ページで、[シークレット キーを生成] をクリックします。
- ダイアログに秘密鍵が表示されます。
- 秘密鍵をコピーして安全に保存します。
重要: シークレット キーは一度しか表示されず、後で取得することはできません。秘密鍵を紛失した場合は、新しい秘密鍵を生成する必要があります。
フィード エンドポイントの URL を取得する
- フィードの [詳細] タブに移動します。
- [エンドポイント情報] セクションで、[フィード エンドポイント URL] をコピーします。
URL の形式は次のとおりです。
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreateまたは
https://<REGION>-malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate次の手順で使用するため、この URL を保存します。
[完了] をクリックします。
Google Cloud API キーを作成する
Chronicle では、認証に API キーが必要です。Google Cloud コンソールで制限付き API キーを作成します。
API キーを作成する
- Google Cloud コンソールの [認証情報] ページに移動します。
- プロジェクト(Chronicle インスタンスに関連付けられているプロジェクト)を選択します。
- [認証情報を作成> API キー] をクリックします。
- API キーが作成され、ダイアログに表示されます。
- [API キーを編集] をクリックして、キーを制限します。
API キーを制限する
- [API キー] 設定ページで、次の操作を行います。
- 名前: わかりやすい名前を入力します(例:
Chronicle Webhook API Key)。
- 名前: わかりやすい名前を入力します(例:
- [API の制限] で次の操作を行います。
- [キーを制限] を選択します。
- [API を選択] プルダウンで、[Google SecOps API](または [Chronicle API])を検索して選択します。
- [保存] をクリックします。
- ページ上部の [API キー] フィールドから API キーの値をコピーします。
- API キーを安全に保存します。
ManageEngine Exchange Reporter Plus の Webhook を構成する
Webhook URL を作成する
Chronicle エンドポイント URL、API キー、シークレット キーを組み合わせます。
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...
Exchange Reporter Plus でログ転送を構成する
- 管理者として ManageEngine Exchange Reporter Plus ウェブ コンソールにログインします。
- [設定> 管理 > 全般設定 > ログ転送] に移動します。
- [ログ転送を有効にする] チェックボックスをオンにします。
- [Webhook] タブをクリックします。
- 次の構成の詳細を入力します。
- HTTP Method: [POST] を選択します。
- HTTP URL: 前の手順で作成した完全な Webhook URL(Chronicle エンドポイント URL に API キーと秘密鍵がクエリ パラメータとして追加されたもの)を貼り付けます。
- [詳細設定] セクションで、次の操作を行います。
- [HTTP Request Headers] をクリックします。
- 次のヘッダーを追加します。
- キー:
Content-Type - 値:
application/json
- キー:
[保存] をクリックします。
ログ転送を確認する
- 構成を保存すると、Exchange Reporter Plus は webhook エンドポイントを介して監査ログの Google SecOps への転送を開始します。
- Google SecOps コンソールにログインし、取り込みラベル
MANAGE_ENGINE_REPORTER_PLUSを使用してログが [検索] インターフェースに表示されることを確認します。
ファイアウォール構成
次のファイアウォール ルールが構成されていることを確認します。
Exchange Reporter Plus サーバーからの送信:
- プロトコル: HTTPS(TCP 443)
- 宛先: Chronicle リージョン エンドポイント(
malachiteingestion-pa.googleapis.comまたはリージョン エンドポイント) - 目的: Webhook 経由で Google SecOps にログを配信する
認証方法のリファレンス
Chronicle ウェブフック フィードは、複数の認証方法をサポートしています。ベンダーがサポートしている方法を選択します。
方法 1: カスタム ヘッダー(推奨)
ベンダーがカスタム HTTP ヘッダーをサポートしている場合は、この方法を使用するとセキュリティが強化されます。
リクエストの形式:
POST <ENDPOINT_URL> HTTP/1.1 Content-Type: application/json x-goog-chronicle-auth: <API_KEY> x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
メリット:
- API キーとシークレットが URL に表示されない
- より安全(ヘッダーがウェブサーバーのアクセスログに記録されない)
- ベンダーがサポートしている場合の推奨方法
方法 2: クエリ パラメータ
ベンダーがカスタム ヘッダーをサポートしていない場合は、URL に認証情報を追加します。
URL 形式:
<ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY>例:
https://malachiteingestion-pa.googleapis.com/v2/unstructuredlogentries:batchCreate?key=AIzaSyD...&secret=abcd1234...リクエストの形式:
POST <ENDPOINT_URL>?key=<API_KEY>&secret=<SECRET_KEY> HTTP/1.1 Content-Type: application/json { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
デメリット: - 認証情報が URL に表示される - ウェブサーバーのアクセスログに記録される可能性がある - ヘッダーよりも安全性が低い
方法 3: ハイブリッド(URL + ヘッダー)
一部の構成では、URL に API キーを使用し、ヘッダーにシークレット キーを使用します。
リクエストの形式:
POST <ENDPOINT_URL>?key=<API_KEY> HTTP/1.1 Content-Type: application/json x-chronicle-auth: <SECRET_KEY> { "event": "data", "timestamp": "2025-01-15T10:30:00Z" }
認証ヘッダー名
Chronicle は、認証に次のヘッダー名を受け入れます。
API キーの場合:
x-goog-chronicle-auth(推奨)X-Goog-Chronicle-Auth(大文字と小文字を区別しない)
秘密鍵の場合:
x-chronicle-auth(推奨)X-Chronicle-Auth(大文字と小文字を区別しない)
Webhook の上限とベスト プラクティス
リクエストに関する上限
| 上限 | 値 |
|---|---|
| 最大リクエスト サイズ | 4 MB |
| 最大 QPS(秒間クエリ数) | 15,000 |
| リクエストのタイムアウト | 30 秒 |
| 再試行の動作 | 指数バックオフによる自動 |
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| msg.OrganizationId | additional.fields | キー「OrganizationId」と msg.OrganizationId の値、キー「MailboxGuid」と msg.MailboxGuid の値、キー「RecordType」と msg.RecordType の値を持つラベルを統合 |
| msg.MailboxGuid | additional.fields | |
| msg.RecordType | additional.fields | |
| msg.CreationTime | metadata.event_type | 空でない場合は event_type の値に設定します。それ以外の場合は、msg.Operation == 「Update」の場合は「USER_UNCATEGORIZED」、msg.Operation == 「Create」かつ msg.MailboxOwnerUPN が空でない場合は「USER_CREATION」、msg.Operation == 「Create」の場合は「USER_UNCATEGORIZED」、msg.UserId が空でない場合は「USER_UNCATEGORIZED」、msg.ClientIP が空でない場合は「STATUS_UPDATE」、それ以外の場合は「GENERIC_EVENT」に設定します。 |
| msg.Operation | metadata.product_event_type | 値を直接コピーしました |
| msg.Id | metadata.product_log_id | 値を直接コピーしました |
| msg.ClientVersion | metadata.product_version | msg.ClientVersion が空でない場合はその値、空の場合は msg.Version を文字列に変換した値 |
| msg.Version | metadata.product_version | |
| AffectedItems.0.InternetMessageId | network.email.mail_id | Gsub < |
| AffectedItems | network.email.subject | JSON として解析され、item.Subject が抽出され、見つかった場合はマージされます |
| msg.ClientInfoString | network.http.user_agent | msg.ClientInfoString が空でない場合はその値、それ以外の場合は msg.Client |
| msg.Client | network.http.user_agent | |
| msg.ClientProcessName | principal.application | 値を直接コピーしました |
| msg.OriginatingServer | principal.hostname | grok パターンを使用して抽出。成功した場合は抽出された値、それ以外の場合は直接コピーされた値 |
| clientIP | principal.ip | grok を使用して msg.ClientIP から抽出されます |
| clientPort | principal.port | grok を使用して msg.ClientIP から抽出され、整数に変換されます |
| msg.UserKey | principal.user.attribute.labels | ラベルキーを「UserKey」、値を msg.UserKey に設定して統合 |
| msg.UserType | principal.user.attribute.roles | roles.name を msg.UserType に設定(マージ済み) |
| msg.UserId | principal.user.email_addresses | msg.UserId がメールアドレスの正規表現と一致する場合に統合 |
| msg.UserId | principal.user.userid | 値を直接コピーしました |
| msg.MailboxOwnerSid | principal.user.windows_sid | msg.MailboxOwnerSid が空でない場合はその値、それ以外の場合は msg.LogonUserSid |
| msg.LogonUserSid | principal.user.windows_sid | |
| security_result | security_result | security_result ハッシュから統合 |
| security_result_action | security_result.action | security_result_action から統合されました |
| msg.ResultStatus | security_result.action_details | 値を直接コピーしました |
| msg.RecordType | security_result.detection_fields | 文字列に変換され、キー「RecordType」が設定され、値が msg.RecordType に設定され、統合されました |
| msg.OrganizationName | target.administrative_domain | 値を直接コピーしました |
| msg.DestFolder | target.file.full_path | grok を使用して fileId と filePath を抽出し、バックスラッシュを gsubs で置き換え、fileId/filePath として連結 |
| ホスト | target.hostname | 値を直接コピーしました |
| msg.Folder | target.process.parent_process.file.full_path | grok を使用して parentFileId と parentFilePath を抽出し、バックスラッシュを gsubs で置き換え、parentFileId/parentFilePath として連結しました |
| msg.MailboxOwnerUPN | target.user.email_addresses | メールの正規表現に一致する場合に統合 |
| msg.MailboxOwnerUPN | target.user.user_display_name | スペースが含まれている場合に設定 |
| msg.MailboxOwnerUPN | target.user.userid | メールアドレスではなく、スペースがない場合は設定 |
| metadata.product_name | metadata.product_name | [Manage Engine] に設定します。 |
| metadata.vendor_name | metadata.vendor_name | 「Manage Engine Reporter Plus」に設定します。 |
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。