Cómo recopilar registros de contexto de Microsoft Azure AD

Se admite en los siguientes países:

En este documento, se describe cómo puedes recopilar 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 Transferencia de datos a Google Security Operations.

Una etiqueta de transferencia identifica el analizador que normaliza los datos de registro sin procesar al formato estructurado del UDM.

Antes de comenzar

Para completar las tareas de esta página, asegúrate de tener lo siguiente:

  • Una suscripción a Azure a la que puedas acceder.
  • Un rol de administrador global o de administrador de Azure AD
  • Un Azure AD (usuario) en Azure.

Configura Azure AD

  1. Accede al portal de Azure.
  2. Ve a Página principal > Registro de apps, selecciona una aplicación registrada o regístrala si aún no lo hiciste.
  3. Para registrar una aplicación, en la sección Registro de apps, haz clic en Nuevo registro.
  4. En el campo Nombre, proporciona el nombre visible de tu aplicación.
  5. En la sección Tipos de cuentas compatibles, selecciona la opción requerida para especificar quién puede usar la aplicación o acceder a la API.
  6. Haz clic en Register.
  7. Ve a la página Descripción general y copia el ID de la aplicación (cliente) y el ID del directorio (arrendatario), que son necesarios para configurar el feed de Google Security Operations.
  8. Haz clic en Permisos de la API.
  9. Haz clic en Agregar un permiso y, luego, selecciona Microsoft Graph en el panel nuevo.
  10. Haz clic en Permisos de la aplicación.
  11. Selecciona los permisos AuditLog.Read.All, Directory.Read.All y SecurityEvents.Read.All. Asegúrate de que los permisos sean permisos de la aplicación y no permisos delegados.
  12. Haz clic en Otorgar consentimiento de administrador para el directorio predeterminado. Las aplicaciones están autorizadas para llamar a las APIs cuando los usuarios o administradores les otorgan permisos como parte del proceso de consentimiento.
  13. Ve a Configuración > Administrar.
  14. Haz clic en Certificados y secretos.
  15. Haz clic en Nuevo secreto de cliente. En el campo Valor, aparece el secreto del cliente.
  16. Copia el valor del secreto del cliente. El valor se muestra solo en el momento de la creación y es obligatorio para el registro de la app de Azure y para configurar el feed de Google Security Operations.

Configura un feed en Google Security Operations para transferir registros de contexto de Azure AD

  1. Selecciona Configuración de SIEM > Feeds.
  2. Haz clic en Agregar nueva.
  3. Ingresa un nombre único para el Nombre del feed.
  4. Selecciona API de terceros como el Tipo de origen.
  5. Selecciona Contexto organizativo de Azure AD como el Tipo de registro.
  6. Haz clic en Siguiente.
  7. Configura los siguientes parámetros de entrada obligatorios:
    • ID de cliente de OAUTH: Especifica el ID de cliente que obtuviste antes.
    • Secreto de cliente de OAUTH: Especifica el secreto del cliente que obtuviste antes.
    • ID de inquilino: Especifica el ID de inquilino que obtuviste antes.
  8. Haz clic en Siguiente y, luego, en Enviar.

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 Configuración de feeds por tipo. Si tienes problemas cuando creas feeds, comunícate con el equipo de asistencia de Google Security Operations.

Referencia de la asignación de campos

