Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Безопасность, соответствие требованиям и аудит являются главными приоритетами для ИТ-администраторов. Microsoft 365 предлагает ряд встроенных возможностей, которые помогут предприятиям контролировать безопасность, соответствие требованиям и аудиты. В частности, чтобы справиться с несоответствиями и нарушениями безопасности, вам поможет единое ведение журналов аудита. Получить журналы аудита можно следующими способами:
- API действий управления Office 365
- Средство поиска по журналам аудита на портале Microsoft Purview
- Командлет Search-UnifiedAuditLog в Exchange Online PowerShell
Если вам нужно регулярно получать журналы аудита, рассмотрите решение, использующее API действий управления Office 365. Он предоставляет крупным организациям масштабируемость и производительность для постоянного извлечения миллионов записей аудита. С помощью средства поиска по журналам аудита на портале Microsoft Purview можно быстро найти записи аудита для конкретных операций, выполняемых в более коротком диапазоне времени. При поиске в более широких временных рамках, особенно когда дело касается крупных организаций, средство поиска в журналах аудита может вернуть слишком много записей, что приведет к трудностям в их обработке и экспорте.
Если вам нужно вручную получить данные аудита для конкретного расследования или инцидента, особенно для более длинных диапазонов дат в крупных организациях, лучше всего использовать командлет Search-UnifiedAuditLog . В этой статье содержится скрипт PowerShell, использующий командлет . Скрипт может извлекать 50 000 записей аудита каждый раз при выполнении командлета, а затем экспортировать их в CSV-файл. Вы можете отформатировать файл с помощью Power Query в Excel, чтобы помочь с проверкой. Использование скрипта, описанного в этой статье, также сводит к минимуму вероятность истечения времени ожидания большого журнала аудита в службе.
Перед запуском сценария
Для успешного использования скрипта для возврата записей аудита в вашей организации должно быть включено ведение журнала аудита. По умолчанию ведение журналов аудита включено для организаций, использующих Microsoft 365 и Office 365 корпоративный. Чтобы убедиться, что поиск по журналам аудита включен для вашей организации, выполните следующую команду в Exchange Online PowerShell:
Get-AdminAuditLogConfig | FL UnifiedAuditLogIngestionEnabledЗначение
Trueдля свойства UnifiedAuditLogIngestionEnabled указывает на то, что поиск в журнале аудита включен.Для успешного запуска скрипта вам должна быть назначена роль Журналы аудита только для просмотра или Журналы аудита в Exchange Online. По умолчанию эти роли назначаются группам ролей Управление соответствием и Управление организацией на странице Разрешения в центре администрирования Exchange.
Выполнение скрипта может занять много времени. Время выполнения зависит от диапазона дат и длины интервала, в котором сценарий ищет записи аудита. Большие диапазоны дат и меньшие интервалы приводят к длительному выполнению. Чтобы узнать больше о диапазонах дат и интервалах, см. таблицу на этапе 2.
Пример сценария, приведенный в данной статье, не поддерживается ни одной из стандартных программ и служб технической поддержки Microsoft. Пример скрипта предоставляется как есть без каких-либо гарантий. Кроме того, корпорация Microsoft отказывается от всех подразумеваемых гарантий, включая в том числе все подразумеваемые гарантии пригодности для продажи или определенной цели. Все риски, возникающие в результате использования примера сценария и документации, берет на себя пользователь. Корпорация Microsoft, ее штатные авторы и другие лица, принимающие участие в создании, подготовке и выпуске сценария, ни при каких обстоятельствах не несут ответственности за какой-либо ущерб (в том числе ущерб, вызванный потерей доходов предприятия, остановкой его работы, потерей бизнес-данных и другими материальными потерями), вызванный использованием или невозможностью использования примера сценария и документации, даже если корпорации Microsoft известно о возможности нанесения такого ущерба.
Этап 1. Подключение к Exchange Online PowerShell
Сначала подключитесь к Exchange Online PowerShell. Подключение можно выполнить с помощью современной проверки подлинности или многофакторной проверки подлинности (MFA). Пошаговые инструкции см. в статье Подключение к Exchange Online с помощью удаленной оболочки PowerShell.
Этап 2. Изменение и запуск сценария для получения записей аудита
После подключения к Exchange Online PowerShell создайте, измените и запустите скрипт для получения данных аудита. Первые семь строк сценария поиска в журнале аудита содержат указанные ниже переменные, которые можно изменить для настройки поиска. Описание этих переменных см. в таблице на шаге 2.
Сохраните приведенный ниже текст в сценарии Windows PowerShell, используя суффикс .ps1 в имени файла. Например, SearchAuditLog.ps1.
#Modify the values for the following variables to configure the audit log search. $logFile = "d:\AuditLogSearch\AuditLogSearchLog.txt" $outputFile = "d:\AuditLogSearch\AuditLogRecords.csv" [DateTime]$start = [DateTime]::UtcNow.AddDays(-1) [DateTime]$end = [DateTime]::UtcNow $record = "AzureActiveDirectory" $resultSize = 5000 $intervalMinutes = 60 #Start script [DateTime]$currentStart = $start [DateTime]$currentEnd = $end Function Write-LogFile ([String]$Message) { $final = [DateTime]::Now.ToUniversalTime().ToString("s") + ":" + $Message $final | Out-File $logFile -Append } Write-LogFile "BEGIN: Retrieving audit records between $($start) and $($end), RecordType=$record, PageSize=$resultSize." Write-Host "Retrieving audit records for the date range between $($start) and $($end), RecordType=$record, ResultsSize=$resultSize" $totalCount = 0 while ($true) { $currentEnd = $currentStart.AddMinutes($intervalMinutes) if ($currentEnd -gt $end) { $currentEnd = $end } if ($currentStart -eq $currentEnd) { break } $sessionID = [Guid]::NewGuid().ToString() + "_" + "ExtractLogs" + (Get-Date).ToString("yyyyMMddHHmmssfff") Write-LogFile "INFO: Retrieving audit records for activities performed between $($currentStart) and $($currentEnd)" Write-Host "Retrieving audit records for activities performed between $($currentStart) and $($currentEnd)" $currentCount = 0 $sw = [Diagnostics.StopWatch]::StartNew() do { $results = Search-UnifiedAuditLog -StartDate $currentStart -EndDate $currentEnd -RecordType $record -SessionId $sessionID -SessionCommand ReturnLargeSet -ResultSize $resultSize if (($results | Measure-Object).Count -ne 0) { $results | export-csv -Path $outputFile -Append -NoTypeInformation $currentTotal = $results[0].ResultCount $totalCount += $results.Count $currentCount += $results.Count Write-LogFile "INFO: Retrieved $($currentCount) audit records out of the total $($currentTotal)" if ($currentTotal -eq $results[$results.Count - 1].ResultIndex) { $message = "INFO: Successfully retrieved $($currentTotal) audit records for the current time range. Moving on!" Write-LogFile $message Write-Host "Successfully retrieved $($currentTotal) audit records for the current time range. Moving on to the next interval." -foregroundColor Yellow "" break } } } while (($results | Measure-Object).Count -ne 0) $currentStart = $currentEnd } Write-LogFile "END: Retrieving audit records between $($start) and $($end), RecordType=$record, PageSize=$resultSize, total count: $totalCount." Write-Host "Script complete! Finished retrieving audit records for the date range between $($start) and $($end). Total count: $totalCount" -foregroundColor GreenДля настройки параметров поиска изменяйте переменные, приведенные в таблице ниже. Скрипт содержит примеры значений для этих переменных, но измените их (если не указано иное) в соответствии с конкретными требованиями.
| Переменная | Пример значения | Описание |
|---|---|---|
$logFile |
"d:\temp\AuditSearchLog.txt" | Определяет имя и расположение файла журнала с информацией о ходе поиска в журнале аудита, выполняемого сценарием. Сценарий записывает метки времени UTC в файл журнала. |
$outputFile |
"d:\temp\AuditRecords.csv" | Определяет имя и расположение CSV-файла, содержащего записи аудита, возвращаемые сценарием. |
[DateTime]$start и [DateTime]$end |
[DateTime]::UtcNow.AddDays(-1) [DateTime]::UtcNow |
Определяет диапазон дат для поиска в журнале аудита. Скрипт возвращает записи о действиях аудита, произошедших в указанном диапазоне дат. Например, чтобы вернуть действия, выполненные в январе 2021 г., можно указать дату начала "2021-01-01" и дату окончания "2021-01-31" (обязательно заключите значения в кавычки). Пример значения в сценарии возвращает записи действий, совершенных за последние 24 часа. Если в значении не указана метка времени, по умолчанию к выбранной дате применяется метка времени 24:00 (полночь). |
$record |
"AzureActiveDirectory" | Определяет тип записи действий аудита (также называемых операциями) для поиска. Это свойство означает службу или функцию, в которой было инициировано действие. Чтобы просмотреть список типов записей, которые можно использовать для этой переменной, см. Тип записи журнала аудита. Можно использовать имя типа записи или значение перечисления. Совет. Для возврата записей аудита всех типов используйте значение $null (без кавычек). |
$resultSize |
5000 | Определяет число результатов, возвращаемых каждый раз, когда сценарий вызывает командлет Search-UnifiedAuditLog (также называется результирующим набором). Максимальное значение, поддерживаемое командлетом, — 5000. Оставьте это значение без изменений. |
$intervalMinutes |
60 | Чтобы помочь преодолеть ограничение в 5000 возвращаемых записей, эта переменная принимает указанный диапазон данных и разбивает его на меньшие интервалы времени. После этого ограничение в 5000 записей применяется не ко всему диапазону, а к каждому из меньших интервалов. Значение по умолчанию, равное 5000 записей на 60-минутный интервал в диапазоне дат, должно быть достаточно для большинства организаций. Но если сценарий вернул ошибку maximum results limitation reached, то уменьшите интервал времени (например, до 30 или даже до 15 минут) и повторно запустите сценарий. |
Большинство переменных, перечисленных в предыдущей таблице, соответствует параметрам командлета Search-UnifiedAuditLog. Дополнительные сведения об этих параметрах см. в разделе Search-UnifiedAuditLog.
На локальном компьютере откройте Windows PowerShell и перейдите в папку, где сохранен измененный сценарий.
Запустите сценарий в Exchange Online PowerShell. Например:
.\SearchAuditLog.ps1
После запуска сценарий отображает сообщения о ходе выполнения. После завершения выполнения скрипт создает файл журнала и файл .csv, содержащий записи аудита, и сохраняет их в папках, определенных $logFile переменными и $outputFile .
Важно!
Существует ограничение в 50 000 для максимального количества записей аудита, возвращаемых при каждом запуске командлета в скрипте. Если вы запускаете этот скрипт и он возвращает 50 000 результатов, записи аудита для действий, произошедших в диапазоне дат, скорее всего, не были включены. В этом случае разделите диапазон дат на меньшие длительности, а затем повторно запустите скрипт для каждого диапазона дат. Например, если диапазон дат длительностью 90 дней содержит 50 000 результатов, то можно повторно запустить сценарий сначала для первых 45 дней, затем для последующих 45 дней.
Этап 3. Форматирование и просмотр записей аудита
После выполнения скрипта и экспорта записей аудита в файл .csv может потребоваться отформатировать .csv, чтобы упростить проверку и анализ записей аудита. Один из способов сделать это — использовать функцию преобразования POWER QUERY JSON в Excel, чтобы разделить каждое свойство в объекте JSON в столбце AuditData на собственный столбец. Пошаговые инструкции см. в пункте "Этап 2. Форматирование экспортированного журнала аудита с помощью редактора Power Query" в разделе Экспорт, настройка и просмотр записей журнала аудита.