はじめに
クラウドサービスを利用する際に、オンプレミス時代とは違った考慮が必要になります。その一つがログの保管です。
Microsoft365の監査ログは最大180日しか保管できません。Entra IDの認証ログは無料プランは7日、Premiumプランは30日の保管です。
日本の一般的な企業でログ保管の期限というと大体5年~7年、長いところだと10年というのが多いと思ってます。ということで今回はログ保管の方法をご紹介します。
前提条件
Microsoft365の監査ログはデフォルト無効になってますので、まずは有効化しましょう。コンプライアンスセンターからアクセス可能になっています。

監査ログ保管期間の延長方法
監査ログの保管期間を延ばすには以下の方法が考えられます。本記事では監査ログをエクスポートして管理する方法をご紹介します。
- Microsoft社が提供するオプションプランを契約
- 3rdパーティ製のログ管理ツールを契約
- エクスポートしてどこかで保管
Microsoft社が提供するオプションプランには、ログの保管をサポートするLog Analyticsです。ワークスペース内に最大2年間のログを保管可能です。またアーカイブ機能で最大12年までログを保管できます。
3rdパーティ製のログ管理ツールについては割愛させていただきます。
監査ログのエクスポート
ログエクスポートは大きく2つのやり方があります。1つ目は管理画面からGUIで操作してエクスポートする。2つ目はPowershellなどのCUIを使ってエクスポートする方法です。今回はPowershellを使ったエクスポートについてご紹介します。
#初期設定
#出力するログを指定してください
$RecordTypes =@("ExchangeAdmin",
"ExchangeItem",
"SharePoint",
"SharePointFileOperation",
"OneDrive",
"AzureActiveDirectory",
"AzureActiveDirectoryAccountLogon",
"MicrosoftTeams",
"MicrosoftTeamsAdmin",
"ApplicationAudit"
)
[DateTime]$StartDate = [DateTime]::UtcNow.AddDays(-2)
[DateTime]$EndDate = [DateTime]::UtcNow.AddDays(-1)
#環境に合わせて値を修正してください
$AuditLogPath = "C:\temp\"
$ErrorLogPath = "C:\temp\AuditLogExportErrorLog_" + (Get-Date -Format "yyyyMMdd") + ".csv"
$UserName = "管理者アカウント名"
$Passwd = "管理者パスワード"
$CvtPass = ConvertTo-SecureString $Passwd -AsPlainText -Force
#Exchange Onlineへの接続
$UserCredential = New-Object System.Management.Automation.PSCredential($UserName,$CvtPass)
Connect-ExchangeOnline -Credential $UserCredential
#ログ出力処理
foreach($RecordType in $RecordTypes){
$Output = 1
$LogPath = $AuditLogPath + $RecordType + "_" + (Get-Date -Format "yyyyMMdd") + ".csv"
While($Output){
try{
$Output = Search-UnifiedAuditLog -StartDate $StartDate -EndDate $EndDate -SessionId $RecordType -SessionCommand ReturnLargeSet -RecordType $RecordType -ErrorAction stop
$Convert = $Output | Select-Object -ExpandProperty AuditData | ConvertFrom-Json
$Convert | Select-Object CreationTime,UserId,ClientIP,Operation,SiteUrl,SourceFileName | Export-Csv $LogPath -Encoding Default -NoTypeInformation -Append
}catch{
"[ERR]," + (Get-Date) + ",ログ取得処理に失敗しました。" + $RecordType + "は不完全な可能性があります。," + $Error[0] | Out-File $ErrorLogPath -Append
continue
}
}
}
2日前の監査ログが1日分出力されるはずです。このプログラムをWindowsのタスクスケジューラーで毎日実行タスクとして指定することで、ログのエクスポート・保管が可能になります。
$RecordTypes値を取得したいログに合わせて変更してください。レコードタイプの確認はこちらから可能です。
まとめ
お金をかけずに始めてみるならPowershellで実装してみることをお勧めします。このPowershellで出力できるログのサイズは5万行までになります。1日で5万行以上のログが出力される場合は、実行頻度を増やすことで対応は可能ですが、そこまで行くと管理も大変になりますので、LogAnalyticsなどの製品導入をご検討ください。
