Office365監査ログの管理方法を検討する
Powershell, 利活用, 監査, 監査ログ, 運用管理
目次
はじめに
クラウドサービスを利用する際に、オンプレミス時代とは違った考慮が必要になります。その一つがログの保管です。Office365の監査ログは最大90日しか保管できません。(最近は契約プランでもう少し長いかも)
日本の一般的な企業でログ保管の期限というと大体5年~7年、長いところだと10年というのが多いと思ってます。ということで今回はログ保管の方法をご紹介します。
前提条件
Office365の監査ログはデフォルト無効になってますので、まずは有効化しましょう。セキュリティとコンプライアンスセンターからアクセス可能になっています。
監査ログ保管で取れる方法
- E5ライセンスを適用する
- Microsoftが提供するツールを利用
- 3rdパーティ製のログ管理ツールを利用
- エクスポートしてどこかで保管
E5ライセンスを適用する
監査ログを90日以上保存するには、監査ログを生成したユーザに「Office 365 E5」 または「 Microsoft 365 E5」 ライセンスを割り当てるか、または 「Microsoft 365 E5 Compliance」 または 「E5 eDiscovery」 および監査アドオン ライセンスが必要になります。ヘルプ記事上は保存期間10年となっていますが、現在のところ1年しか保存できないようです。(2021年8月8日追記)
Microsoftが提供するツールを利用する場合
まずご紹介するのはLog Analyticsです。Log Analyticsを契約することでログ保存期間を増やすことができます。またログの分析などもできてなかなか便利である反面費用に跳ね返ってしまうのが現状です。統合ログ管理まで検討される場合はAzure Sentinelをご検討ください。この記事ではAzure Sentinelのご紹介しません。
転送料金(容量予約)
容量 | 料金 |
100GB/日 | 31,830.40円/日 |
200GB/日 | 59,763.20円/日 |
300GB/日 | 87,696円/日 |
400GB/日 | 114,329.60円/日 |
500GB/日 | 140,476円/日 |
超500GB/日 | 140,476円/日+28,095.20/日(100GB増分ごと) |
転送料金(従量課金)
容量 | 料金 |
1GB | 374.08円 |
データ保持料金
31日間は無料で保持されます。
容量 | 料金 |
1GB | 16.80円/月 |
3rdパーティ製のログ管理
製品のご紹介だけになってしまいますが、sumo LogicとかLog Storageがメジャーどころですかね。詳細な情報はいずれもメーカー様またはベンダー様にご確認ください。
エクスポートして保管する
ログエクスポートは大きく2つのやり方があります。1つ目は管理画面からGUIで操作してエクスポートする。2つ目はPowershellなどのCUIを使ってエクスポートする方法です。今回はPowershellを使ったエクスポートについてご紹介します。Powershellを使った各Office365機能への接続はこちらをご確認ください。
#初期設定 #出力するログを指定してください $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
の値を取得したいログに合わせて変更してください。$Convert | Select-Object CreationTime,UserId,ClientIP,Operation,SiteUrl,SourceFileName | Export-Csv $LogPath -Encoding Default -NoTypeInformation -Append
のSelect-Objectの値を出力したいカラムに調整してください。
レコードタイプの確認はこちらから
出力ログの確認はこちらから
まとめ
お金をかけずに始めてみるならPowershellで実装してみることをお勧めします。このPowershellで出力できるログのサイズは5万行までになります。1日で5万行以上のログが出力される場合は、実行頻度を増やすことで対応は可能ですが、そこまで行くと管理も大変になりますので、LogAnalyticsなどの製品導入をご検討ください。