Recoger registros de Microsoft Azure AD
En este documento se describe cómo puede recoger registros de Microsoft Azure Active Directory (AD) configurando un feed de Google Security Operations.
Azure Active Directory (AZURE_AD) ahora se llama Microsoft Entra ID. Los registros de auditoría de Azure AD
(AZURE_AD_AUDIT) ahora son registros de auditoría de Microsoft Entra ID.
Para obtener más información, consulta Ingestión de datos en Google Security Operations.
Una etiqueta de ingestión identifica el analizador que normaliza los datos de registro sin procesar en formato UDM estructurado.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Una suscripción a Azure con la que puedas iniciar sesión
- Un rol de administrador global o de Azure AD
- Un Azure AD (inquilino) en Azure
Cómo configurar Azure AD
- Inicia sesión en el portal de Azure.
- Ve a Inicio > Registro de aplicaciones, selecciona una aplicación registrada o registra una si aún no lo has hecho.
- Para registrar una aplicación, en la sección Registro de aplicaciones, haz clic en Nuevo registro.
- En el campo Nombre, indica el nombre visible de tu aplicación.
En la sección Tipos de cuenta admitidos, selecciona Solo cuentas de este directorio de la empresa (cliente único).
- URI de redirección: déjelo en blanco (no es necesario para la autenticación de la entidad de servicio).
Haz clic en Registrarse.
Ve a la página Descripción general y copia el ID de aplicación (cliente) y el ID de directorio (inquilino), que son necesarios para configurar el feed de Google Security Operations.
Haz clic en Permisos de API.
Haz clic en Añadir un permiso y, a continuación, selecciona Microsoft Graph en el nuevo panel.
Haz clic en Permisos de la aplicación.
Selecciona los permisos AuditLog.Read.All, Directory.Read.All y SecurityEvents.Read.All. Asegúrate de que los permisos sean Permisos de aplicación y no Permisos delegados.
Haz clic en Conceder consentimiento de administrador para el directorio predeterminado. Las aplicaciones están autorizadas para llamar a las APIs cuando los usuarios o los administradores les conceden permisos como parte del proceso de consentimiento.
Ve a Ajustes > Gestionar.
Haz clic en Certificados y secretos.
Haz clic en Nuevo secreto de cliente. En el campo Valor, aparece el secreto de cliente.
Copia el valor del secreto de cliente. El valor solo se muestra en el momento de la creación y es necesario para registrar la aplicación de Azure y configurar el feed de Google Security Operations.
Configurar feeds
Hay dos puntos de entrada diferentes para configurar feeds en la plataforma Google SecOps:
- Configuración de SIEM > Feeds > Añadir nuevo feed
- Centro de contenido > Paquetes de contenido > Empezar
Cómo configurar el feed de Microsoft Entra ID (Azure AD)
- Haz clic en el paquete Plataforma de Azure.
- Busca el tipo de registro Azure AD.
Especifique los valores de los siguientes campos:
- Tipo de fuente: API de terceros (opción recomendada)
- ID de cliente de OAuth: especifica el ID de cliente que has obtenido anteriormente.
- Secreto de cliente de OAuth: especifica el secreto de cliente que has obtenido anteriormente.
- ID de cliente: especifica el ID de cliente que has obtenido anteriormente.
- Ruta completa de la API: URL del endpoint de la API REST de Microsoft Graph.
- Endpoint de autenticación de la API: endpoint de autenticación de Microsoft Active Directory.
Opciones avanzadas
- Nombre del feed: un valor rellenado automáticamente que identifica el feed.
- Espacio de nombres de recursos: espacio de nombres asociado al feed.
- Etiquetas de ingestión: etiquetas aplicadas a todos los eventos de este feed.
Haga clic en Crear feed.
Para obtener más información sobre cómo configurar varios feeds para diferentes tipos de registros en esta familia de productos, consulta el artículo Configurar feeds por producto.
Para obtener más información sobre los feeds de Google Security Operations, consulta la documentación de los feeds de Google Security Operations. Para obtener información sobre los requisitos de cada tipo de feed, consulta el artículo Configuración de feeds por tipo.
Referencia de asignación de campos
Este código de analizador transforma los registros sin procesar de Azure AD en formato JSON en un modelo de datos unificado (UDM). Primero, normaliza los datos eliminando los campos innecesarios y, a continuación, extrae información relevante, como los detalles del usuario, las marcas de tiempo y las especificaciones del evento, y los asigna a los campos de UDM correspondientes para que la representación y el análisis sean coherentes.
Tabla de asignación de UDM
| Campo de registro | Asignación de UDM | Observaciones |
|---|---|---|
about |
about |
|
accountEnabled |
user.user_authentication_statususer.attribute.labels.value (clave: accountEnabled) |
Si accountEnabled es true, user.user_authentication_status se asigna a ACTIVE y se añade una etiqueta con la clave accountEnabled y el valor true. De lo contrario, se añade una etiqueta con la clave accountEnabled y el valor false. |
additionalDetails |
additional.fields |
|
appOwnerTenantId |
target.resource.attribute.labels |
|
authenticationAppDeviceDetails |
additional.fields |
|
authenticationContextClassReference |
security_result.detection_fields |
|
autonomousSystemNumber |
principal.resource.attribute.labels |
|
browser |
network.http.user_agent |
|
browser |
network.http.user_agent |
|
businessPhones |
user.phone_numbers |
Se extraen varios números de teléfono y se asignan como entradas independientes. |
city |
user.personal_address.city |
|
clientCredentialType |
additional.fields |
|
companyName |
user.company_name |
|
country |
user.personal_address.country_or_region |
Si country está vacío, el valor se toma de usageLocation. |
createdDateTime |
user.attribute.creation_time |
Se ha convertido en una marca de tiempo a partir del campo createdDateTime del registro sin procesar con el formato RFC 3339. |
cribl_pipe |
additional.fields |
|
crossTenantAccessType |
additional.fields |
|
department |
user.department |
Se extraen varios departamentos y se asignan como entradas independientes. |
deviceDetail.displayName |
principal.hostname,principal.asset.hostname |
|
displayName |
user.user_display_name |
|
employeeId |
user.employee_id |
Si employeeId está vacío, el valor se toma de extension_employeeNumber. |
employeeType |
user.attribute.labels.value (clave: employeeType) |
Se asigna desde el campo employeeType del registro sin procesar y se añade como etiqueta con la clave employeeType. |
empmanager-src.accountEnabled |
user.user_authentication_statususer.attribute.labels.value (clave: accountEnabled) |
Si manager está vacío y empmanager-src.accountEnabled es true, user.user_authentication_status se define como ACTIVE y se añade una etiqueta con la clave accountEnabled y el valor true. De lo contrario, se añade una etiqueta con la clave accountEnabled y el valor false. |
empmanager-src.onPremisesDistinguishedName |
manager_role.type |
Si gopher-manager está vacío y la parte de la unidad organizativa del nombre distintivo del gestor contiene Users, manager_role.type se asigna a ADMINISTRATOR. Si contiene Service Accounts, manager_role.type se asigna a SERVICE_ACCOUNT. |
empmanager-src.userPrincipalName |
manager_role.type |
Si gopher-manager está vacío y empmanager-src.userPrincipalName empieza por svc-, manager_role.type se define como SERVICE_ACCOUNT. |
errorCode |
security_result.detection_fields |
|
extension_employeeNumber |
user.employee_id |
Se asigna a user.employee_id si employeeId está vacío. |
extension_wfc_AccountingUnitName |
event.idm.entity.entity.labels.value (clave: extension_wfc_AccountingUnitName) |
Se asigna desde el campo extension_wfc_AccountingUnitName del registro sin procesar y se añade como etiqueta con la clave extension_wfc_AccountingUnitName. |
extension_wfc_AccountType |
event.idm.entity.entity.labels.value (clave: wfc_AccountType) |
Se asigna desde el campo extension_wfc_AccountType del registro sin procesar y se añade como etiqueta con la clave wfc_AccountType. |
extension_wfc_execDescription |
event.idm.entity.entity.labels.value (clave: extension_wfc_execDescription) |
Se asigna desde el campo extension_wfc_execDescription del registro sin procesar y se añade como etiqueta con la clave extension_wfc_execDescription. |
extension_wfc_groupDescription |
event.idm.entity.entity.labels.value (clave: extension_wfc_groupDescription) |
Se asigna desde el campo extension_wfc_groupDescription del registro sin procesar y se añade como etiqueta con la clave extension_wfc_groupDescription. |
extension_wfc_orgDescription |
event.idm.entity.entity.labels.value (clave: extension_wfc_orgDescription) |
Se asigna desde el campo extension_wfc_orgDescription del registro sin procesar y se añade como etiqueta con la clave extension_wfc_orgDescription. |
failureReason |
security_result.description |
|
federatedCredentialId |
additional.fields |
|
flaggedForReview |
additional.fields |
|
givenName |
user.first_name |
|
gopher-devices |
event.idm.entity.relations |
Cada dispositivo de la matriz gopher-devices se asigna a una entrada de relación independiente. deviceId se asigna a product_object_id, operatingSystem y operatingSystemVersion se combinan para formar el modelo platform_version, que se asigna directamente, y createdDateTime se convierte en una marca de tiempo y se asigna a created_timestamp. La relación se ha definido como OWNS y la dirección como UNIDIRECTIONAL. |
gopher-groups |
event.idm.entity.relations |
Cada grupo de la matriz gopher-groups se asigna a una entrada de relación independiente. id se asigna a product_object_id y displayName se asigna a group_display_name. La relación se ha definido como MEMBER y la dirección como UNIDIRECTIONAL. |
gopher-manager.businessPhones |
empmanager.phone_numbers |
Se asigna a empmanager.phone_numbers si manager está vacío. |
gopher-manager.country |
empmanager.personal_address.country_or_region |
Se asigna a empmanager.personal_address.country_or_region si manager está vacío. Si tanto gopher-manager.country como gopher-manager.usageLocation están vacíos, el campo se deja vacío. |
gopher-manager.department |
empmanager.department |
Se asigna a empmanager.department si manager está vacío. |
gopher-manager.displayName |
empmanager.user_display_name |
Se asigna a empmanager.user_display_name si manager está vacío. |
gopher-manager.employeeId |
empmanager.employee_id |
Se asigna a empmanager.employee_id si manager está vacío y gopher-manager.employeeId no lo está. |
gopher-manager.extension_employeeNumber |
empmanager.employee_id |
Se asigna a empmanager.employee_id si manager y gopher-manager.employeeId están vacíos y gopher-manager.extension_employeeNumber no está vacío. |
gopher-manager.givenName |
empmanager.first_name |
Se asigna a empmanager.first_name si manager está vacío. |
gopher-manager.id |
empmanager.product_object_id |
Se asigna a empmanager.product_object_id si manager está vacío. |
gopher-manager.jobTitle |
empmanager.title |
Se asigna a empmanager.title si manager está vacío. |
gopher-manager.mail |
empmanager.email_addresses |
Se asigna a empmanager.email_addresses si manager está vacío. |
gopher-manager.onPremisesImmutableId |
user.attribute.labels.value (clave: gopher-manager onPremisesImmutableId) |
Se asigna como una etiqueta con la clave gopher-manager onPremisesImmutableId. |
gopher-manager.onPremisesSamAccountName |
empmanager.userid |
Se asigna a empmanager.userid si manager está vacío. |
gopher-manager.onPremisesSecurityIdentifier |
empmanager.windows_sid |
Se asigna a empmanager.windows_sid si manager está vacío. |
gopher-manager.proxyAddresses |
empmanager.email_addressesempmanager.group_identifiers |
Si manager está vacío, cada dirección de la matriz gopher-manager.proxyAddresses se asigna a empmanager.email_addresses o empmanager.group_identifiers en función de si empieza por smtp o SMTP. |
gopher-manager.refreshTokensValidFromDateTime |
empmanager.attribute.labels.value (clave: refreshTokensValidFromDateTime) |
Se asigna como una etiqueta con la clave refreshTokensValidFromDateTime si manager está vacío. |
gopher-manager.streetAddress |
empmanager.personal_address.name |
Se asigna a empmanager.personal_address.name si manager está vacío. |
gopher-manager.surname |
empmanager.last_name |
Se asigna a empmanager.last_name si manager está vacío. |
gopher-manager.usageLocation |
user.attribute.labels.value (clave: manager_src_usageLocation) |
Se asigna como una etiqueta con la clave manager_src_usageLocation. |
gopher-manager.userType |
empmanager.attribute.roles.name |
Se asigna a empmanager.attribute.roles.name si manager está vacío. |
homeTenantId |
target.resource.attribute.labels |
|
homeTenantName |
target.resource.attribute.labels |
|
id |
user.product_object_id |
|
identities |
user.attribute.labels.value (clave: signInType)user.attribute.labels.value (clave: userPrincipalName) |
El signInType se asigna como una etiqueta con la clave signInType. Si signInType y userPrincipalName no están vacíos, se combinan y se asignan como una etiqueta con la clave userPrincipalName. |
identity |
principal.user.user_display_name |
|
incomingTokenType |
additional.fields |
|
initiatedBy.app.displayName |
principal.application |
|
initiatedBy.app.servicePrincipalId |
principal.resource.product_object_id |
|
initiatedBy.user.homeTenantId |
target.resource.attribute.labels |
|
initiatedBy.user.homeTenantName |
target.resource.attribute.labels |
|
initiatedBy.user.userType |
additional.fields |
|
ipAddressFromResourceProvider |
principal.resource.attribute.labels |
|
isTenantRestricted |
additional.fields |
|
jobTitle |
user.title |
|
loggedByService |
observer.application |
|
mail |
user.email_addresses |
Si mail empieza por svc-, user_role.type se define como SERVICE_ACCOUNT. |
mail |
user_role.type |
Si mail empieza por svc-, user_role.type se define como SERVICE_ACCOUNT. |
mailNickname |
user.attribute.labels.value (clave: mailNickname) |
Se asigna desde el campo mailNickname del registro sin procesar y se añade como etiqueta con la clave mailNickname. |
manager.businessPhones |
empmanager.phone_numbers |
Se asigna a empmanager.phone_numbers si gopher-manager está vacío. |
manager.city |
empmanager.personal_address.city |
Se asigna a empmanager.personal_address.city si gopher-manager está vacío. |
manager.companyName |
empmanager.company_name |
Se asigna a empmanager.company_name si gopher-manager está vacío. |
manager.country |
empmanager.personal_address.country_or_region |
Se asigna a empmanager.personal_address.country_or_region si gopher-manager está vacío. Si tanto manager.country como manager.usageLocation están vacíos, el campo se deja vacío. |
manager.department |
empmanager.department |
Se asigna a empmanager.department si gopher-manager está vacío. |
manager.displayName |
empmanager.user_display_name |
Se asigna a empmanager.user_display_name si gopher-manager está vacío. |
manager.employeeId |
empmanager.employee_id |
Se asigna a empmanager.employee_id si gopher-manager está vacío y manager.employeeId no lo está. |
manager.extension_employeeNumber |
empmanager.employee_id |
Se asigna a empmanager.employee_id si gopher-manager y manager.employeeId están vacíos y manager.extension_employeeNumber no está vacío. |
manager.givenName |
empmanager.first_name |
Se asigna a empmanager.first_name si gopher-manager está vacío. |
manager.id |
empmanager.product_object_id |
Se asigna a empmanager.product_object_id si gopher-manager está vacío. |
manager.jobTitle |
empmanager.title |
Se asigna a empmanager.title si gopher-manager está vacío. |
manager.mail |
empmanager.email_addresses |
Se asigna a empmanager.email_addresses si gopher-manager está vacío. |
manager.onPremisesSamAccountName |
empmanager.userid |
Se asigna a empmanager.userid si gopher-manager está vacío. |
manager.onPremisesSecurityIdentifier |
empmanager.windows_sid |
Se asigna a empmanager.windows_sid si gopher-manager está vacío. |
manager.proxyAddresses |
empmanager.email_addressesempmanager.group_identifiers |
Si gopher-manager está vacío, cada dirección de la matriz manager.proxyAddresses se asigna a empmanager.email_addresses o empmanager.group_identifiers based on whether it starts withsmtporSMTP`. |
manager.refreshTokensValidFromDateTime |
empmanager.attribute.labels.value (clave: refreshTokensValidFromDateTime) |
Se asigna como una etiqueta con la clave refreshTokensValidFromDateTime si gopher-manager está vacío. |
manager.state |
empmanager.personal_address.state |
Se asigna a empmanager.personal_address.state si gopher-manager está vacío. |
manager.streetAddress |
empmanager.personal_address.name |
Se asigna a empmanager.personal_address.name si gopher-manager está vacío. |
manager.surname |
empmanager.last_name |
Se asigna a empmanager.last_name si gopher-manager está vacío. |
manager.usageLocation |
user.attribute.labels.value (clave: manager_src_usageLocation)empmanager.personal_address.country_or_region |
Se asigna como una etiqueta con la clave manager_src_usageLocation. Si manager.country está vacío, el valor también se asigna a empmanager.personal_address.country_or_region. |
manager.userType |
empmanager.attribute.roles.name |
Se asigna a empmanager.attribute.roles.name si gopher-manager está vacío. |
mfaDetail.authDetail |
principal.user.phone_numbers |
|
onPremisesDistinguishedName |
user.attribute.labels.value (clave: onPremisesDistinguishedName)user.attribute.labels.value (clave: onPremisesDistinguishedName-OU data) |
El nombre distintivo completo se asigna como una etiqueta con la clave onPremisesDistinguishedName. La parte OU del nombre distintivo se extrae y se asigna como etiqueta con la clave onPremisesDistinguishedName-OU data. Si la parte OU contiene Admin, user_role.type se asigna a ADMINISTRATOR. Si contiene Service Accounts, user_role.type se asigna a SERVICE_ACCOUNT. |
onPremisesDistinguishedName |
user_role.type |
Si la parte OU del nombre completo contiene Admin, user_role.type se asigna a ADMINISTRATOR. Si contiene Service Accounts, user_role.type se asigna a SERVICE_ACCOUNT. |
onPremisesDomainName |
user.group_identifiersuser.attribute.labels.value (clave: onPremisesDomainName) |
Se asigna directamente a user.group_identifiers y se añade como etiqueta con la clave onPremisesDomainName. |
onPremisesImmutableId |
user.attribute.labels.value (clave: onPremisesImmutableId) |
Se asigna desde el campo onPremisesImmutableId del registro sin procesar y se añade como etiqueta con la clave onPremisesImmutableId. |
onPremisesSamAccountName |
user.useriduser.attribute.labels.value (clave: onPremisesSamAccountName) |
Se asigna a user.userid si sAMAccountName está vacío. También se añade como etiqueta con la clave onPremisesSamAccountName. |
onPremisesSecurityIdentifier |
user.windows_sid |
|
operationName |
metadata.product_event_type |
|
OrganizationId |
principal.resource.product_object_id |
|
originalRequestId |
network.session_id |
|
originalTransferMethod |
additional.fields |
|
Parser Logic |
UDM Mapping |
Lógica |
policies.enforcedGrantControls |
security_result.detection_fields |
|
processingTimeInMilliseconds |
additional.fields |
|
properties.__UDI_RequiredFields_RegionScope |
target.location.country_or_region |
|
properties.additionalDetails |
additional.fields |
|
properties.alternateSignInName |
target.user.userid |
|
properties.appId |
principal.user.product_object_id |
|
properties.atContentH |
additional.fields |
|
properties.atContentP |
additional.fields |
|
properties.authenticationContextClassReferences |
additional.fields |
|
properties.C_DeviceId |
additional.fields |
|
properties.C_Iat |
additional.fields |
|
properties.C_Idtyp |
additional.fields |
|
properties.C_Sid |
additional.fields |
|
properties.category |
security_result.category_details |
|
properties.clientAuthMethod |
additional.fields |
|
properties.clientCredentialType |
additional.fields |
|
properties.correlationId |
security_result.detection_fields |
|
properties.deviceDetail.browser |
network.http.user_agent |
|
properties.deviceDetail.deviceId |
principal.asset.asset_id |
|
properties.deviceDetail.displayName |
principal.hostname,principal.asset.hostname |
|
properties.deviceDetail.operatingSystem |
principal.platform_version |
Si operatingSystem empieza por Win, Mac o Lin, se asigna a principal.platform. |
properties.deviceDetail.trustType |
principal.asset.attribute.labels |
|
properties.EventData.AuthenticationPackageName |
security_result.about.resource.name |
|
properties.EventData.CallerProcessId |
principal.process.pid |
|
properties.EventData.CallerProcessName |
principal.process.file.full_path |
|
properties.EventData.CertIssuerName |
additional.fields |
|
properties.EventData.CertSerialNumber |
about.artifact.last_https_certificate.serial_number |
|
properties.EventData.CertThumbprint |
additional.fields |
|
properties.EventData.HandleId |
target.resource.attribute.labels |
|
properties.EventData.ImpersonationLevel |
additional.fields |
|
properties.EventData.IpAddress |
principal.ipprincipal.asset.ip |
|
properties.EventData.IpPort |
principal.port |
|
properties.EventData.KeyLength |
additional.fields |
|
properties.EventData.LmPackageName |
target.resource.attribute.labels |
|
properties.EventData.LogonGuid |
security_result.detection_fields |
|
properties.EventData.LogonProcessName |
target.process.file.names |
|
properties.EventData.LogonType |
extensions.auth.auth_details |
|
properties.EventData.NewSd |
security_result.detection_fields |
|
properties.EventData.ObjectName |
target.resource.name |
|
properties.EventData.ObjectServer |
target.resource.attribute.labels |
|
properties.EventData.ObjectType |
target.resource.resource_subtype |
|
properties.EventData.OldSd |
security_result.detection_fields |
|
properties.EventData.PreAuthType |
extensions.auth.mechanism |
|
properties.EventData.ProcessId |
target.process.pid |
|
properties.EventData.ProcessName" |
target.process.file.full_path |
|
properties.EventData.ServiceName |
target.application |
|
properties.EventData.ServiceSid |
target.resource.user.windows_sid |
|
properties.EventData.Source |
principal.ipprincipal.asset.ip |
|
properties.EventData.Status |
security_result.detection_fields |
|
properties.EventData.SubjectDomainName |
principal.administrative_domain |
|
properties.EventData.SubjectLogonId |
principal.resource.attribute.labels |
|
properties.EventData.SubjectUserName |
principal.user.userid |
|
properties.EventData.SubjectUserSid |
principal.user.windows_sid |
|
properties.EventData.TargetDomainName |
target.administrative_domain |
|
properties.EventData.TargetLogonId |
target.resource.attribute.labels |
|
properties.EventData.TargetSid |
target.user.windows_sid |
|
properties.EventData.TargetUserName |
target.user.userid |
|
properties.EventData.TargetUserSid |
target.user.windows_sid |
|
properties.EventData.TicketEncryptionType |
security_result.detection_fields |
|
properties.EventData.TicketOptions |
security_result.detection_fields" |
|
properties.EventData.TransmittedServices |
security_result.detection_fields |
|
properties.EventData.WorkstationName |
target.hostnametarget.asset.hostname |
|
properties.flaggedForReview |
additional.fields |
|
properties.homeTenantId |
target.resource.attribute.labels |
|
properties.incomingTokenType |
additional.fields |
|
properties.initiatedBy.app.displayName |
principal.user.user_display_name |
|
properties.initiatedBy.user.displayName |
principal.user.user_display_name |
|
properties.initiatedBy.user.id |
principal.user.product_object_id |
|
properties.initiatedBy.user.ipAddress |
principal.ip,principal.asset.ip |
|
properties.ipAddressFromResourceProvider |
principal.resource.attribute.labels |
|
properties.isInteractive |
additional.fields |
|
properties.isTenantRestricted |
additional.fields |
|
properties.isThroughGlobalSecureAccess |
additional.fields |
|
properties.location.geoCoordinates.altitude |
additional.fields |
|
properties.loggedByService |
observer.application |
|
properties.mfaDetail.authDetail |
principal.user.phone_numbers |
|
properties.operationType |
target.resource.attribute.labels |
|
properties.originalRequestId |
network.session_id |
|
properties.originalTransferMethod |
additional.fields |
|
properties.processingTimeInMilliseconds |
additional.fields |
|
properties.RecordId |
metadata.product_log_id |
|
properties.requestId |
security_result.detection_fields |
|
properties.requestMethod |
network.http.method |
|
properties.requestUri |
network.http.referral_url |
|
properties.resourceDisplayName |
target.resource.name |
|
properties.resourceId |
target.resource.attribute.labels |
|
properties.resourceOwnerTenantId |
target.resource.attribute.labels |
|
properties.resourceTenantId |
target.resource.attribute.labels |
|
properties.responseSizeBytes |
network.received_bytes |
|
properties.responseStatusCode |
network.http.response_code |
|
properties.resultReason |
additional.fieldssecurity_result.summary |
|
properties.resultType |
additional.fields |
|
properties.riskDetail |
security_result.detection_fields |
|
properties.riskEventType |
security_result.detection_fields |
|
properties.riskLastUpdatedDateTime |
security_result.detection_fields |
|
properties.riskLevel |
security_result.detection_fields |
|
properties.riskLevelAggregated |
security_result.detection_fields |
|
properties.riskLevelDuringSignIn |
security_result.detection_fields |
|
properties.riskState |
security_result.detection_fields |
|
properties.riskType |
security_result.detection_fields |
|
properties.rngcStatus |
additional.fields |
|
properties.roles |
principal.user.attribute.roles |
|
properties.scopes |
security_result.detection_fields |
|
properties.servicePrincipalCredentialKeyId |
additional.fields |
|
properties.sessionLifetimePolicies |
security_result.detection_fields |
|
properties.signInActivityId |
additional.fields |
|
properties.SignInBondData.DeviceDetails.DeviceTrustType |
principal.asset.attribute.labels |
|
properties.SignInBondData.DeviceDetails.IsCompliant |
security_result.rule_labels |
|
properties.SignInBondData.DeviceDetails.IsManaged |
principal.asset.attribute.labels |
|
properties.SignInBondData.DisplayDetails.AttemptedUsername |
principal.user.email_addresses |
|
properties.SignInBondData.DisplayDetails.ProxyRestrictionTargetTenantName |
additional.fields |
|
properties.SignInBondData.DisplayDetails.ResourceDisplayName |
target.resource.name |
|
properties.SignInBondData.LocationDetails.IPChain |
target.ip |
|
properties.SignInBondData.LocationDetails.Latitude |
additional.fields |
|
properties.SignInBondData.LocationDetails.Longitude |
additional.fields |
|
properties.SignInBondData.MfaDetails |
additional.fields |
|
properties.SignInBondData.ProtocolDetails.AuthenticationMethodsUsed |
extensions.auth.auth_details |
|
properties.SignInBondData.ProtocolDetails.DomainHintPresent |
additional.fields |
|
properties.SignInBondData.ProtocolDetails.IsInteractive |
additional.fields |
|
properties.SignInBondData.ProtocolDetails.LoginHintPresent |
additional.fields |
|
properties.SignInBondData.ProtocolDetails.NetworkLocation |
additional.fields" |
|
properties.SignInBondData.ProtocolDetails.Protocol |
security_result.detection_fields |
Si properties.SignInBondData.ProtocolDetails.Protocol == WSTrust, se asigna a security_result.detection_fields. De lo contrario, se asigna a network.application_protocol. |
properties.SignInBondData.RamDetails.RamRecommendedAction |
additional.fields |
|
properties.SignInBondData.RamDetails.RamRecommender |
additional.fields |
|
properties.signInTokenProtectionStatus |
additional.fields |
|
properties.ssoExtensionVersion |
additional.fields |
|
properties.status.errorCode |
security_result.detection_fieldssecurity_result.action |
|
properties.targetResources |
target.resource.attribute.labels |
|
properties.tenantGeo |
Geolocation.country_or_region |
|
properties.tokenIssuerName |
additional.fields |
|
properties.tokenProtectionStatusDetails.signInSessionStatus |
additional.fields |
|
properties.tokenProtectionStatusDetails.signInSessionStatusCode |
additional.fields |
|
properties.userDisplayName |
principal.user.user_display_name |
|
properties.wids |
additional.fields |
|
proxyAddresses |
user.email_addressesuser.group_identifiers |
Cada dirección de la matriz proxyAddresses se asigna a user.email_addresses o user.group_identifiers en función de si empieza por smtp o SMTP. Si la dirección empieza por smtp o SMTP, se quita el prefijo smtp: o SMTP:, se extrae la dirección de correo restante y se asigna a user.email_addresses. |
record.CorrelationId |
additional.fields |
|
record.CrossTenantAccessType |
additional.fields |
|
record.DeviceDetail.deviceId |
network.session_id |
|
record.DeviceDetail.operatingSystem |
principal.platform_version |
Si operatingSystem empieza por Win, Mac o Lin, se asigna a principal.platform. |
record.IsInteractive |
additional.fields |
|
record.level |
security_result.severity_details |
Si record_level está en ["INFORMATION", "INFORMATIONAL", "0", "4", "WARNING", "1", "3","ERROR", "2","CRITICAL"], se asigna a security_result.severity. |
record.location |
principal.location.name |
|
record.properties.appServicePrincipalId |
additional.fields |
|
record.properties.authenticationProtocol |
additional.fields |
|
record.properties.autonomousSystemNumber |
principal.resource.attribute.labels |
|
record.properties.C_DeviceId |
principal.asset.asset_id |
|
record.properties.crossTenantAccessType |
additional.fields |
|
record.properties.deviceDetail.isCompliant |
security_result.rule_labels |
|
record.properties.deviceDetail.isManaged |
principal.asset.attribute.labels |
|
record.properties.deviceDetail.trustType |
principal.asset.attribute.labels |
|
record.properties.flaggedForReview |
additional.fields |
|
record.properties.incomingTokenType |
additional.fields |
|
record.properties.isInteractive |
extensions.auth.mechanism |
|
record.properties.isTenantRestricted |
additional.fields |
|
record.properties.isThroughGlobalSecureAccess |
additional.fields |
|
record.properties.location |
target.location.name |
|
record.properties.originalTransferMethod |
additional.fields |
|
record.properties.resourceDisplayName |
principal.resource.name |
|
record.properties.riskDetail |
security_result.detection_fields |
|
record.properties.riskLevelAggregated |
security_result.detection_fields |
|
record.properties.riskLevelDuringSignIn |
security_result.detection_fields |
|
record.properties.riskState |
security_result.detection_fields |
|
record.properties.rngcStatus |
additional.fields |
|
record.properties.roles |
principal.user.attribute.roles |
|
record.properties.scopes |
security_result.detection_fields |
|
record.properties.servicePrincipalId |
target.resource.attribute.labels |
|
record.properties.servicePrincipalId |
principal.user.userid |
|
record.properties.signInTokenProtectionStatus |
additional.fields |
|
record.properties.ssoExtensionVersion |
additional.fields |
|
record.properties.status.additionalDetails |
additional.fields |
|
record.properties.tokenProtectionStatusDetails.signInSessionStatus |
additional.fields |
|
record.properties.tokenProtectionStatusDetails.signInSessionStatusCode |
additional.fields |
|
record.RiskDetail |
security_result.detection_fields |
|
record.RiskEventTypes |
security_result.detection_fields |
|
record.RiskLevelAggregated |
security_result.detection_fields |
|
record.RiskLevelDuringSignIn |
security_result.detection_fields |
|
record.RiskState |
security_result.detection_fields |
|
refreshTokensValidFromDateTime |
user.attribute.labels.value (clave: refreshTokensValidFromDateTime) |
Se asigna desde el campo refreshTokensValidFromDateTime del registro sin procesar y se añade como etiqueta con la clave refreshTokensValidFromDateTime. |
resourceOwnerTenantId |
target.resource.attribute.labels |
|
resourceTenantId |
target.resource.attribute.labels |
|
resultDescription |
security_result.description |
|
resultReason |
additional.fields |
|
resultType |
additional.fields |
|
riskDetail |
security_result.detection_fields |
|
riskLevelAggregated |
security_result.detection_fields |
|
riskLevelDuringSignIn |
security_result.detection_fields |
|
riskState |
security_result.detection_fields |
|
sAMAccountName |
user.userid |
|
servicePrincipalCredentialKeyId |
additional.fields |
|
servicePrincipalCredentialThumbprint |
additional.fields |
|
servicePrincipalId |
target.resource.attribute.labels |
|
servicePrincipalName |
additional.fields |
|
sessionId |
network.session_id |
|
signInIdentifier |
target.user.userid |
|
signInIdentifierType |
additional.fields |
|
signInTokenProtectionStatus |
additional.fields |
|
state |
user.personal_address.state |
|
status.additionalDetails |
additional.fields |
|
streetAddress |
user.personal_address.name |
|
surname |
user.last_name |
|
targets.modifiedProperties |
target.resource.attribute.labels |
|
tokenIssuerName |
additional.fields |
|
tokenIssuerType |
additional.fields |
|
tokenProtectionStatusDetails.signInSessionStatus |
security_result.detection_fields |
|
uniqueTokenIdentifier |
additional.fields |
|
usageLocation |
user.personal_address.country_or_region |
Si country está vacío, el valor se asigna a user.personal_address.country_or_region. |
userDisplayName |
principal.user.user_display_name |
|
userId |
principal.user.product_object_id |
|
userPrincipalName |
user.email_addresses |
Si userPrincipalName empieza por svc-, user_role.type se define como SERVICE_ACCOUNT. |
userPrincipalName |
user_role.type |
Si userPrincipalName empieza por svc-, user_role.type se define como SERVICE_ACCOUNT. |
userType |
additional.fields |
|
| N/A | event.idm.entity.metadata.vendor_name |
Su valor debe ser Microsoft. |
| N/A | event.idm.entity.metadata.product_name |
Su valor debe ser Azure Active Directory. |
| N/A | event.idm.entity.metadata.entity_type |
Su valor debe ser USER. |
| N/A | event.idm.entity.metadata.collected_timestamp |
Asigna el valor del campo create_time del registro sin procesar. |
Referencia de delta de asignación de UDM
El 1 de enero del 2026, Google SecOps lanzó una nueva versión del analizador de Azure AD, que incluye cambios significativos en la asignación de campos de registro de Azure AD a campos de UDM y en la asignación de tipos de eventos.
Delta de asignación de campos de registro
En la siguiente tabla se muestra la diferencia de asignación de los campos de registro de Azure AD a UDM que se expusieron antes del 1 de enero del 2026 y posteriormente (se indican en las columnas Asignación antigua y Asignación actual, respectivamente):
| Campo de registro | Asignación antigua | Asignación actual |
|---|---|---|
additionalDetails |
security_result.description |
additional.fields |
browser |
principal.resource.attribute.labels |
network.http.user_agent |
browser |
principal.resource.attribute.labels |
network.http.user_agent |
deviceDetail.displayName |
principal.asset.hardware |
principal.hostname,principal.asset.hostname |
errorCode |
security_result.rule_id |
security_result.detection_fields |
failureReason |
additional.fields |
security_result.description |
identity |
target.user.user_display_name |
principal.user.user_display_name |
loggedByService |
target.application |
observer.application |
operationName |
additional.fields |
metadata.product_event_type |
OrganizationId |
principal.resource.id |
principal.resource.product_object_id |
properties.homeTenantId |
additional.fields |
target.resource.attribute.labels |
properties.initiatedBy.user.id |
principal.user.windows_sid |
principal.user.product_object_id |
properties.resourceOwnerTenantId |
additional.fields |
target.resource.attribute.labels |
properties.riskDetail |
additional.fields |
security_result.detection_fields |
properties.riskEventType |
additional.fields |
security_result.detection_fields |
properties.riskLastUpdatedDateTime |
additional.fields |
security_result.detection_fields |
properties.riskLevel |
additional.fields |
security_result.detection_fields |
properties.riskLevelAggregated |
additional.fields |
security_result.detection_fields |
properties.riskLevelDuringSignIn |
additional.fields |
security_result.detection_fields |
properties.riskState |
additional.fields |
security_result.detection_fields |
properties.riskType |
additional.fields |
security_result.detection_fields |
properties.userDisplayName |
target.user.user_display_name |
principal.user.user_display_name |
record.CorrelationId |
metadata.product_log_id |
additional.fields |
record.properties.C_DeviceId |
additional.fields |
principal.asset.asset_id |
record.properties.resourceDisplayName |
target.resource.attribute.labels |
principal.resource.name |
record.properties.riskDetail |
additional.fields |
security_result.detection_fields |
record.properties.riskLevelAggregated |
additional.fields |
security_result.detection_fields |
record.properties.riskLevelDuringSignIn |
additional.fields |
security_result.detection_fields |
record.properties.riskState |
additional.fields |
security_result.detection_fields |
record.properties.roles |
target.user.role_name |
principal.user.attribute.roles |
record.properties.servicePrincipalId |
additional.fields |
target.resource.attribute.labels |
record.properties.servicePrincipalId |
additional.fields |
principal.user.userid |
record.RiskDetail |
target.resource.attribute.labels |
security_result.detection_fields |
record.RiskEventTypes |
target.resource.attribute.labels |
security_result.detection_fields |
record.RiskLevelAggregated |
target.resource.attribute.labels |
security_result.detection_fields |
record.RiskState |
target.resource.attribute.labels |
security_result.detection_fields |
resultType |
security_result.rule_id |
additional.fields |
riskDetail |
additional.fields |
security_result.detection_fields |
riskLevelAggregated |
additional.fields |
security_result.detection_fields |
riskLevelDuringSignIn |
additional.fields |
security_result.detection_fields |
riskState |
additional.fields |
security_result.detection_fields |
riskState |
additional.fields |
security_result.detection_fields |
status.additionalDetails |
security_result.description |
additional.fields |
userDisplayName |
target.user.user_display_name |
principal.user.user_display_name |
userId |
target.user.product_object_id |
principal.user.product_object_id |
Delta de asignación de tipos de eventos
En la siguiente tabla se muestra la diferencia en la gestión de los tipos de eventos de Azure AD antes del 1 de enero del 2026 y después (se indican en las columnas Tipo de evento antiguo y Tipo de evento actual, respectivamente):
| ID de evento del registro | Old event_type | Current event_type | Observación |
|---|---|---|---|
has_resource = true |
GENERIC_EVENT |
USER_RESOURCE_ACCESS |
El tipo de evento se asigna a USER_RESOURCE_ACCESS en los casos en los que el evento se refiere a un recurso (indicado por has_resource = true). |
operationName = Add member to group |
USER_CHANGE_PERMISSIONS |
GROUP_MODIFICATION |
El tipo de evento se asigna a GROUP_MODIFICATION para las operaciones que implican específicamente añadir un miembro a un grupo (donde operationName = Add member to group). |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.