Microsoft Dynamics 365 ユーザー アクティビティ ログを収集する
このドキュメントでは、Microsoft Azure Blob Storage V2 を使用して Google SecOps フィードを設定し、Microsoft Dynamics 365 ユーザー アクティビティ ログを収集する方法について説明します。
Microsoft Dynamics 365 は、CRM と ERP の機能を組み合わせたクラウドベースのビジネス アプリケーション プラットフォームです。ユーザー アクティビティ ログには、エンティティ操作、データアクセス、管理アクティビティなど、Dynamics 365 アプリケーション内でユーザーが実行したアクションとイベントが記録されます。Dynamics 365 は Microsoft Dataverse 上に構築されており、Microsoft Purview 統合監査ログを通じて包括的な監査ロギングを提供します。
始める前に
次の前提条件を満たしていることを確認します。
- Google SecOps インスタンス
- Microsoft Azure ポータルへの特権アクセス(次の権限を持つ)。
- ストレージ アカウントを作成する
- Dataverse 用 Azure Synapse Link を構成する
- アクセスキーを管理する
- Dynamics 365 を含む Microsoft 365 サブスクリプション
- Dynamics 365 環境のシステム管理者セキュリティ ロール
Power Platform 管理センターへのグローバル管理者または Power Platform 管理者のアクセス権
Dataverse 監査を有効にする
Dynamics 365 ユーザー アクティビティ ログをエクスポートする前に、Power Platform 管理センターで監査を有効にする必要があります。
- Power Platform 管理センターにログインします。
- ナビゲーション パネルで [環境] を選択します。
- Dynamics 365 のデプロイを含む環境を選択します。
- コマンドバーで [設定] を選択します。
- [監査とログ] を展開し、[監査設定] を選択します。
- [監査] で、次のオプションを有効にします。
- 監査を開始: 環境の監査を有効にします。
- ログアクセス: ユーザーのログインを追跡します。
- ログの読み取り: ほとんどのユーザー アクティビティとイベントをキャプチャします。
- 要件に基づいて、監査ログの保持ポリシーを設定します。
- [保存] を選択して変更を適用します。
テーブルレベルの監査を有効にする
- Power Apps にログインし、環境を選択します。
- コマンドバーで、[設定> 詳細設定] を選択します。
- [設定> カスタマイズ> システムをカスタマイズ] に移動します。
- ナビゲーション ペインの [コンポーネント] で、[エンティティ] を展開し、監査するエンティティ(アカウントなど)を選択します。
- [データサービス] まで下にスクロールし、[監査] チェックボックスをオンにします。
- [監査] で、次のオプションを有効にします。
- 単一レコードの監査。開いたときにレコードを記録します。
- 複数のレコードの監査。開いたページに表示されたすべてのレコードをログに記録します。
- [保存]、[公開] の順に選択します。
- 監査するテーブルごとに手順 4 ~ 7 を繰り返します。
詳細については、Microsoft Dataverse とモデル駆動型アプリのアクティビティ ロギングをご覧ください。
Azure Storage アカウントを構成する
ストレージ アカウントを作成する
- Azure ポータルで、[ストレージ アカウント] を検索します。
- [+ 作成] をクリックします。
次の構成情報を提供してください。
設定 値 サブスクリプション Azure サブスクリプションを選択する リソース グループ 既存のスケジュールを選択するか、新しいスケジュールを作成する ストレージ アカウント名 一意の名前を入力します(例: secopsd365logs)。リージョン Dataverse 環境と同じリージョンを選択します。 パフォーマンス 標準(推奨) 冗長性 GRS(地理冗長ストレージ)または LRS(ローカル冗長ストレージ) [詳細設定] タブを選択し、[階層型名前空間] オプションを有効にします。
[Review + create] をクリックします。
アカウントの概要を確認し、[作成] をクリックします。
デプロイが完了するまで待ちます。
ストレージ アカウントの認証情報を取得する
- 作成した [ストレージ アカウント] に移動します。
- 左側のナビゲーションで、[セキュリティとネットワーキング] の [アクセスキー] を選択します。
- [キーを表示] をクリックします。
- 後で使用するために、次の内容をコピーして保存します。
- ストレージ アカウント名:
secopsd365logs - キー 1 またはキー 2: 共有アクセスキー(base-64 でエンコードされた 512 ビットのランダムな文字列)
- ストレージ アカウント名:
Blob Service エンドポイントを取得する
- 同じストレージ アカウントで、左側のナビゲーションから [エンドポイント] を選択します。
- Blob サービスのエンドポイント URL をコピーして保存します。
- 例:
https://secopsd365logs.blob.core.windows.net/
- 例:
ストレージ アカウントの権限を付与する
Azure Synapse Link を構成する Power Platform 管理者に権限を付与します。
- [ストレージ アカウント] で、左側のペインで [アクセス制御(IAM)] を選択します。
- [+ 追加> ロールの割り当てを追加] をクリックします。
- Power Platform 管理者に次のロールを割り当てます。
- Storage Blob Data Contributor
- Storage Blob データ所有者
Dataverse 用 Azure Synapse Link を構成する
Dataverse 用 Azure Synapse Link は、Dataverse 監査テーブルを Azure Data Lake Storage Gen2 にエクスポートします。これは、Azure Blob Storage V2 フィードと互換性があります。
Azure Synapse ワークスペースを作成する
- Azure ポータルで、Synapse Analytics を検索します。
- [+ 作成] をクリックします。
- 次の構成情報を指定します。
- サブスクリプション: ストレージ アカウントを作成したサブスクリプションを選択します。
- リソース グループ: ストレージ アカウントと同じリソース グループを選択します。
- ワークスペース名: 一意の名前を入力します(例:
synapse-d365-secops)。 - リージョン: Dataverse 環境と同じリージョンを選択します。
- ストレージ アカウント名: 先ほど作成したストレージ アカウント(
secopsd365logs)を選択します。 - ファイル システム名: [新規作成] をクリックして名前を入力します(例:
d365-audit)。
- [確認 + 作成]、[作成] の順にクリックします。
- デプロイが完了するまで待ちます。
Apache Spark プールを作成する
- Azure ポータルで、作成した Synapse ワークスペースに移動します。
- [+ 新しい Apache Spark プール] をクリックします。
- 次の構成情報を指定します。
- Apache Spark プール名: 名前を入力します(例:
sparkpoold365)。 - ノード数: 「
5」と入力します。
- Apache Spark プール名: 名前を入力します(例:
- [その他の設定] タブを選択し、[アイドル状態の分数] に
5と入力します。 - [確認 + 作成]、[作成] の順にクリックします。
Dataverse 監査テーブルを Synapse ワークスペースに接続する
- Power Apps にログインし、Dynamics 365 のデプロイを含む環境を選択します。
- 左側のナビゲーション パネルで、[Azure Synapse Link] を選択します。項目が表示されない場合は、[その他] > [すべて表示] を選択して、Azure Synapse Link を見つけます。
- [新しいリンク] をクリックします。
- [新しいリンク] ページで、次の操作を行います。
- [Azure Synapse Analytics ワークスペースに接続する] オプションを選択します。
- Subscription: Azure サブスクリプションを選択します。
- リソース グループ: Synapse ワークスペースを含むリソース グループを選択します。
- ストレージ アカウント: ストレージ アカウント(
secopsd365logs)を選択します。 - [Delta Lake データ変換ジョブに Spark プールを使用する] オプションを選択します。
- Spark プール: 作成した Spark プール(
sparkpoold365)を選択します。 - ストレージ アカウント: 同じストレージ アカウントを選択します。
- [次へ] をクリックします。
- [詳細] タブを開き、[時間間隔] フィールドに
480分と入力します。 - テーブルのリストで、[監査] テーブルと [ユーザー] テーブルを選択します。
[保存] をクリックします。
詳細については、Azure Synapse Link と Power BI を使用して監査データにアクセスするをご覧ください。
Microsoft Dynamics 365 ユーザー アクティビティ ログを取り込むように Google SecOps でフィードを構成する
- [SIEM 設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一のフィードを設定] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
Microsoft Dynamics 365 User Activity)。 - [ソースタイプ] で [Microsoft Azure Blob Storage V2] を選択します。
- [Log type] として [Microsoft Dynamics 365] を選択します。
- [次へ] をクリックします。
次の入力パラメータの値を指定します。
- Azure URI: コンテナパスを含む Blob Service エンドポイント URL を入力します。
https://secopsd365logs.blob.core.windows.net/d365-audit/次のように置き換えます。
secopsd365logs: Azure ストレージ アカウント名。d365-audit: Synapse ワークスペースで構成されたファイル システム(コンテナ)の名前。
- Source deletion option: 必要に応じて削除オプションを選択します。
- なし: 転送後にファイルを削除しません。
- 転送されたファイルを削除する: 転送が完了した後にファイルを削除します。
- 転送されたファイルと空のディレクトリを削除する: 転送が完了した後にファイルと空のディレクトリを削除します。
- ファイルの最大経過日数: 過去の日数以内に変更されたファイルを含めます(デフォルトは 180 日)。
- 共有キー: 以前にストレージ アカウントから取得した共有キーの値(アクセスキー)を入力します。
- アセットの名前空間: アセットの名前空間
- Ingestion labels: このフィードのイベントに適用されるラベル
[次へ] をクリックします。
[Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
Azure Storage ファイアウォールを構成する(有効になっている場合)
Azure Storage アカウントでファイアウォールを使用している場合は、Google SecOps の IP 範囲を追加する必要があります。
- Azure ポータルで、ストレージ アカウントに移動します。
- [セキュリティとネットワーキング] で [ネットワーキング] を選択します。
- [ファイアウォールと仮想ネットワーク] で、[選択した仮想ネットワークと IP アドレスから有効] を選択します。
- [ファイアウォール] セクションの [アドレス範囲] で、[+ IP 範囲を追加] をクリックします。
各 Google SecOps IP 範囲を CIDR 表記で追加します。
現在の IP 範囲を取得するには:
- IP 許可リストのドキュメントを参照してください
- または、Feed Management API を使用してプログラムで取得します。
[保存] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
| BuildNumber | about.labels | about_BuildNumber をキー「BuildNumber」と BuildNumber の値(空でない場合)で統合 |
| RECORD_IDENTIFIER | additional.fields | 空でない場合は、それぞれのフィールドから作成されたラベルと統合されます |
| LastProcessedChange_DateTime | additional.fields | |
| DataLakeModified_DateTime | additional.fields | |
| Application_Object_Server_node | additional.fields | |
| ClientType | additional.fields | |
| LogoutDateTime | additional.fields | |
| LOGOUTDATETIMETZID | additional.fields | |
| TerminatedOk | additional.fields | |
| タイプ | additional.fields | |
| Alive | additional.fields | |
| PARTITION | additional.fields | |
| has_user | metadata.event_type | has_user が true の場合は「GENERIC_EVENT」に設定し、次に「USER_UNCATEGORIZED」に設定します。has_principal が true の場合は「STATUS_UPDATE」に設定します。 |
| has_principal | metadata.event_type | |
| RECVERSION | metadata.product_version | 空でない場合、値が直接コピーされます |
| SessionId | network.session_id | 空でない場合、値が直接コピーされます |
| LOG_SEQUENCE_NUMBER | security_result.detection_fields | LOG_SEQUENCE_NUMBER_label(キー「LOG_SEQUENCE_NUMBER」と LOG_SEQUENCE_NUMBER の値)を、空でない場合に統合 |
| UserId | target.user.userid | 空でない場合、値が直接コピーされます |
| timestamp | timestamp | 空でない場合は、ISO8601 または RFC 3339 形式の日付照合を使用して解析されます |
| metadata.product_name | metadata.product_name | 「MICROSOFT_DYNAMICS_365」に設定 |
| metadata.vendor_name | metadata.vendor_name | 「MICROSOFT_DYNAMICS_365」に設定 |
変更ログ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。