Este código del analizador transforma los registros sin procesar en formato JSON de Azure Active Directory en un modelo de datos unificado (UDM). Extrae información de usuarios y administradores, incluidos atributos, roles, relaciones y etiquetas, a la vez que controla varias inconsistencias de datos y enriquece el resultado con campos estandarizados.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
businessPhones user.phone_numbers Se asignan directamente desde el campo businessPhones en el registro sin formato. Se extraen varios números de teléfono y se asignan como entradas independientes.
ciudad user.personal_address.city Se asigna directamente desde el campo city en el registro sin formato.
companyName user.company_name Se asigna directamente desde el campo companyName en el registro sin formato.
country user.personal_address.country_or_region Se asigna directamente desde el campo country en el registro sin formato. Si country está vacío, el valor se toma de usageLocation.
createdDateTime user.attribute.creation_time Se convirtió en una marca de tiempo del campo createdDateTime en el registro sin procesar con el formato RFC3339.
departamento user.department Se asigna directamente desde el campo department en el registro sin formato. Se extraen varios departamentos y se asignan como entradas independientes.
displayName user.user_display_name Se asigna directamente desde el campo displayName en el registro sin formato.
employeeId user.employee_id Se asigna directamente desde el campo employeeId en el registro sin formato. Si employeeId está vacío, el valor se toma de extension_employeeNumber.
employeeType user.attribute.labels.value (clave: employeeType) Se asignan directamente desde el campo employeeType en el registro sin procesar y se agregan como una etiqueta con la clave employeeType.
extension_employeeNumber user.employee_id Se asigna a user.employee_id si employeeId está vacío.
extension_wfc_AccountType event.idm.entity.entity.labels.value (clave: wfc_AccountType) Se asigna directamente desde el campo extension_wfc_AccountType en el registro sin procesar y se agrega como etiqueta con la clave wfc_AccountType.
extension_wfc_AccountingUnitName event.idm.entity.entity.labels.value (clave: extension_wfc_AccountingUnitName) Se asignan directamente desde el campo extension_wfc_AccountingUnitName en el registro sin procesar y se agregan como una etiqueta con la clave extension_wfc_AccountingUnitName.
extension_wfc_execDescription event.idm.entity.entity.labels.value (clave: extension_wfc_execDescription) Se asignan directamente desde el campo extension_wfc_execDescription en el registro sin procesar y se agregan como una etiqueta con la clave extension_wfc_execDescription.
extension_wfc_groupDescription event.idm.entity.entity.labels.value (clave: extension_wfc_groupDescription) Se asignan directamente desde el campo extension_wfc_groupDescription en el registro sin procesar y se agregan como una etiqueta con la clave extension_wfc_groupDescription.
extension_wfc_orgDescription event.idm.entity.entity.labels.value (clave: extension_wfc_orgDescription) Se asignan directamente desde el campo extension_wfc_orgDescription en el registro sin procesar y se agregan como una etiqueta con la clave extension_wfc_orgDescription.
givenName user.first_name Se asigna directamente desde el campo givenName en el registro sin formato.
gopher-devices event.idm.entity.relations Cada dispositivo del array 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 platform_version, model se asigna directamente y createdDateTime se convierte en una marca de tiempo y se asigna a created_timestamp. La relación se establece en OWNS y la dirección en UNIDIRECTIONAL.
gopher-groups event.idm.entity.relations Cada grupo del array 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 establece en MEMBER y la dirección en 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 gopher-manager.country y 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 está vacío.
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_addresses, empmanager.group_identifiers Si manager está vacía, cada dirección del array gopher-manager.proxyAddresses se asigna a empmanager.email_addresses o empmanager.group_identifiers según si comienza con "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ía.
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.
id user.product_object_id Se asignan directamente desde el campo id en el registro sin formato.
identidades 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.
jobTitle user.title Se asigna directamente desde el campo jobTitle en el registro sin formato.
mail user.email_addresses Se asignan directamente desde el campo mail en el registro sin formato. Si mail comienza con "svc-", user_role.type se establece en SERVICE_ACCOUNT.
mailNickname user.attribute.labels.value (clave: mailNickname) Se asignan directamente desde el campo mailNickname en el registro sin procesar y se agregan como una 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 manager.country y 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 está vacío.
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_addresses, empmanager.group_identifiers Si gopher-manager está vacía, cada dirección del array manager.proxyAddresses se asigna a empmanager.email_addresses o empmanager.group_identifiers según si comienza con "smtp" o "SMTP".
manager.refreshTokensValidFromDateTime empmanager.attribute.labels.value (clave: refreshTokensValidFromDateTime) Se asigna como una etiqueta con la clave refreshTokensValidFromDateTime si gopher-manager está vacía.
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.
onPremisesDistinguishedName user.attribute.labels.value (clave: onPremisesDistinguishedName), user.attribute.labels.value (clave: onPremisesDistinguishedName-UO data) El nombre distinguido completo se asigna como una etiqueta con la clave onPremisesDistinguishedName. La parte de la UO del nombre distinguido se extrae y se asigna como una etiqueta con la clave onPremisesDistinguishedName-OU data. Si la parte de la UO contiene "Administrador", user_role.type se establece en ADMINISTRATOR. Si contiene "Cuentas de servicio", user_role.type se establece en SERVICE_ACCOUNT.
onPremisesDomainName user.group_identifiers, user.attribute.labels.value (clave: onPremisesDomainName) Se asignan directamente a user.group_identifiers y se agregan como etiquetas con la clave onPremisesDomainName.
onPremisesImmutableId user.attribute.labels.value (clave: onPremisesImmutableId) Se asignan directamente desde el campo onPremisesImmutableId en el registro sin procesar y se agregan como una etiqueta con la clave onPremisesImmutableId.
onPremisesSamAccountName user.userid, user.attribute.labels.value (clave: onPremisesSamAccountName) Se asigna a user.userid si sAMAccountName está vacío. También se agrega como una etiqueta con la clave onPremisesSamAccountName.
onPremisesSecurityIdentifier user.windows_sid Se asigna directamente desde el campo onPremisesSecurityIdentifier en el registro sin formato.
proxyAddresses user.email_addresses, user.group_identifiers Cada dirección del array proxyAddresses se asigna a user.email_addresses o user.group_identifiers según si comienza con "smtp" o "SMTP". Si la dirección comienza con "smtp" o "SMTP", se quita el prefijo "smtp:" o "SMTP:", y se extrae la dirección de correo electrónico restante y se asigna a user.email_addresses.
refreshTokensValidFromDateTime user.attribute.labels.value (clave: refreshTokensValidFromDateTime) Se asignan directamente desde el campo refreshTokensValidFromDateTime en el registro sin procesar y se agregan como una etiqueta con la clave refreshTokensValidFromDateTime.
sAMAccountName user.userid Se asigna directamente desde el campo sAMAccountName en el registro sin formato.
state user.personal_address.state Se asigna directamente desde el campo state en el registro sin formato.
streetAddress user.personal_address.name Se asignan directamente desde el campo streetAddress en el registro sin formato.
apellido user.last_name Se asigna directamente desde el campo surname en el registro sin formato.
usageLocation user.personal_address.country_or_region Si country está vacío, el valor se asigna a user.personal_address.country_or_region.
userPrincipalName user.email_addresses Se asignan directamente desde el campo userPrincipalName en el registro sin formato. Si userPrincipalName comienza con "svc-", user_role.type se establece en SERVICE_ACCOUNT.
userType user.attribute.roles.name Se asignan directamente desde el campo userType en el registro sin procesar y se agregan a user.attribute.roles.name.
Lógica del analizador Asignación de UDM Lógica
N/A event.idm.entity.metadata.vendor_name Establece el valor en “Microsoft”.
N/A event.idm.entity.metadata.product_name Establece la opción en "Azure Active Directory".
N/A event.idm.entity.metadata.entity_type Se establece en "USER".
N/A event.idm.entity.metadata.collected_timestamp Se establece en el campo create_time del registro sin procesar.
accountEnabled user.user_authentication_status, user.attribute.labels.value (clave: accountEnabled) Si accountEnabled es verdadero, user.user_authentication_status se establece en "ACTIVE" y se agrega una etiqueta con la clave accountEnabled y el valor "true". De lo contrario, se agrega una etiqueta con la clave accountEnabled y el valor "false".
empmanager-src.accountEnabled user.user_authentication_status, user.attribute.labels.value (clave: accountEnabled) Si manager está vacío y empmanager-src.accountEnabled es "true", user.user_authentication_status se establece en "ACTIVE" y se agrega una etiqueta con la clave accountEnabled y el valor "true". De lo contrario, se agrega una etiqueta con la clave accountEnabled y el valor "false".
onPremisesDistinguishedName user_role.type Si la parte de la UO del nombre distinguido contiene "Administrador", user_role.type se establece en ADMINISTRATOR. Si contiene "Cuentas de servicio", user_role.type se establece en SERVICE_ACCOUNT.
userPrincipalName user_role.type Si userPrincipalName comienza con “svc-”, user_role.type se establece en SERVICE_ACCOUNT.
empmanager-src.onPremisesDistinguishedName manager_role.type Si gopher-manager está vacío y la parte de la UO del nombre distinguido del administrador contiene "Usuarios", manager_role.type se establece en ADMINISTRATOR. Si contiene "Cuentas de servicio", manager_role.type se establece en SERVICE_ACCOUNT.
empmanager-src.userPrincipalName manager_role.type Si gopher-manager está vacío y empmanager-src.userPrincipalName comienza con "svc-", manager_role.type se establece en SERVICE_ACCOUNT.
mail user_role.type Si mail comienza con “svc-”, user_role.type se establece en SERVICE_ACCOUNT.

