ヘッダー画像

Office365監査ログの管理方法を検討する

はじめに

クラウドサービスを利用する際に、オンプレミス時代とは違った考慮が必要になります。その一つがログの保管です。Office365の監査ログは最大90日しか保管できません。(最近は契約プランでもう少し長いかも)

日本の一般的な企業でログ保管の期限というと大体5年~7年、長いところだと10年というのが多いと思ってます。ということで今回はログ保管の方法をご紹介します。

前提条件

Office365の監査ログはデフォルト無効になってますので、まずは有効化しましょう。セキュリティとコンプライアンスセンターからアクセス可能になっています。

Office365監査ログ

監査ログ保管で取れる方法

  • E5ライセンスを適用する
  • Microsoftが提供するツールを利用
  • 3rdパーティ製のログ管理ツールを利用
  • エクスポートしてどこかで保管

E5ライセンスを適用する

監査ログを90日以上保存するには、監査ログを生成したユーザに「Office 365 E5」 または「 Microsoft 365 E5」 ライセンスを割り当てるか、または 「Microsoft 365 E5 Compliance」 または 「E5 eDiscovery」 および監査アドオン ライセンスが必要になります。ヘルプ記事上は保存期間10年となっていますが、現在のところ1年しか保存できないようです。(2021年8月8日追記)

Microsoft Public Affiliate Program (JP)(マイクロソフトアフィリエイトプログラム)

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増分ごと)
2021年2月6日現在の価格

転送料金(従量課金)

容量料金
1GB374.08円
2021年2月6日現在の価格

データ保持料金

31日間は無料で保持されます。

容量料金
1GB16.80円/月
2021年2月6日現在の価格

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などの製品導入をご検討ください。