Recopila registros de acceso de Microsoft Entra ID (anteriormente Azure Active Directory)
Versión del analizador: 26.0
En este documento, se explica cómo recopilar registros de acceso de Microsoft Entra ID (antes conocido como Azure Active Directory) configurando un feed de Google Security Operations. Puedes configurar la transferencia con dos métodos: Azure Event Hub (recomendado) o la API de terceros.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Es la instancia de Google SecOps.
- Acceso con privilegios al portal de Microsoft Azure
- Rol de administrador de seguridad o administrador global en Microsoft Entra ID (obligatorio para la configuración de diagnóstico)
- Para el método de la API de terceros, uno de los siguientes roles para otorgar consentimiento del administrador:
- Administrador global: Puede otorgar consentimiento para cualquier permiso y para cualquier API.
- Administrador de roles con privilegios: Puede otorgar consentimiento para cualquier permiso y para cualquier API.
- Administrador de aplicaciones en la nube: Puede otorgar consentimiento para cualquier permiso de cualquier API, excepto los roles de la app de Microsoft Graph (permisos de la aplicación).
Método 1: Azure Event Hub (recomendado)
Este método transmite los registros de acceso de Microsoft Entra ID a través de Azure Event Hub con la configuración de diagnóstico. Google SecOps ingiere los registros directamente desde el Centro de eventos con el tipo de feed de Centro de eventos de Azure.
Crea un espacio de nombres de Event Hub
Un espacio de nombres de Event Hubs es un contenedor de administración para uno o más Event Hubs.
- En el portal de Azure, busca Event Hubs.
- Haz clic en + Crear.
Proporciona los siguientes detalles de configuración:
Parámetro de configuración Valor Suscripción Selecciona tu suscripción a Azure Grupo de recursos Selecciona una existente o crea una nueva Nombre del espacio de nombres Ingresa un nombre único (por ejemplo, secops-entraid-signin).Ubicación Selecciona la región más cercana a tu inquilino de Microsoft Entra Nivel de precios Estándar (recomendado para producción) Unidades de capacidad de procesamiento Comienza con 1, habilita la opción Inflado automático (recomendado) Haz clic en Revisar + crear.
Revisa el resumen y haz clic en Crear.
Espera a que se complete la implementación (de 1 a 2 minutos).
Crea un centro de eventos
- Después de implementar el espacio de nombres, ve al espacio de nombres de Event Hub.
- En el panel de navegación izquierdo, selecciona Event Hubs en Entidades.
- Haz clic en + Event Hub.
Proporciona los siguientes detalles de configuración:
Parámetro de configuración Valor Nombre Ingresa un nombre único (por ejemplo, entraid-signin-logs).Recuento de particiones 40 (recomendado para un escalamiento óptimo de Google SecOps) Retención de mensajes 7 días (mínimo recomendado) Capturar Inhabilitado (no es necesario para Google SecOps) Haz clic en Crear.
Obtén la cadena de conexión de Event Hub
Google SecOps requiere una cadena de conexión para autenticarse en Event Hub.
Opción A: Cadena de conexión a nivel del espacio de nombres (recomendada)
- Ve al espacio de nombres de Event Hub.
- En el panel de navegación izquierdo, selecciona Políticas de acceso compartido en Configuración.
- Haz clic en la política predeterminada RootManageSharedAccessKey.
- Copia la cadena de conexión (clave principal).
- Guarda esta cadena de conexión de forma segura.
Ejemplo:
Original: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==;EntityPath=entraid-signin-logs Remove EntityPath: Endpoint=sb://secops-entraid-signin.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=abc123==
Opción B: Cadena de conexión a nivel del centro de eventos
- Ve a Event Hub (no al espacio de nombres).
- En el panel de navegación izquierdo, selecciona Políticas de acceso compartido en Configuración.
- Haz clic en + Agregar para crear una política nueva.
- Proporciona los siguientes detalles de configuración:
- Nombre de la política: Ingresa un nombre descriptivo (por ejemplo,
chronicle-read). - Permisos: Selecciona Solo Escuchar (acceso de solo lectura).
- Nombre de la política: Ingresa un nombre descriptivo (por ejemplo,
- Haz clic en Crear.
- Haz clic en la política recién creada.
- Copia la cadena de conexión (clave principal).
Guarda esta cadena de conexión de forma segura.
Configura los parámetros de configuración de diagnóstico de Microsoft Entra ID
- Accede al centro de administración de Microsoft Entra como, al menos, administrador de seguridad.
- Ve a Entra ID > Supervisión y estado > Configuración de diagnóstico.
- Haz clic en + Agregar parámetro de configuración de diagnóstico.
- Proporciona los siguientes detalles de configuración:
- Nombre del parámetro de configuración de diagnóstico: Ingresa un nombre descriptivo (por ejemplo,
signin-logs-to-eventhub). - En la sección Registros, selecciona las categorías de registros de acceso que deseas exportar:
- SignInLogs: Son los accesos interactivos de los usuarios.
- NonInteractiveUserSignInLogs: Registros de acceso de usuarios no interactivos (recomendado).
- ServicePrincipalSignInLogs: Registros de acceso de la entidad de servicio (opcional).
- ManagedIdentitySignInLogs: Registros de acceso de identidades administradas (opcional)
- ADFSSignInLogs: Registros de inicio de sesión de AD FS (opcional, si se usa AD FS).
- RiskyUsers: Usuarios marcados como riesgosos por Microsoft Entra ID Protection (opcional).
- UserRiskEvents: Detalles del evento de acceso riesgoso (opcional).
- En la sección Detalles del destino, selecciona Transmitir a un centro de eventos.
- Suscripción: Selecciona la suscripción que contiene tu espacio de nombres de Event Hub.
- Espacio de nombres de Event Hub: Selecciona el espacio de nombres que creaste (por ejemplo,
secops-entraid-signin). - Nombre del centro de eventos: Selecciona el centro de eventos que creaste (por ejemplo,
entraid-signin-logs). - Nombre de la política del centro de eventos: Selecciona RootManageSharedAccessKey.
- Nombre del parámetro de configuración de diagnóstico: Ingresa un nombre descriptivo (por ejemplo,
Haz clic en Guardar.
(Opcional) Configura Azure Blob Storage para la creación de puntos de control
Google SecOps puede usar Azure Blob Storage para almacenar puntos de control de Event Hub, que registran qué eventos se procesaron. Esto evita la duplicación de la transferencia si el feed se interrumpe temporalmente.
Crea una cuenta de almacenamiento para los puntos de control
- En el portal de Azure, busca Cuentas de almacenamiento.
- Haz clic en + Crear.
Proporciona los siguientes detalles de configuración:
Parámetro de configuración Valor Suscripción Selecciona tu suscripción a Azure Grupo de recursos Usa el mismo grupo de recursos que Event Hub Nombre de la cuenta de almacenamiento Ingresa un nombre único (por ejemplo, secopsaadsignin).Región La misma región que Event Hub Rendimiento Estándar Redundancia LRS (almacenamiento con redundancia local) Haz clic en Revisar + crear.
Haz clic en Crear.
Crea un contenedor de BLOB
- Ve a la cuenta de almacenamiento que creaste.
- En el panel de navegación de la izquierda, selecciona Contenedores en Almacenamiento de datos.
- Haz clic en + Contenedor.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
checkpoints. - Nivel de acceso público: Privado (sin acceso anónimo)
- Nombre: Ingresa
- Haz clic en Crear.
Obtén credenciales de la cuenta de almacenamiento
- En la cuenta de almacenamiento, selecciona Claves de acceso en Seguridad y redes.
- Haz clic en Mostrar claves.
- Copia y guarda lo siguiente:
- Nombre de la cuenta de almacenamiento: Es el nombre de tu cuenta de almacenamiento.
- Clave 1: Es el valor de la clave de acceso.
(Opcional) Crea un grupo de consumidores exclusivo
De forma predeterminada, Event Hub proporciona un grupo de consumidores llamado $Default. Para los entornos de producción, se recomienda crear un grupo de consumidores exclusivo para Google SecOps.
- Ve a Event Hub (no al espacio de nombres).
- En la navegación de la izquierda, selecciona Grupos de consumidores en Entidades.
- Haz clic en + Grupo de consumidores.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
chronicle).
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
Haz clic en Crear.
Configura un feed en Google SecOps para transferir registros de acceso de Microsoft Entra ID
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
Microsoft Entra ID Sign-In Logs - Event Hub). - Selecciona Microsoft Azure Event Hub como el Tipo de fuente.
- Selecciona Microsoft Azure AD como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- Cadena de conexión del centro de eventos: Ingresa la cadena de conexión del centro de eventos que capturaste anteriormente.
Si usas una cadena de conexión a nivel del espacio de nombres, haz lo siguiente:
- Asegúrate de haber quitado el parámetro
EntityPath. - También debes proporcionar el Nombre del centro de eventos en el siguiente campo.
Si usas la cadena de conexión a nivel del centro de eventos, haz lo siguiente:
- Usa la cadena de conexión tal como está (incluye
EntityPath). El campo Nombre del centro de eventos se puede dejar en blanco.
- Nombre del centro de eventos: Ingresa el nombre del centro de eventos (por ejemplo,
entraid-signin-logs).
Obligatorio si se usa una cadena de conexión a nivel del espacio de nombres. Opcional si se usa una cadena de conexión a nivel del centro de eventos.
- Nombre del centro de eventos: Ingresa el nombre del centro de eventos (por ejemplo,
Grupo de consumidores (opcional): Ingresa el nombre del grupo de consumidores.
Déjalo en blanco para usar el grupo de consumidores
$Defaultpredeterminado.Si creaste un grupo de consumidores exclusivo, ingresa su nombre (por ejemplo,
chronicle).Nombre del contenedor de Blob Storage (opcional): Para crear puntos de control, ingresa el nombre del contenedor (por ejemplo,
checkpoints).
Si proporcionas almacenamiento de blobs para la creación de puntos de control, haz lo siguiente:
- Nombre de la cuenta de almacenamiento de Azure: Ingresa el nombre de la cuenta de almacenamiento de la configuración de puntos de control.
Clave de la cuenta de almacenamiento de Azure: Ingresa la clave de acceso de la configuración de puntos de control.
Espacio de nombres del recurso: Es el espacio de nombres del recurso.
Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
Haz clic en Siguiente.
Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Método 2: API de terceros
Este método usa la API de Microsoft Graph para recuperar los registros de inicio de sesión de Microsoft Entra ID directamente desde tu inquilino de Microsoft.
Configura la lista de IPs permitidas
Antes de crear el feed, debes incluir en la lista de entidades permitidas los rangos de IP de Google SecOps en la configuración de red de Microsoft Azure o en las políticas de acceso condicional.
Obtén los rangos de IP de Google SecOps
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- Toma nota de los rangos de IP que se muestran en la interfaz de creación de feeds.
- Como alternativa, puedes recuperar rangos de IP de manera programática con la API de Feed Management.
Configura el acceso condicional para las identidades de cargas de trabajo (si es necesario)
Si tu organización usa políticas de Acceso condicional que restringen el acceso por ubicación, haz lo siguiente:
- En el centro de administración de Microsoft Entra, ve a Protección > Acceso condicional > Ubicaciones con nombre.
- Haz clic en + Nueva ubicación.
- Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa
Google SecOps IP Ranges. - Marcar como ubicación de confianza: Es opcional y depende de tu política de seguridad.
- Rangos de IP: Agrega cada rango de IP de Google SecOps en notación CIDR.
- Nombre: Ingresa
- Haz clic en Crear.
- Ve a Acceso condicional > Políticas.
- Para cualquier política que se aplique a las identidades de carga de trabajo, configura una exclusión para la ubicación con nombre
Google SecOps IP Rangeso la entidad de servicio específica.
Configura el acceso a la API de Microsoft Entra ID
Crea el registro de la app
- Accede al centro de administración de Microsoft Entra o al portal de Azure.
- Ve a Identidad > Aplicaciones > Registros de apps.
- Haz clic en New registration.
Proporciona los siguientes detalles de configuración:
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
Google SecOps Sign-In Logs Integration). - Tipos de cuentas compatibles: Selecciona Cuentas solo en este directorio de la organización (inquilino único).
- URI de redireccionamiento: Déjalo en blanco (no es necesario para la autenticación de la entidad de servicio).
- Nombre: Ingresa un nombre descriptivo (por ejemplo,
Haz clic en Registrar.
Después del registro, copia y guarda los siguientes valores:
- ID de la aplicación (cliente)
- ID de directorio (usuario)
Configura los permisos de API
La integración requiere los siguientes permisos de la aplicación de Microsoft Graph:
- En el registro de la app, ve a Permisos de API.
- Haz clic en Agregar un permiso.
- Selecciona Microsoft Graph > Permisos de aplicación.
- Selecciona los siguientes permisos:
- AuditLog.Read.All: Se requiere para leer los registros de acceso.
- Directory.Read.All: La API de Microsoft Graph lo requiere para acceder a los registros de acceso (problema conocido).
- SecurityEvents.Read.All: Google Security Operations lo requiere.
- Haz clic en Agregar permisos.
- Haz clic en Grant admin consent for [Your Organization].
- Verifica que la columna Estado muestre Se otorgó para [Tu organización] para los tres permisos.
| Permiso | Tipo | Descripción |
|---|---|---|
| AuditLog.Read.All | Aplicación | Leer todos los datos de acceso y de registro de auditoría |
| Directory.Read.All | Aplicación | Leer datos de directorios (obligatorio para el acceso a la API) |
| SecurityEvents.Read.All | Aplicación | Leer eventos de seguridad |
Crea un secreto del cliente
- Ve a Certificates & secrets.
- Haz clic en New client secret.
Proporciona los siguientes detalles de configuración:
- Descripción: Ingresa un nombre descriptivo (por ejemplo,
Google SecOps Feed). - Vence: Selecciona un período de vencimiento.
- Descripción: Ingresa un nombre descriptivo (por ejemplo,
Haz clic en Agregar.
Importante: Copia el valor del secreto del cliente de inmediato. Este valor se muestra solo una vez y no se puede recuperar más adelante.
Verifica el acceso a la API antes de crear el feed
Antes de crear el feed de Google SecOps, verifica que la entidad de servicio pueda autenticarse y acceder a la API de Microsoft Graph correctamente.
Prueba la autenticación con PowerShell
# Replace with your actual values $tenantId = "your-tenant-id" $clientId = "your-client-id" $clientSecret = "your-client-secret" # Token request parameters (must be lowercase) $tokenBody = @{ grant_type = "client_credentials" client_id = $clientId client_secret = $clientSecret scope = "https://graph.microsoft.com/.default" } # Request access token $tokenEndpoint = "https://login.microsoftonline.com/$tenantId/oauth2/v2.0/token" $tokenResponse = Invoke-RestMethod -Method Post -Uri $tokenEndpoint -Body $tokenBody -ContentType "application/x-www-form-urlencoded" if ($tokenResponse.access_token) { Write-Host "✓ Successfully obtained access token" -ForegroundColor Green # Test API call to sign-ins endpoint $apiUrl = "https://graph.microsoft.com/v1.0/auditLogs/signIns?`$top=1" $headers = @{ Authorization = "Bearer $($tokenResponse.access_token)" } try { $signInResponse = Invoke-RestMethod -Method Get -Uri $apiUrl -Headers $headers Write-Host "✓ Successfully accessed sign-ins API" -ForegroundColor Green Write-Host "Sample sign-in log retrieved successfully" -ForegroundColor Green } catch { Write-Host "✗ Failed to access sign-ins API" -ForegroundColor Red Write-Host "Error: $($_.Exception.Message)" -ForegroundColor Red } } else { Write-Host "✗ Failed to obtain access token" -ForegroundColor Red }Resultado esperado:
✓ Successfully obtained access token ✓ Successfully accessed sign-ins API Sample sign-in log retrieved successfully
Prueba la autenticación con curl
# Replace with your actual values TENANT_ID="your-tenant-id" CLIENT_ID="your-client-id" CLIENT_SECRET="your-client-secret" # Request access token curl -X POST "https://login.microsoftonline.com/$TENANT_ID/oauth2/v2.0/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials" \ -d "client_id=$CLIENT_ID" \ -d "client_secret=$CLIENT_SECRET" \ -d "scope=https://graph.microsoft.com/.default" # Test API access curl -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ "https://graph.microsoft.com/v1.0/auditLogs/signIns?\$top=1"
Configura un feed en Google SecOps para transferir registros de acceso de Microsoft Entra ID
Configura el feed
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo,
Microsoft Entra ID Sign-In Logs). - Selecciona API de terceros como el Tipo de origen.
- Selecciona Microsoft Azure AD como el Tipo de registro.
- Haz clic en Siguiente.
Configura los parámetros del feed
Especifica valores para los siguientes parámetros de entrada:
- ID de cliente de OAuth: Es el ID de la aplicación (cliente) del registro de la app.
- Secreto del cliente de OAuth: Es el valor del secreto del cliente que copiaste antes.
- ID de usuario: Es tu ID de usuario de Microsoft del registro de la app (formato UUID, por ejemplo,
0fc279f9-fe30-41be-97d3-abe1d7681418). Ruta de acceso completa de la API: URL del extremo de API de REST de Microsoft Graph:
graph.microsoft.com/v1.0/auditLogs/signInsExtremo de autenticación de la API: Extremo de autenticación de Microsoft Active Directory:
login.microsoftonline.comOpciones avanzadas:
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Tipo de fuente: API de terceros (mecanismo para recopilar los registros en Google SecOps).
- Espacio de nombres del activo: Es el espacio de nombres del activo con el que se asociará el feed.
- Etiquetas de transferencia: Se agregarán etiquetas a todos los eventos de este feed.
- Haz clic en Siguiente.
Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Extremos regionales
Para las implementaciones de Microsoft Entra ID en nubes soberanas, usa los extremos regionales adecuados:
| Entorno de nube | Ruta de acceso completa de la API | Extremo de autenticación de API |
|---|---|---|
| Global | graph.microsoft.com/v1.0/auditLogs/signIns |
login.microsoftonline.com |
| L4 del Gobierno de EE.UU. | graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| Gobierno de EE.UU., nivel 5 (DoD) | dod-graph.microsoft.us/v1.0/auditLogs/signIns |
login.microsoftonline.us |
| China (21Vianet) | microsoftgraph.chinacloudapi.cn/v1.0/auditLogs/signIns |
login.chinacloudapi.cn |
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Lógica |
|---|---|---|
activityDateTime |
principal.event_timestamp |
Se analizó a partir del campo activityDateTime. Si el campo no está en el formato esperado "aaaa-MM-ddTHH:mm:ss.SSSZ" o "ISO8601", el analizador intentará otros formatos, como "MM/dd/aaaa HH:mm:ss A" o "MM/d/aaaa HH:mm:ss A". |
activityDisplayName |
security_result.summary |
Se asigna directamente desde activityDisplayName. |
additionalDetails.0.value |
network.http.user_agent |
Se asigna directamente desde additionalDetails.0.value. |
additionalDetails.1.key |
target.resource.attribute.labels.key |
Se asigna directamente desde additionalDetails.1.key. |
additionalDetails.1.value |
target.resource.attribute.labels.value |
Se asigna directamente desde additionalDetails.1.value. |
additionalInfo.[].Key |
network.http.user_agent, target.url |
Si Key es userAgent, asigna Value a network.http.user_agent y network.http.parsed_user_agent. Si Key es alertUrl, asigna Value a target.url. |
additionalInfo.[].Value |
network.http.user_agent, target.url |
Si Key es userAgent, asigna Value a network.http.user_agent y network.http.parsed_user_agent. Si Key es alertUrl, asigna Value a target.url. |
am_category |
metadata.description |
Se asigna directamente desde am_category. |
am_tenantId |
metadata.product_deployment_id |
Se asigna directamente desde am_tenantId. |
appId |
target.resource.attribute.labels.value |
Se asigna directamente desde appId con la clave de etiqueta como "ID de la app". |
appDisplayName |
target.application |
Se asigna directamente desde appDisplayName. |
appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name, about.[].user.user_display_name |
Se asigna directamente desde appliedConditionalAccessPolicies.[].displayName. |
appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
Se asigna directamente desde appliedConditionalAccessPolicies.[].enforcedGrantControls con la clave de etiqueta "applied_conditional_access_policies_enforced_grant_controls". |
appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
Se asigna directamente desde appliedConditionalAccessPolicies.[].enforcedSessionControls con la clave de etiqueta "applied_conditional_access_policies_enforced_session_controls". |
appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id, about.[].user.userid |
Se asigna directamente desde appliedConditionalAccessPolicies.[].id. |
appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value, about.[].labels.value |
Se asigna directamente desde appliedConditionalAccessPolicies.[].result con la clave de la etiqueta como "Resultado". |
authenticationDetails.[].authenticationMethod |
security_result.[].detection_fields.value |
Se asigna directamente desde authenticationDetails.[].authenticationMethod con la clave de etiqueta "authenticationMethod". |
authenticationDetails.[].authenticationMethodDetail |
security_result.[].detection_fields.value |
Se asigna directamente desde authenticationDetails.[].authenticationMethodDetail con la clave de etiqueta "authenticationMethodDetail". |
authenticationDetails.[].authenticationStepDateTime |
security_result.[].detection_fields.value |
Se asigna directamente desde authenticationDetails.[].authenticationStepDateTime con la clave de etiqueta como "authenticationStepDateTime". |
authenticationDetails.[].authenticationStepRequirement |
security_result.[].detection_fields.value |
Se asigna directamente desde authenticationDetails.[].authenticationStepRequirement con la clave de etiqueta como "authenticationStepRequirement". |
authenticationDetails.[].authenticationStepResultDetail |
security_result.[].detection_fields.value |
Se asigna directamente desde authenticationDetails.[].authenticationStepResultDetail con la clave de etiqueta como "authenticationStepResultDetail". |
authenticationDetails.[].succeeded |
security_result.action |
Si el valor es "true", se devuelve ALLOW; de lo contrario, se devuelve BLOCK. |
authenticationRequirement |
additional.fields.value.string_value |
Se asigna directamente desde authenticationRequirement con la clave de etiqueta como "AuthenticationRequirement". |
authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Se asigna directamente desde authenticationRequirementPolicies.[].detail con la clave de etiqueta como "detail". |
authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Se asigna directamente desde authenticationRequirementPolicies.[].requirementProvider con la clave de etiqueta como "requirementProvider". |
callerIpAddress |
principal.ip, principal.asset.ip |
Se asigna directamente desde callerIpAddress. |
category |
metadata.description |
Se asigna directamente desde category. |
clientAppUsed |
principal.application |
Se asigna directamente desde clientAppUsed. |
conditionalAccessStatus |
additional.fields.value.string_value |
Se asigna directamente desde conditionalAccessStatus con la clave de etiqueta "conditionalAccessStatus". |
correlationId |
network.session_id, security_result.detection_fields.value |
Se asigna directamente desde correlationId. También se usa como security_result.detection_fields.value con la clave de etiqueta como "CorrelationId". |
createdDateTime |
when |
El campo when se deriva del campo createdDateTime. La fecha y la hora se extraen del campo createdDateTime con grok y, luego, se combinan para formar el campo when. |
deviceDetail.browser |
network.http.user_agent |
Se asigna directamente desde deviceDetail.browser. |
deviceDetail.deviceId |
principal.asset.asset_id, principal.asset_id |
Se asigna directamente desde deviceDetail.deviceId y tiene el prefijo "ID de dispositivo:". |
deviceDetail.displayName |
principal.asset.hostname |
Se asigna directamente desde deviceDetail.displayName. |
deviceDetail.isCompliant |
principal.asset.attribute.labels.value |
Se asigna directamente desde deviceDetail.isCompliant con la clave de etiqueta como "isCompliant". |
deviceDetail.isManaged |
principal.asset.attribute.labels.value |
Se asigna directamente desde deviceDetail.isManaged con la clave de etiqueta "isManaged". |
deviceDetail.operatingSystem |
principal.platform_version |
Se asigna directamente desde deviceDetail.operatingSystem. |
deviceDetail.trustType |
principal.asset.attribute.labels.value |
Se asigna directamente desde deviceDetail.trustType con la clave de etiqueta como "trustType". |
durationMs |
additional.fields.value.string_value |
Se asigna directamente desde durationMs con la clave de etiqueta como "durationMs". |
event.id |
- | No se asignó según las instrucciones (punto 3). |
id |
metadata.product_log_id |
Se asigna directamente desde id. |
identity |
target.user.user_display_name |
Se asigna directamente desde identity si es diferente de userId y no es una dirección de correo electrónico. |
initiatedBy.user.displayName |
principal.user.user_display_name |
Se asigna directamente desde initiatedBy.user.displayName. |
initiatedBy.user.id |
principal.user.userid, principal.user.windows_sid |
Se asigna directamente desde initiatedBy.user.id. |
initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
Se asigna directamente desde initiatedBy.user.ipAddress. |
initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
Se asigna directamente desde initiatedBy.user.userPrincipalName. Si es una dirección de correo electrónico, se asigna a email_addresses; de lo contrario, a userid. |
Level |
security_result.severity_details, level |
Se asigna directamente desde Level. |
level |
security_result.severity_details, security_result.severity |
Se asigna directamente desde level. También se asigna a security_result.severity después de convertirse a mayúsculas. Control especial para los valores "Information", "Informational", "0", "4", "Warning", "1", "3", "Error", "2" y "Critical". |
location.city |
principal.location.city |
Se asigna directamente desde location.city. |
location.countryOrRegion |
principal.location.country_or_region |
Se asigna directamente desde location.countryOrRegion. |
location.geoCoordinates.altitude |
additional.fields.value.string_value |
Se asigna directamente desde location.geoCoordinates.altitude con la clave de etiqueta "location_geoCoordinates_altitude". |
location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
Se asigna directamente desde location.geoCoordinates.latitude. |
location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
Se asigna directamente desde location.geoCoordinates.longitude. |
location.state |
principal.location.state |
Se asigna directamente desde location.state. |
location |
principal.location.name |
Se asigna directamente desde location. |
log_type |
metadata.log_type |
Se asigna directamente desde log_type. |
networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
Valores concatenados de networkLocationDetails.[].networkNames con la clave de etiqueta como "networkName {index}". |
networkLocationDetails.[].networkType |
security_result.detection_fields.value, additional.fields.value.string_value |
Se asigna directamente desde networkLocationDetails.[].networkType con la clave de etiqueta "networkType". También se usa como additional.fields.value.string_value con la clave de la etiqueta como "networkType {index}". |
operationName |
event_type |
Si operationName es "Actividad de acceso", entonces USER_LOGIN. Si operationName es "Agregar miembro al grupo", entonces USER_CHANGE_PERMISSIONS. |
operationType |
security_result.action_details |
Se asigna directamente desde operationType. |
properties.activity |
security_result.summary |
Se asigna directamente desde properties.activity. |
properties.activityDateTime |
when |
Se analizó a partir del campo properties.activityDateTime. Si el campo no está en el formato esperado "aaaa-MM-ddTHH:mm:ss.SSSZ" o "ISO8601", el analizador intentará otros formatos, como "MM/dd/aaaa HH:mm:ss A" o "MM/d/aaaa HH:mm:ss A". |
properties.activityDisplayName |
security_result.summary |
Se asigna directamente desde properties.activityDisplayName. |
properties.additionalInfo |
network.http.user_agent, target.url |
Se analiza como JSON y, si la clave es userAgent, se asigna el valor a network.http.user_agent y network.http.parsed_user_agent. Si la clave es alertUrl, asigna el valor del mapa a target.url. |
properties.appliedConditionalAccessPolicies.[].displayName |
security_result.[].rule_name |
Se asigna directamente desde properties.appliedConditionalAccessPolicies.[].displayName. |
properties.appliedConditionalAccessPolicies.[].enforcedGrantControls |
security_result.[].rule_labels.value |
Se asigna directamente desde properties.appliedConditionalAccessPolicies.[].enforcedGrantControls con la clave de etiqueta "applied_conditional_access_policies_enforced_grant_controls". |
properties.appliedConditionalAccessPolicies.[].enforcedSessionControls |
security_result.[].rule_labels.value |
Se asigna directamente desde properties.appliedConditionalAccessPolicies.[].enforcedSessionControls con la clave de etiqueta "applied_conditional_access_policies_enforced_session_controls". |
properties.appliedConditionalAccessPolicies.[].id |
security_result.[].rule_id |
Se asigna directamente desde properties.appliedConditionalAccessPolicies.[].id. |
properties.appliedConditionalAccessPolicies.[].result |
security_result.[].detection_fields.value |
Se asigna directamente desde properties.appliedConditionalAccessPolicies.[].result con la clave de la etiqueta como "Resultado". |
properties.appId |
appId |
Se asigna directamente desde properties.appId. |
properties.appDisplayName |
target.application |
Se asigna directamente desde properties.appDisplayName. |
properties.authenticationDetails.[].authenticationMethod |
security_result.detection_fields.value |
Se asigna directamente desde properties.authenticationDetails.[].authenticationMethod con la clave de etiqueta "authenticationMethod". |
properties.authenticationDetails.[].authenticationMethodDetail |
security_result.detection_fields.value |
Se asigna directamente desde properties.authenticationDetails.[].authenticationMethodDetail con la clave de etiqueta "authenticationMethodDetail". |
properties.authenticationDetails.[].authenticationStepDateTime |
security_result.detection_fields.value |
Se asigna directamente desde properties.authenticationDetails.[].authenticationStepDateTime con la clave de etiqueta como "authenticationStepDateTime". |
properties.authenticationDetails.[].authenticationStepRequirement |
security_result.detection_fields.value |
Se asigna directamente desde properties.authenticationDetails.[].authenticationStepRequirement con la clave de etiqueta como "authenticationStepRequirement". |
properties.authenticationDetails.[].authenticationStepResultDetail |
security_result.detection_fields.value |
Se asigna directamente desde properties.authenticationDetails.[].authenticationStepResultDetail con la clave de etiqueta como "authenticationStepResultDetail". |
properties.authenticationRequirement |
additional.fields.value.string_value |
Se asigna directamente desde properties.authenticationRequirement con la clave de etiqueta como "AuthenticationRequirement". |
properties.authenticationRequirementPolicies.[].detail |
security_result.detection_fields.value |
Se asigna directamente desde properties.authenticationRequirementPolicies.[].detail con la clave de etiqueta como "detail". |
properties.authenticationRequirementPolicies.[].requirementProvider |
security_result.detection_fields.value |
Se asigna directamente desde properties.authenticationRequirementPolicies.[].requirementProvider con la clave de etiqueta como "requirementProvider". |
properties.clientAppUsed |
principal.application |
Se asigna directamente desde properties.clientAppUsed. |
properties.conditionalAccessStatus |
additional.fields.value.string_value |
Se asigna directamente desde properties.conditionalAccessStatus con la clave de etiqueta "conditionalAccessStatus". |
properties.crossTenantAccessType |
additional.fields.value.string_value |
Se asigna directamente desde properties.crossTenantAccessType con la clave de etiqueta como "crossTenantAccessType". |
properties.detectedDateTime |
additional.fields.value.string_value |
Se asigna directamente desde properties.detectedDateTime con la clave de etiqueta como "detectedDateTime". |
properties.detectionTimingType |
additional.fields.value.string_value |
Se asigna directamente desde properties.detectionTimingType con la clave de etiqueta como "detectionTimingType". |
properties.homeTenantId |
additional.fields.value.string_value |
Se asigna directamente desde properties.homeTenantId con la clave de etiqueta como "homeTenantId". |
properties.id |
metadata.product_log_id |
Se asigna directamente desde properties.id. |
properties.initiatedBy.user.displayName |
principal.user.user_display_name |
Se asigna directamente desde properties.initiatedBy.user.displayName. |
properties.initiatedBy.user.id |
principal.user.windows_sid |
Se asigna directamente desde properties.initiatedBy.user.id. |
properties.initiatedBy.user.ipAddress |
principal.ip, principal.asset.ip |
Se asigna directamente desde properties.initiatedBy.user.ipAddress. |
properties.initiatedBy.user.userPrincipalName |
principal.user.email_addresses, principal.user.userid |
Se asigna directamente desde properties.initiatedBy.user.userPrincipalName. Si es una dirección de correo electrónico, se asigna a email_addresses; de lo contrario, a userid. |
properties.ipAddress |
principal.ip, principal.asset.ip |
Se asigna directamente desde properties.ipAddress. |
properties.isGuest |
additional.fields.value.string_value |
Se asigna directamente desde properties.isGuest con la clave de etiqueta "isGuest". |
properties.isDeleted |
additional.fields.value.string_value |
Se asigna directamente desde properties.isDeleted con la clave de etiqueta "isDeleted". |
properties.isProcessing |
additional.fields.value.string_value |
Se asigna directamente desde properties.isProcessing con la clave de etiqueta como "isProcessing". |
properties.lastUpdatedDateTime |
additional.fields.value.string_value |
Se asigna directamente desde properties.lastUpdatedDateTime con la clave de etiqueta "lastUpdatedDateTime". |
properties.location.city |
principal.location.city |
Se asigna directamente desde properties.location.city. |
properties.location.countryOrRegion |
principal.location.country_or_region |
Se asigna directamente desde properties.location.countryOrRegion. |
properties.location.geoCoordinates.latitude |
principal.location.region_latitude, principal.location.region_coordinates.latitude |
Se asigna directamente desde properties.location.geoCoordinates.latitude. |
properties.location.geoCoordinates.longitude |
principal.location.region_longitude, principal.location.region_coordinates.longitude |
Se asigna directamente desde properties.location.geoCoordinates.longitude. |
properties.location.state |
principal.location.state |
Se asigna directamente desde properties.location.state. |
properties.networkLocationDetails.[].networkNames |
additional.fields.value.string_value |
Valores concatenados de properties.networkLocationDetails.[].networkNames con la clave de etiqueta como "properties networkName {index}". |
properties.networkLocationDetails.[].networkType |
additional.fields.value.string_value |
Se asigna directamente desde properties.networkLocationDetails.[].networkType con la clave de etiqueta como "properties networkType {index}". |
properties.riskEventType |
additional.fields.value.string_value |
Se asigna directamente desde properties.riskEventType con la clave de la etiqueta como "riskEventType". |
properties.riskLastUpdatedDateTime |
additional.fields.value.string_value |
Se asigna directamente desde properties.riskLastUpdatedDateTime con la clave de etiqueta como "riskLastUpdatedDateTime". |
properties.riskLevel |
additional.fields.value.string_value |
Se asigna directamente desde properties.riskLevel con la clave de etiqueta como "riskLevel". |
properties.riskLevelDuringSignIn |
additional.fields.value.string_value |
Se asigna directamente desde properties.riskLevelDuringSignIn con la clave de etiqueta "riskLevelDuringSignIn". |
properties.riskState |
additional.fields.value.string_value |
Se asigna directamente desde properties.riskState con la clave de etiqueta como "riskState". |
properties.riskDetail |
additional.fields.value.string_value |
Se asigna directamente desde properties.riskDetail con la clave de etiqueta "riskDetail". |
properties.riskType |
additional.fields.value.string_value |
Se asigna directamente desde properties.riskType con la clave de etiqueta como "riskType". |
properties.source |
additional.fields.value.string_value |
Se asigna directamente desde properties.source con la clave de etiqueta como "source". |
properties.targetResources.0.id |
target.user.product_object_id |
Se asigna directamente desde properties.targetResources.0.id. |
properties.targetResources.modifiedProperties.0.newValue |
target.group.product_object_id |
Se asigna directamente desde properties.targetResources.modifiedProperties.0.newValue. |
properties.tokenIssuerType |
additional.fields.value.string_value |
Se asigna directamente desde properties.tokenIssuerType con la clave de etiqueta como "tokenIssuerType". |
properties.userAgent |
network.http.user_agent, network.http.parsed_user_agent |
Se asigna directamente desde properties.userAgent. |
properties.userDisplayName |
target.user.user_display_name |
Se asigna directamente desde properties.userDisplayName. |
properties.userId |
target.user.product_object_id |
Se asigna directamente desde properties.userId. |
properties.userPrincipalName |
target.user.userid, target.user.email_addresses |
Se asigna directamente desde properties.userPrincipalName. Si es una dirección de correo electrónico, se asigna a email_addresses; de lo contrario, a userid. |
result |
security_result.action, security_result.action_details |
Si result es "success", entonces ALLOW. |
resultDescription |
security_result.description |
Se asigna directamente desde resultDescription. |
resultSignature |
additional.fields.value.string_value |
Se asigna directamente desde resultSignature con la clave de etiqueta como "resultSignature". |
resultType |
security_result.rule_id, action, security_result.summary |
Si resultType es "0", entonces ALLOW y "Se produjo un acceso exitoso". De lo contrario, se mostrará BLOCK y el mensaje “Se produjo un error en el acceso”. |
resourceId |
target.resource.id, target.resource.product_object_id |
Se asigna directamente desde resourceId. |
resourceDisplayName |
target.resource.name, appDisplayName |
Se asigna directamente desde resourceDisplayName. |
riskDetail |
additional.fields.value.string_value |
Se asigna directamente desde riskDetail con la clave de etiqueta "riskDetail". |
riskEventTypes.[]. |
additional.fields.value.string_value, additional.fields.value.list_value.values.string_value |
Los valores se agregan a una lista con la clave "riskEventTypes" en additional.fields. Además, cada valor se agrega como un campo independiente con la clave "riskEventType" en additional.fields. |
riskEventTypes_v2.[]. |
additional.fields.value.list_value.values.string_value |
Los valores se agregan a una lista con la clave "riskEventTypes_v2" en additional.fields. |
riskLevelAggregated |
additional.fields.value.string_value |
Se asigna directamente desde riskLevelAggregated con la clave de etiqueta "riskLevelAggregated". |
riskLevelDuringSignIn |
additional.fields.value.string_value |
Se asigna directamente desde riskLevelDuringSignIn con la clave de etiqueta "riskLevelDuringSignIn". |
riskState |
additional.fields.value.string_value |
Se asigna directamente desde riskState con la clave de etiqueta como "riskState". |
status.additionalDetails |
security_result.description |
Se asigna directamente desde status.additionalDetails. |
status.errorCode |
security_result.rule_id, errorCode |
Se asigna directamente desde status.errorCode. |
target.displayName |
resourceDisplayName |
Se asigna directamente desde target.displayName. |
target.id |
resourceId |
Se asigna directamente desde target.id. |
target.modifiedProperties.[].displayName |
target.resource.attribute.labels.key |
Se asigna directamente desde target.modifiedProperties.[].displayName. |
target.modifiedProperties.[].newValue |
target.resource.attribute.labels.value, target.resource.product_object_id |
Se asigna directamente desde target.modifiedProperties.[].newValue. |
target.modifiedProperties.[].oldValue |
target.resource.attribute.labels.value |
Se asigna directamente desde target.modifiedProperties.[].oldValue. |
target.type |
target.resource.type |
Se asigna directamente desde target.type. |
tenantId |
metadata.product_deployment_id |
Se asigna directamente desde tenantId. |
time |
when |
El campo when se deriva del campo time. La fecha y la hora se extraen del campo time con grok y, luego, se combinan para formar el campo when. |
userAgent |
network.http.user_agent, network.http.parsed_user_agent |
Se asigna directamente desde userAgent. |
userDisplayName |
target.user.user_display_name |
Se asigna directamente desde userDisplayName. |
userId |
target.user.product_object_id |
Se asigna directamente desde userId. |
userPrincipalName |
target.user.userid, principal.administrative_domain, target.user.email_addresses |
Se asigna directamente desde userPrincipalName. Si es una dirección de correo electrónico, se asigna a email_addresses y se extrae la parte del dominio, que se asigna a principal.administrative_domain. De lo contrario, se asigna a userid. |
| (Lógica del analizador) | event.idm.is_alert, event.idm.is_significant |
Se establece como verdadero si el nivel es "Crítico". |
| (Lógica del analizador) | event.idm.read_only_udm.metadata.event_type |
Se establece en "USER_LOGIN" si has_target_user es "true". Se establece en "USER_UNCATEGORIZED" si has_principal_user es "verdadero". Se establece en "STATUS_UPDATE" si has_principal es "true". De lo contrario, se establece en "GENERIC_EVENT". |
| (Lógica del analizador) | event.idm.read_only_udm.metadata.vendor_name |
Se establece en "Microsoft". |
| (Lógica del analizador) | event.idm.read_only_udm.metadata.product_name |
Establece el valor en "Azure AD". |
| (Lógica del analizador) | event.idm.read_only_udm.extensions.auth.type |
Se debe establecer en "SSO". |
| (Lógica del analizador) | event.idm.read_only_udm.extensions.auth.mechanism |
Se establece en "INTERACTIVE" si isInteractive es "true". De lo contrario, se debe establecer en "MECHANISM_OTHER". |
| (Lógica del analizador) | security_result.action |
Se establece en ALLOW si el resultado es correcto. |
| (Lógica del analizador) | security_result.action |
Se establece en ALLOW si resultType es 0. |
| (Lógica del analizador) | security_result.action |
Se establece en BLOCK si resultType no es 0 ni "". |
| (Lógica del analizador) | security_result.category |
Se establece en "AUTH_VIOLATION" si resultType no es 0 ni "". |
| (Lógica del analizador) | security_result.description |
Se establece en "Se modificó la pertenencia a un grupo" si operationName es "Agregar miembro al grupo" y el resultado es "success". |
| (Lógica del analizador) | security_result.priority |
Se establece en "MEDIUM_PRIORITY" si properties.riskLevelDuringSignIn es "medium". |
| (Lógica del analizador) | security_result.summary |
Se establece en "Se produjo un acceso exitoso" si resultType es 0. |
| (Lógica del analizador) | security_result.summary |
Se establece en "Failed login occurred" si resultType no es 0 ni "". |
| (Lógica del analizador) | security_result.summary |
Se establece en properties.activityDisplayName si existe. |
| (Lógica del analizador) | security_result.severity |
Se establece en INFORMATIONAL si el nivel es "Information", "Informational", "0" o "4". Se establece en MEDIUM si el nivel es "Warning", "1" o "3". Se establece en ERROR si el nivel es "Error" o "2". Se establece en CRITICAL si el nivel es "Crítico". |
| (Lógica del analizador) | security_result.severity |
Se establece en ERROR si resultType no es 0 ni "". |
Registro de cambios
Consulta el registro de cambios de este analizador
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.