Recopilar registros de inicio de sesión de Azure AD
En este documento se explica cómo exportar registros de inicio de sesión de Azure AD a Google Security Operations mediante una cuenta de almacenamiento de Azure. El analizador toma los registros sin procesar en formato JSON y los transforma en un formato estructurado compatible con el modelo de datos unificado (UDM). Extrae los campos relevantes, normaliza los valores, gestiona las diferentes marcas de tiempo y enriquece los datos con contexto relacionado con la seguridad, como la información del usuario, las direcciones IP y las políticas de acceso condicional.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Un cliente de Azure activo
- Acceso privilegiado a Azure
Configurar la cuenta de Azure Storage
- En la consola de Azure, busca Cuentas de almacenamiento.
- Haz clic en + Crear.
- Especifique los valores de los siguientes parámetros de entrada:
- Suscripción: selecciona la suscripción.
- Grupo de recursos: selecciona el grupo de recursos.
- Región: selecciona la región.
- Rendimiento: selecciona el rendimiento (se recomienda Estándar).
- Redundancia: selecciona la redundancia (se recomienda GRS o LRS).
- Nombre de la cuenta de almacenamiento: escribe un nombre para la nueva cuenta de almacenamiento.
- Haz clic en Revisar y crear.
- Revisa el resumen de la cuenta y haz clic en Crear.
- En la página Información general de la cuenta de almacenamiento, seleccione el submenú Claves de acceso en Seguridad y redes.
- Haz clic en Mostrar junto a clave1 o clave2.
- Haz clic en Copiar en el portapapeles para copiar la clave.
- Guarda la clave en un lugar seguro para usarla más adelante.
- En la página Resumen de la cuenta de almacenamiento, seleccione el submenú Endpoints (Endpoints) en Settings (Configuración).
- Haz clic en Copiar en el portapapeles para copiar la URL del endpoint del servicio Blob. Por ejemplo,
https://<storageaccountname>.blob.core.windows.net
. - Guarda la URL del endpoint en una ubicación segura para usarla más adelante.
Cómo configurar la exportación de registros de inicio de sesión de Azure AD
- Inicia sesión en el portal de Azure con tu cuenta con privilegios.
- Ve a Microsoft Entra ID > Monitoring > Diagnostic settings (Microsoft Entra ID > Monitorización > Configuración de diagnóstico).
- Haz clic en Añadir ajuste de diagnóstico.
- Escribe un nombre descriptivo para el ajuste de diagnóstico.
- Selecciona Registros de inicio de sesión.
- Seleccione la casilla Archivar en una cuenta de almacenamiento como destino.
- Especifica la Suscripción y la Cuenta de almacenamiento.
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 inicio de sesión de Azure AD
- Haz clic en el paquete Plataforma de Azure.
- Busca el tipo de registro Inicio de sesión de Azure AD.
Especifique los valores de los siguientes campos:
- Tipo de fuente: Microsoft Azure Blob Storage V2.
- URI de Azure: la URL del endpoint del blob.
ENDPOINT_URL/BLOB_NAME
- Sustituye lo siguiente:
ENDPOINT_URL
: URL del endpoint de blob (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: el nombre del blob (por ejemplo,insights-logs-<logname>
)
- Sustituye lo siguiente:
Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras según tus preferencias de ingesta.
Antigüedad máxima del archivo: archivos modificados en los últimos días. El valor predeterminado es 180 días.
Clave compartida: la clave de acceso a Azure Blob Storage.
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.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
AppDisplayName | read_only_udm.target.application | Se asigna directamente desde el campo AppDisplayName del registro sin procesar. |
AppId | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo AppId del registro sin procesar. La tecla está configurada como appId . |
Categoría | read_only_udm.security_result.category_details | Se asigna directamente desde el campo Category del registro sin procesar. |
ConditionalAccessPolicies[].displayName | read_only_udm.security_result.rule_name | Se asigna directamente desde el campo displayName de la matriz ConditionalAccessPolicies del registro sin procesar. |
ConditionalAccessPolicies[].enforcedGrantControls[] | read_only_udm.security_result.rule_labels.value | Se asigna directamente desde la matriz enforcedGrantControls de la matriz ConditionalAccessPolicies del registro sin procesar. La tecla está configurada como applied_conditional_access_policies_enforced_grant_controls . |
ConditionalAccessPolicies[].enforcedSessionControls[] | read_only_udm.security_result.rule_labels.value | Se asigna directamente desde la matriz enforcedSessionControls de la matriz ConditionalAccessPolicies del registro sin procesar. La tecla está configurada como applied_conditional_access_policies_enforced_session_controls . |
ConditionalAccessPolicies[].id | read_only_udm.security_result.rule_id | Se asigna directamente desde el campo id de la matriz ConditionalAccessPolicies del registro sin procesar. |
ConditionalAccessPolicies[].Result | read_only_udm.security_result.rule_labels.value | Se asigna directamente desde el campo Result de la matriz ConditionalAccessPolicies del registro sin procesar. La tecla está configurada como applied_conditional_access_policies_result . |
ConditionalAccessStatus | read_only_udm.additional.fields.value.string_value | Se asigna directamente desde el campo ConditionalAccessStatus del registro sin procesar. La tecla está configurada como conditionalAccessStatus . |
CorrelationId | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo CorrelationId del registro sin procesar. La tecla está configurada como correlationId . |
DurationMs | read_only_udm.additional.fields.value.string_value | Se asigna directamente desde el campo DurationMs del registro sin procesar. La tecla está configurada como durationMs . |
HomeTenantId | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo HomeTenantId del registro sin procesar. La tecla está configurada como HomeTenantId . |
IPAddress | read_only_udm.principal.asset.ip, read_only_udm.principal.ip | Se asigna directamente desde el campo IPAddress del registro sin procesar. |
ID | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo Id del registro sin procesar. La tecla está configurada como id . |
Identidad | read_only_udm.target.resource.attribute.labels.value | Se asigna directamente desde el campo Identity del registro sin procesar. La tecla está configurada como identity . |
Nivel | read_only_udm.security_result.severity, read_only_udm.security_result.severity_details | Se asigna directamente desde el campo Level del registro sin procesar. La gravedad se determina en función del valor de Level : Information , Informational , 0 o 4 se asignan a INFORMATIONAL ; Warning , 1 o 3 se asignan a MEDIUM ; Error o 2 se asignan a ERROR ; Critical se asigna a CRITICAL . |
OperationName | read_only_udm.metadata.product_event_type | Se asigna directamente desde el campo OperationName del registro sin procesar. |
ResourceGroup | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo ResourceGroup del registro sin procesar. La tecla está configurada como ResourceGroup . |
ResultSignature | read_only_udm.additional.fields.value.string_value | Se asigna directamente desde el campo ResultSignature del registro sin procesar. La tecla está configurada como resultSignature . |
ResultType | read_only_udm.additional.fields.value.string_value | Se asigna directamente desde el campo ResultType del registro sin procesar. La tecla está configurada como resultType . |
TenantId | read_only_udm.metadata.product_deployment_id | Se asigna directamente desde el campo TenantId del registro sin procesar. |
TimeGenerated | read_only_udm.metadata.event_timestamp.seconds, read_only_udm.metadata.event_timestamp.nanos | Se asigna directamente desde el campo TimeGenerated del registro sin procesar. El campo se analiza como una marca de tiempo y se usa para rellenar los campos seconds y nanos . |
TokenIssuerType | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo TokenIssuerType del registro sin procesar. La tecla está configurada como TokenIssuerType . |
UniqueTokenIdentifier | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo UniqueTokenIdentifier del registro sin procesar. La tecla está configurada como UniqueTokenIdentifier . |
UserAgent | read_only_udm.network.http.user_agent, read_only_udm.network.http.parsed_user_agent | Se asigna directamente desde el campo UserAgent del registro sin procesar. El campo se analiza como una cadena de user-agent y se usa para rellenar el objeto parsed_user_agent . |
UserDisplayName | read_only_udm.target.user.user_display_name | Se asigna directamente desde el campo UserDisplayName del registro sin procesar. |
ID de usuario | read_only_udm.target.user.userid | Se asigna directamente desde el campo UserId del registro sin procesar. |
UserPrincipalName | read_only_udm.target.user.email_addresses | Se asigna directamente desde el campo UserPrincipalName del registro sin procesar, pero solo si coincide con el patrón de dirección de correo. |
UserType | read_only_udm.target.user.attribute.roles.name | Se asigna directamente desde el campo UserType del registro sin procesar. |
_Internal_WorkspaceResourceId | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo _Internal_WorkspaceResourceId del registro sin procesar. La tecla está configurada como Internal_WorkspaceResourceId . |
_ItemId | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo _ItemId del registro sin procesar. La tecla está configurada como ItemId . |
properties.appId | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo appId del objeto properties del registro sin procesar. La tecla está configurada como appId . |
properties.authenticationDetails[].authenticationMethod | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo authenticationMethod de la matriz authenticationDetails del registro sin procesar. La tecla está configurada como authenticationMethod . |
properties.authenticationDetails[].authenticationMethodDetail | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo authenticationMethodDetail de la matriz authenticationDetails del registro sin procesar. La tecla está configurada como authenticationMethodDetail . |
properties.authenticationDetails[].authenticationStepDateTime | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo authenticationStepDateTime de la matriz authenticationDetails del registro sin procesar. La tecla está configurada como authenticationStepDateTime . |
properties.authenticationDetails[].authenticationStepRequirement | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo authenticationStepRequirement de la matriz authenticationDetails del registro sin procesar. La tecla está configurada como authenticationStepRequirement . |
properties.authenticationDetails[].authenticationStepResultDetail | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo authenticationStepResultDetail de la matriz authenticationDetails del registro sin procesar. La tecla está configurada como authenticationStepResultDetail . |
properties.authenticationDetails[].succeeded | read_only_udm.security_result.action, read_only_udm.security_result.action_details | Se asigna directamente desde el campo succeeded de la matriz authenticationDetails del registro sin procesar. Si el valor es true , la acción se define como ALLOW . De lo contrario, se define como BLOCK . |
properties.conditionalAccessStatus | read_only_udm.additional.fields.value.string_value | Se asigna directamente desde el campo conditionalAccessStatus del objeto properties del registro sin procesar. La tecla está configurada como conditionalAccessStatus . |
properties.id | read_only_udm.security_result.detection_fields.value | Se asigna directamente desde el campo id del objeto properties del registro sin procesar. La tecla está configurada como id . |
properties.status.errorCode | read_only_udm.security_result.action | Si el valor es 0, la acción se define como ALLOW ; de lo contrario, se define como BLOCK . |
properties.userId | read_only_udm.target.user.userid | Se asigna directamente desde el campo userId del objeto properties del registro sin procesar. |
properties.userPrincipalName | read_only_udm.target.user.email_addresses | Se asigna directamente desde el campo userPrincipalName del objeto properties del registro sin procesar, pero solo si coincide con el patrón de dirección de correo. |
resourceId | read_only_udm.target.resource.name | Se asigna directamente desde el campo resourceId del registro sin procesar. |
Tiempo | read_only_udm.metadata.event_timestamp.seconds, read_only_udm.metadata.event_timestamp.nanos | Se asigna directamente desde el campo time del registro sin procesar. El campo se analiza como una marca de tiempo y se usa para rellenar los campos seconds y nanos . |
read_only_udm.extensions.auth.type | El valor se ha definido como AUTHTYPE_UNSPECIFIED . |
|
read_only_udm.metadata.event_type | El valor se determina en función de la presencia de los campos principal.ip y target.user.userid : si ambos están presentes, el tipo se define como USER_LOGIN ; si solo está presente principal.ip , el tipo se define como STATUS_UPDATE ; de lo contrario, se define como GENERIC_EVENT . |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.