Cambios

2024-04-29

  • Se asignó "officeLocation" a "entity.location.name".
  • Se asignaron "extension_wfc_groupDescription", "extension_wfc_execDescription", "extension_wfc_orgDescription", "extension_wfc_AccountingUnitName" y "extension_wfc_AccountType" a "entity.labels".

2024-05-02

Corrección de errores:

  • Se agregaron verificaciones para el campo "accountEnabled" para analizar el valor correcto en el campo "entity.user.attribute.labels.value".

2024-03-14

  • Se asignó "onPremisesImmutableId" a "entity.user.attribute.labels".
  • Se asignó "gopher-manager.onPremisesImmutableId" a "entity.user.attribute.labels".

2024-01-12

Corrección de errores:

  • Se cambió la asignación de "empmanager-src.usageLocation" de "entity.user.personal_address.country_or_region" a "entity.user.attribute.labels".

2023-11-24

Mejora

  • Se asignó el atributo "employeeType" a "entity.user.attribute.labels".
  • Se descartaron los registros JSON con formato incorrecto con la etiqueta "TAG_MALFORMED_MESSAGE".

2023-10-25

Bug-Fix

  • Se agregaron verificaciones de valores nulos y una verificación "on_error" para valores ausentes.

2023-09-25

Mejora

  • Se agregó la función de cambio de nombre, en lugar de reemplazar, para asignar "group.displayName" a "relation_entity.entity.group.group_display_name".
  • Se asignó "country" a "user.personal_address.country_or_region". Si no se incluye "country", se asignó "usageLocation" a "user.personal_address.country_or_region".

