Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La seguridad, el cumplimiento y la auditoría son prioridades principales para los administradores de TI. Microsoft 365 cuenta con varias capacidades integradas para ayudar a las organizaciones a administrar la seguridad, el cumplimiento y la auditoría. En particular, un registro unificado de auditoría puede ayudarle a investigar incidentes de seguridad y problemas relacionados con el cumplimiento. Puede recuperar los registros de auditoría mediante los siguientes métodos:
- API de Actividad de administración de Office 365
- Herramienta de búsqueda de registros de auditoría en el portal de Microsoft Purview
- El cmdlet Search-UnifiedAuditLog en Exchange Online PowerShell
Si necesita recuperar periódicamente los registros de auditoría, considere la posibilidad de usar una solución que use la API de actividad de administración de Office 365. Proporciona a las organizaciones grandes la escalabilidad y el rendimiento para recuperar millones de registros de auditoría de forma continuada. El uso de la herramienta de búsqueda de registros de auditoría en el portal de Microsoft Purview es una buena manera de encontrar rápidamente registros de auditoría para operaciones específicas que se producen en un intervalo de tiempo más corto. Utilizar intervalos de tiempo mayores en la herramienta de búsqueda en el registro de auditoría, especialmente en el caso de grandes organizaciones, puede entregar un número de registros demasiado elevado como para poderlos administrar o exportar con facilidad.
Cuando necesite recuperar manualmente los datos de auditoría para una investigación o incidente específico, especialmente para intervalos de fechas más largos en organizaciones más grandes, el uso del cmdlet Search-UnifiedAuditLog podría ser la mejor opción. En este artículo se incluye un script de PowerShell que usa el cmdlet . El script puede recuperar 50 000 registros de auditoría cada vez que ejecute el cmdlet y luego exportarlos a un archivo CSV. Puede dar formato al archivo mediante Power Query en Excel para ayudarle con la revisión. El uso del script de este artículo también minimiza la posibilidad de que las búsquedas de registros de auditoría de gran tamaño agote el tiempo de espera en el servicio.
Antes de ejecutar el script:
El registro de auditoría debe estar habilitado para que la organización use correctamente el script para devolver registros de auditoría. El registro de auditoría está activado de forma predeterminada para organizaciones de Microsoft 365 y Office 365 Enterprise. Para comprobar que la búsqueda de registros de auditoría está activada para su organización, ejecute el siguiente comando en Exchange Online PowerShell:
Get-AdminAuditLogConfig | FL UnifiedAuditLogIngestionEnabledEl valor de
Truepara la propiedad UnifiedAuditLogIngestionEnabled indica que la búsqueda de registros de auditoría está activada.Debe tener asignado el rol Registros de auditoría de solo vista o Registros de auditoría en Exchange Online para ejecutar correctamente el script. De forma predeterminada, estos roles se asignan a los grupos de roles Administración de cumplimiento y Administración de la organización en la página Permisos del Centro de administración de Exchange.
El script puede tardar mucho tiempo en completarse. El tiempo que tarde en ejecutarse dependerá del intervalo de fechas y el tamaño del intervalo que establezca en la configuración del script para recuperar registros de auditoría. Los intervalos de fechas más grandes y los intervalos más pequeños dan como resultado un tiempo de ejecución largo. Consulte la tabla en el Paso 2 para más información sobre los intervalos de fechas.
El script de ejemplo que aparece en este artículo no es compatible con ningún programa o servicio de soporte técnico estándar de Microsoft. El script de ejemplo se proporciona tal cual sin garantía de ningún tipo. Además, Microsoft no se hace responsable de cualquier garantía implícita, incluyendo, de manera enunciativa pero no limitativa, cualquier garantía implícita de comercialización o de calidad para cualquier propósito. Cualquier riesgo resultante del uso o rendimiento del script y la documentación de ejemplo será únicamente responsabilidad suya. En ningún caso Microsoft, sus autores o cualquier persona involucrada en su creación, producción o entrega del script será responsable de cualquier daño (incluidos, de manera enunciativa pero no limitativa, daños por pérdidas de beneficios de una empresa, interrupción de la actividad de una empresa, pérdidas de información de una empresa, o cualquier otro daño pecuniario), incluso si Microsoft supiera de la posibilidad de tales daños.
Paso 1: Conectar con Exchange Online PowerShell
En primer lugar, conéctese a Exchange Online PowerShell. Puede conectarse mediante la autenticación moderna o la autenticación multifactor (MFA). Para obtener instrucciones, consulte Conexión a Exchange Online PowerShell.
Paso 2: modificar y ejecutar el script para recuperar registros de auditoría
Después de conectarse a Exchange Online PowerShell, cree, modifique y ejecute el script para recuperar los datos de auditoría. Las primeras siete líneas del script de búsqueda en el registro de auditoría contienen las siguientes variables que puede modificar para configurar la búsqueda. Consulte la tabla del paso 2 para obtener una descripción de dichas variables.
Guarde el siguiente texto en un script de Windows PowerShell mediante un sufijo de nombre de archivo de .ps1. Por ejemplo, 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 GreenModifique las variables que se enumeran en la siguiente tabla para configurar los criterios de búsqueda. El script incluye valores de ejemplo para estas variables, pero cámbielos (a menos que se indique lo contrario) para satisfacer sus requisitos específicos.
| Variable | Valor de ejemplo | Descripción |
|---|---|---|
$logFile |
"d:\temp\AuditSearchLog.txt" | Especifica el nombre y la ubicación del archivo de registro que contiene información sobre el progreso de la búsqueda en el registro de auditoría realizada por el script. El script escribe marcas de tiempo UTC en el archivo de registro. |
$outputFile |
"d:\temp\AuditRecords.csv" | Especifica el nombre y la ubicación del archivo CSV que contiene los registros de auditoría devueltos por el script. |
[DateTime]$start y [DateTime]$end |
[DateTime]::UtcNow.AddDays(-1) [DateTime]::UtcNow |
Especifica el intervalo de fechas para la búsqueda en el registro de auditoría. El script devuelve registros de las actividades de auditoría que se produjeron dentro del intervalo de fechas especificado. Por ejemplo, para entregar actividades realizadas en enero de 2021, puede utilizar una fecha de inicio de "2021-01-01" y una fecha de finalización de "2021-01-31" (asegúrese de escribir los valores entre comillas dobles) El valor de muestra del script entrega registros de actividades realizadas en las últimas 24 horas. Si no incluye una marca de tiempo en el valor, la marca de tiempo predeterminada es 12:00 AM (medianoche) en la fecha especificada. |
$record |
"AzureActiveDirectory" | Especifica el tipo de registro de las actividades de auditoría (también llamadas operaciones) para buscar. Esta propiedad indica el servicio o la característica en la que se desencadenó una actividad. Para obtener una lista de los tipos de registro que puede usar para esta variable, consulte Tipos de registro de auditoría. Puede utilizar el nombre de tipo de registro o valor ENUM. Sugerencia: Para obtener registros de auditoría para todos los tipos de registro, utilice el valor $null (sin usar comillas dobles). |
$resultSize |
5000 | Especifica el número de resultados entregados cada vez que el cmdlet Search-UnifiedAuditLog es llamado por el script (llamado conjunto de resultados). 5 000 es el valor máximo que admite el cmdlet. Deje este valor sin modificar. |
$intervalMinutes |
60 | Para ayudar a superar el límite de 5000 registros devueltos, esta variable toma el intervalo de datos especificado y lo segmenta en intervalos de tiempo más pequeños. Ahora, cada intervalo, y no el intervalo de fechas completo, está sujeto al límite del comando de 5000 resultados de registro. El valor predeterminado de 5000 registros por intervalo de 60 minutos dentro del intervalo de fechas debe ser suficiente para la mayoría de las organizaciones. Sin embargo, si el script devuelve un error que dice maximum results limitation reached, reduzca el intervalo de tiempo (por ejemplo, a 30 minutos o incluso a 15 minutos) y vuelva a ejecutar el script. |
La mayoría de las variables enumeradas en la tabla anterior se corresponden con parámetros para el cmdlet Search-UnifiedAuditLog. Para obtener más información acerca de estos parámetros, consulte Search-UnifiedAuditLog.
En su equipo local, abra Windows PowerShell y vaya a la carpeta en la que guardó el script modificado.
Ejecute el script en Exchange Online PowerShell, por ejemplo:
.\SearchAuditLog.ps1
El script muestra mensajes de progreso durante la ejecución. Una vez que el script termina de ejecutarse, crea el archivo de registro y el archivo de .csv que contiene los registros de auditoría y los guarda en las carpetas definidas por las $logFile variables y $outputFile .
Importante
Hay un límite de 50 000 para el número máximo de registros de auditoría devueltos cada vez que se ejecuta el cmdlet en el script. Si ejecuta este script y devuelve 50 000 resultados, es probable que no se incluyan los registros de auditoría de las actividades que se produjeron dentro del intervalo de fechas. Si esto ocurre, divida el intervalo de fechas en duraciones más pequeñas y, a continuación, vuelva a ejecutar el script para cada intervalo de fechas. Por ejemplo, si un intervalo de fechas de 90 días devuelve 50 000 resultados, puede volver a ejecutar el script dos veces; una vez para los primeros 45 días del intervalo de fechas y una segunda vez para los siguientes 45 días.
Paso 3: Dar formato y visualizar los registros de auditoría
Después de ejecutar el script y exportar los registros de auditoría a un archivo .csv, es posible que desee dar formato a la .csv para facilitar la revisión y el análisis de los registros de auditoría. Una manera de hacerlo es usar la característica de transformación JSON Power Query en Excel para dividir cada propiedad del objeto JSON de la columna AuditData en su propia columna. Para obtener instrucciones paso a paso, consulte «Paso 2: Dar formato al registro de auditoría exportado mediante el Editor de Power Query» en Exportar, configurar y ver los archivos de registros de auditoría.