はじめに
クラウドサービスを利用する際に、オンプレミス時代とは違った考慮が必要になります。その一つがログの保管です。
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などの製品導入をご検討ください。