2023-02-09

Mejora

  • Se agregó una verificación de nulos antes de asignar datos para el campo "onPremisesDistinguishedName".
  • Se agregó gsub para extraer la dirección de correo electrónico del campo "proxyAddresses".

2023-01-23

  • Se asignó "onPremisesExtensionAttributes.extensionAttribute4" a "entity.entity.user.attribute.labels" si "onPremisesExtensionAttributes.extensionAttribute4" es "Empleado".
  • Se agregó gsub para "onPremisesDistinguishedName" para quitar barras diagonales adicionales.

2022-12-15

Corrección de errores:

  • Se asignó "mailNickname" a "entity.user.attribute.labels".
  • Solo se asignó "country_n_code" a "user.manager.personal_address.country_or_region" si "empmanager-src.usageLocation" es nulo.

2022-09-19

  • Corrección de errores:
  • Se asignó "entity.user.attribute.roles" a "ADMINISTRATOR", donde la UO incluye "Administrador".

2022-08-11

  • Se asignó "accountEnabled" a "user.attribute.labels".

2022-05-16

  • Se agregaron asignaciones para los siguientes campos:
  • "createdDateTime" asignado a "entity.user.attribute.creation_time"
  • "accountEnabled" asignado a "entity.user.user_authentication_status"

2022-05-09

  • Mejora: Se asignaron los campos que comienzan con extension_GUID_sbuxXXXXXXX a user.attribute.labels o manager.attribute.labels, según su ocurrencia en el registro.

2022-03-24

  • Mejora: Se agregaron algunos campos faltantes
  • onPremisesSamAccountName, onPremisesDomainName y onPremisesDistinguishedName asignados a entity.user.attribute.labels
  • Para signInType, userPrincipalName se asignó a entity.user.attribute.labels.