概要
Office 365で監査ログをAPIにより取得する方法です。
監査ログはMicrosoft365 コンプライアンス画面からも取得可能ですが、本稿ではAPIで取得する方法を記載します。
監査ログ取得手順
おおよそ以下の手順です。
- Exchange Online PowerShellのインストール
- Office365の監査ログの有効化
- APIアクセスのためのアプリケーション登録
- APIの呼び出し
1. Exchange Online PowerShellのインストール
Exchange Online PowerShellは直接的には必要ありませんが、何かと使えた方が便利ですし、後続の監査ログの有効化を行う場合は必須です。
基本的には、以下のページに記載された手順を行えば問題ありません。(インストール済みの方は本手順は不要です)
この手順はモジュールがインストールされていることを前提にしているので、インストールされていない場合は、以下のページの通りモジュールをインストールします。
このページに記載の「EXO V2 モジュールをインストールする」手順を実行すればよいです。
PowerShellの起動は以下の通りです。
Install-Module -Name ExchangeOnlineManagement
Import-Module ExchangeOnlineManagement
Connect-ExchangeOnline -UserPrincipalName your_UPN
1行目は、モジュールをインストールするためのものです。インストール中にプロンプトが表示されますが、インストールを続行する方向で回答してください。
すでにモジュールをインストール済みであれば、2行目から実行してください。
2. Office365の監査ログの有効化
おおよそのことは以下のページに記載があります。
「Microsoft 365 および Office 365 Enterprise 組織では、監査ログは既定でオンになっています。」ということですので、既にオンになっている環境では本手順は不要です。が、私の環境の初期状態はオフでした。何度か試しましたが、すべてオフでしたので、ドキュメントのエラーかと思われます。
いずれにしても、オンオフの状態は、以下のコマンドで確認できます。
Get-AdminAuditLogConfig | FL UnifiedAuditLogIngestionEnabled
オフになっている環境では以下の手順で有効化してください。
- Exchange Online PowerShellに接続します。
-
Enable-OrganizationCustomization
を実行し、30分から1時間程度待ちます。 - 監査ログを有効化します。
Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true
有効化には60分程度かかるそうです。
あとは、監査ログに記録が残るように、いろいろとOffice365にアクセスしてください。
3. APIアクセスのためのアプリケーション登録
Azure ADでアプリ登録を行います。手順は多数の有識者が説明してくれていますので、ここでは割愛します。
ここにも記載がありました。
アプリを登録したら、Office 365 Management APIの権限を付与してください。
4. APIの呼び出し
以下のページに9割の情報が記載されていますので、(多少の記載の誤りはありますが)そちらを見ていただくのがよいかと思います。
ドキュメントの補足
上記ドキュメントの分かりにくいところを補足します。
APIのエンドポイントは、たとえばサブスクリプションの開始であれば /subscriptions/start?contentType={ContentType}
と記載されていますが、これはほとんどの環境では以下のようになります。
https://manage.office.com/api/v1.0/{tenant_id}/activity/feed/subscriptions/start?contentType={ContentType}
これらAPIはすべて、OAuth2 アクセス トークンを取得して、HTTP ヘッダにAuthorization
を含める必要があります。トークンの取得方法は以下のドキュメントを参考にしてください。
ですので、API呼び出しの流れは、以下のようになります。
- OAuth2 アクセス トークンの取得
- サブスクリプションの開始 (
/subscriptions/start
) - 利用可能なコンテンツのリストの作成 (
/subscriptions/content
) - コンテンツの取得 (
/subscriptions/content
から返されるURL) - サブスクリプションの停止 (
/subscriptions/stop
)
サブスクリプションは、一度開始してしまえば停止する必要はないようです。また、サブスクリプションを開始後、停止しないまま再度サブスクリプション開始のエンドポイントを呼び出すとエラーになります。
サブスクリプションが開始されているかどうかは、/subscriptions/list
エンドポイントで確認が可能です。
最後に
記載の内容は、Microsoft 365 Developer Program の環境で確認しています。Microsoft社のドキュメントと動作が異なる箇所がいくつかありましたので、実際の開発では実際の動作を確認しながら行う必要があります。