Microsoft365監査ログの管理

目次

はじめに

クラウドサービスを利用する際に、オンプレミス時代とは違った考慮が必要になります。その一つがログの保管です。

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

目次