Ingerir registros de actividad de Microsoft Azure
En este documento se describen los pasos necesarios para ingerir registros de actividad de Microsoft Azure (AZURE_ACTIVITY
) en Google Security Operations.
Configurar una cuenta de almacenamiento
Sigue estos pasos para configurar una cuenta de almacenamiento:
- En la consola de Azure, busca Cuentas de almacenamiento.
- Haz clic en Crear.
- Seleccione la suscripción, el grupo de recursos, la región, el rendimiento (se recomienda Estándar) y la redundancia (se recomienda GRS o LRS) que necesite la cuenta. A continuación, introduzca un nombre para la nueva cuenta de almacenamiento.
- Haz clic en Revisar y crear, consulta el resumen de la cuenta y haz clic en Crear.
- En la página Información general de la cuenta de almacenamiento, seleccione Claves de acceso en el panel de navegación de la izquierda de la ventana.
- Haz clic en Mostrar claves y anota la clave compartida de la cuenta de almacenamiento.
- Selecciona Endpoints (Endpoints) en el panel de navegación de la izquierda de la ventana.
- Anota el endpoint del servicio Blob. (https://<storageaccountname>.blob.core.windows.net/)
Configurar el registro de actividad de Azure
Sigue estos pasos para configurar el registro de actividad de Azure:
- En la consola de Azure, busca Monitor.
- En la navegación de la izquierda de la página, haga clic en el enlace Registro de actividad.
- En la parte superior de la ventana, haz clic en Exportar registros de actividad.
- Haz clic en Añadir ajuste de diagnóstico.
- Selecciona todas las categorías que quieras exportar a Google SecOps.
- En Detalles del destino, seleccione Archivar en una cuenta de almacenamiento.
- Selecciona la suscripción y la cuenta de almacenamiento que has creado en el paso anterior.
- Haz clic en Guardar.
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 actividad de Microsoft Azure
- Haz clic en el paquete Plataforma de Azure.
- Busca el feed de actividad de Microsoft Azure.
Especifique los valores de los siguientes campos:
- Tipo de fuente: Microsoft Azure Blob Storage V2
- URI de Azure: introduce el valor del endpoint Blob Service que has registrado antes, seguido de insights-activity-logs (por ejemplo, https://acme-azure-chronicle.blob.core.windows.net/insights-activity-logs).
- Opción de eliminación de la fuente: especifica si quieres eliminar los archivos y directorios después de transferirlos.
- Antigüedad máxima del archivo: incluye los archivos modificados en los últimos días. El valor predeterminado es 180 días.
- Clave compartida: introduce el valor de la clave compartida que has obtenido antes.
Opciones avanzadas
- Nombre del feed: un valor rellenado automáticamente que identifica el feed.
- Espacio de nombres del recurso: 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.
Referencia de asignación de campos
Este código de analizador primero inicializa un gran número de campos en cadenas vacías y, a continuación, realiza una serie de manipulaciones de cadenas y operaciones de análisis de JSON para extraer información relevante del mensaje del registro de actividad de Azure. Por último, asigna los datos extraídos a los campos del modelo de datos unificado (UDM), categoriza el tipo de evento y lo enriquece con detalles adicionales, como la gravedad, la información principal y los datos de red.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
category | read_only_udm.security_result.category_details |
Se asigna directamente desde el campo "category" del registro sin procesar. |
callerIpAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Se asigna directamente desde el campo "callerIpAddress" del registro sin procesar. |
correlationId | read_only_udm.security_result.detection_fields.correlationId |
Se asigna directamente desde el campo "correlationId" del registro sin procesar. |
data.callerIpAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Se asigna directamente desde el campo "callerIpAddress" del objeto "data" del registro sin procesar. |
data.correlationId | read_only_udm.security_result.detection_fields.correlationId |
Se asigna directamente desde el campo "correlationId" del objeto "data" del registro sin procesar. |
data.DeploymentUnit | read_only_udm.target.resource.name |
Se asigna directamente desde el campo "DeploymentUnit" del objeto "data" del registro sin procesar. |
data.details | read_only_udm.metadata.description |
Se asigna directamente desde el campo "details" del objeto "data" del registro sin procesar, solo si el campo "details" no es "Unknown". |
data.entity | read_only_udm.additional.fields.entity |
Se asigna directamente desde el campo "entity" del objeto "data" del registro sin procesar. |
data.EventName | read_only_udm.metadata.product_event_type |
Se asigna directamente desde el campo "EventName" del objeto "data" del registro sin procesar. |
data.hierarchy | read_only_udm.additional.fields.hierarchy |
Se asigna directamente desde el campo "hierarchy" del objeto "data" del registro sin procesar. |
data.identity.authorization.action | read_only_udm.security_result.detection_fields.action |
Se asigna directamente desde el campo "action" del objeto "authorization" del objeto "identity" en el registro sin procesar. |
data.identity.authorization.evidence.principalId | read_only_udm.principal.user.product_object_id , read_only_udm.principal.resource.product_object_id , read_only_udm.principal.group.product_object_id |
Se asigna directamente desde el campo "principalId" del objeto "evidence" del objeto "authorization" del objeto "identity" del registro sin procesar. El campo de UDM específico al que se asigna depende del valor del campo "principalType". Si "principalType" es "User" o "ServicePrincipal", se asigna a principal.user.product_object_id . Si "principalType" es "Group", se asigna a principal.group.product_object_id . Si "principalType" es "ServicePrincipal", se asigna a principal.resource.product_object_id . |
data.identity.authorization.evidence.principalType | read_only_udm.principal.resource.resource_subtype |
Se asigna directamente desde el campo "principalType" del objeto "evidence" del objeto "authorization" del objeto "identity" del registro sin procesar. |
data.identity.authorization.evidence.role | read_only_udm.principal.user.role_name |
Se asigna directamente desde el campo "role" del objeto "evidence" del objeto "authorization" del objeto "identity" del registro sin procesar. |
data.identity.authorization.evidence.roleAssignmentId | read_only_udm.principal.resource.attribute.labels.roleAssignmentId |
Se asigna directamente desde el campo "roleAssignmentId" del objeto "evidence" del objeto "authorization" del objeto "identity" del registro sin procesar. |
data.identity.authorization.evidence.roleAssignmentScope | read_only_udm.principal.resource.attribute.labels.roleAssignmentScope |
Se asigna directamente desde el campo "roleAssignmentScope" del objeto "evidence" del objeto "authorization" del objeto "identity" del registro sin procesar. |
data.identity.authorization.evidence.roleDefinitionId | read_only_udm.principal.resource.attribute.labels.roleDefinitionId |
Se asigna directamente desde el campo "roleDefinitionId" del objeto "evidence" del objeto "authorization" del objeto "identity" del registro sin procesar. |
data.identity.authorization.scope | read_only_udm.security_result.detection_fields.scope |
Se asigna directamente desde el campo "scope" del objeto "authorization" del objeto "identity" en el registro sin procesar. |
data.identity.claims.aio | read_only_udm.security_result.detection_fields.aio |
Se asigna directamente desde el campo "aio" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.appid | read_only_udm.security_result.detection_fields.appid |
Se asigna directamente desde el campo "appid" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.appidacr | read_only_udm.security_result.detection_fields.appidacr |
Se asigna directamente desde el campo "appidacr" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.aud | read_only_udm.security_result.detection_fields.aud |
Se asigna directamente desde el campo "aud" del objeto "claims" del objeto "identity" en el registro sin procesar. |
data.identity.claims.exp | read_only_udm.security_result.detection_fields.exp |
Se asigna directamente desde el campo "exp" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/identityprovider |
read_only_udm.security_result.detection_fields.identityprovider |
Se asigna directamente desde el campo "http://schemas.microsoft.com/identity/claims/identityprovider" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/objectidentifier |
read_only_udm.security_result.detection_fields.objectidentifier |
Se asigna directamente desde el campo "http://schemas.microsoft.com/identity/claims/objectidentifier" del objeto "claims" del objeto "identity" en el registro sin procesar. |
data.identity.claims.http://schemas.microsoft.com/identity/claims/tenantid |
read_only_udm.security_result.detection_fields.tenantid |
Se asigna directamente desde el campo "http://schemas.microsoft.com/identity/claims/tenantid" del objeto "claims" del objeto "identity" en el registro sin procesar. |
data.identity.claims.http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
read_only_udm.security_result.detection_fields.nameidentifier |
Se asigna directamente desde el campo "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.iat | read_only_udm.security_result.detection_fields.iat |
Se asigna directamente desde el campo "iat" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.iss | read_only_udm.security_result.detection_fields.iss |
Se asigna directamente desde el campo "iss" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.nbf | read_only_udm.security_result.detection_fields.nbf |
Se asigna directamente desde el campo "nbf" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.rh | read_only_udm.security_result.detection_fields.rh |
Se asigna directamente desde el campo "rh" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.claims.uti | read_only_udm.security_result.detection_fields.uti |
Se asigna directamente desde el campo "uti" del objeto "claims" del objeto "identity" en el registro sin procesar. |
data.identity.claims.ver | read_only_udm.security_result.detection_fields.ver |
Se asigna directamente desde el campo "ver" del objeto "claims" del objeto "identity" en el registro sin procesar. |
data.identity.claims.xms_tcdt | read_only_udm.security_result.detection_fields.xms_tcdt |
Se asigna directamente desde el campo "xms_tcdt" del objeto "claims" del objeto "identity" del registro sin procesar. |
data.identity.UserName | read_only_udm.principal.user.user_display_name |
Se asigna directamente desde el campo "UserName" del objeto "identity" del registro sin procesar. |
data.level | read_only_udm.security_result.severity , read_only_udm.security_result.severity_details |
Se asigna directamente desde el campo "level" del objeto "data" del registro sin procesar. El campo "level" también se usa para determinar el valor del campo severity . Si "level" es "Information" o "Informational", severity se define como "INFORMATIONAL". Si "level" es "Warning", severity se define como "MEDIUM". Si "level" es "Error", severity se asigna a "ERROR". Si "level" es "Critical", severity se define como "CRITICAL". |
data.location | read_only_udm.target.location.name |
Se asigna directamente desde el campo "location" del objeto "data" del registro sin procesar. |
data.operationName | read_only_udm.metadata.product_event_type |
Se asigna directamente desde el campo "operationName" del objeto "data" del registro sin procesar. |
data.properties.EventChannel | read_only_udm.additional.fields.properties EventChannel |
Se asigna directamente desde el campo "EventChannel" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.EventSource | read_only_udm.additional.fields.properties EventSource |
Se asigna directamente desde el campo "EventSource" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.EventId | read_only_udm.metadata.product_log_id |
Se asigna directamente desde el campo "EventId" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.cause | read_only_udm.security_result.detection_fields.cause |
Se asigna directamente desde el campo "cause" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.clientIPAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Se asigna directamente desde el campo "clientIPAddress" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.compromisedHost | read_only_udm.principal.asset.hostname , read_only_udm.principal.hostname |
Se asigna directamente desde el campo "compromisedHost" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.currentHealthStatus | read_only_udm.security_result.detection_fields.currentHealthStatus |
Se asigna directamente desde el campo "currentHealthStatus" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.previousHealthStatus | read_only_udm.security_result.detection_fields.previousHealthStatus |
Se asigna directamente desde el campo "previousHealthStatus" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.type | read_only_udm.security_result.detection_fields.type |
Se asigna directamente desde el campo "type" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.User | read_only_udm.principal.user.userid |
Se asigna directamente desde el campo "User" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.eventProperties.userName | read_only_udm.principal.user.user_display_name |
Se asigna directamente desde el campo "userName" del objeto "eventProperties" del objeto "properties" del objeto "data" del registro sin procesar, después de eliminar el prefijo "SECURE\". |
data.properties.ipAddress | read_only_udm.principal.asset.ip , read_only_udm.principal.ip |
Se asigna directamente desde el campo "ipAddress" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.legacyChannels | read_only_udm.security_result.detection_fields.legacyChannels |
Se asigna directamente desde el campo "legacyChannels" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.legacyEventDataId | read_only_udm.security_result.detection_fields.legacyEventDataId |
Se asigna directamente desde el campo "legacyEventDataId" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.legacyResourceId | read_only_udm.security_result.detection_fields.legacyResourceId |
Se asigna directamente desde el campo "legacyResourceId" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.legacyResourceGroup | read_only_udm.security_result.detection_fields.legacyResourceGroup |
Se asigna directamente desde el campo "legacyResourceGroup" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.legacyResourceProviderName | read_only_udm.security_result.detection_fields.legacyResourceProviderName |
Se asigna directamente desde el campo "legacyResourceProviderName" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.legacyResourceType | read_only_udm.security_result.detection_fields.legacyResourceType |
Se asigna directamente desde el campo "legacyResourceType" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.legacySubscriptionId | read_only_udm.security_result.detection_fields.legacySubscriptionId |
Se ha asignado directamente desde el campo "legacySubscriptionId" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.operationId | read_only_udm.security_result.detection_fields.operationId |
Se asigna directamente desde el campo "operationId" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.result | read_only_udm.security_result.action_details |
Se asigna directamente desde el campo "result" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.statusCode | read_only_udm.network.http.response_code |
Se asigna directamente desde el campo "statusCode" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.suspiciousCommandLine | read_only_udm.target.process.command_line |
Se asigna directamente desde el campo "suspiciousCommandLine" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.suspiciousProcess | read_only_udm.target.process.file.full_path |
Se asigna directamente desde el campo "suspiciousProcess" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.suspiciousProcessId | read_only_udm.target.process.pid |
Se asigna directamente desde el campo "suspiciousProcessId" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.tlsVersion | read_only_udm.network.tls.version |
Se asigna directamente desde el campo "tlsVersion" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.userAgent | read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
Se asigna directamente desde el campo "userAgent" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.userAgentHeader | read_only_udm.network.http.user_agent , read_only_udm.network.http.parsed_user_agent |
Se asigna directamente desde el campo "userAgentHeader" del objeto "properties" del objeto "data" del registro sin procesar. |
data.properties.userId | read_only_udm.target.user.product_object_id |
Se asigna directamente desde el campo "userId" del objeto "properties" del objeto "data" del registro sin procesar. |
data.ReleaseVersion | read_only_udm.metadata.product_version |
Se asigna directamente desde el campo "ReleaseVersion" del objeto "data" del registro sin procesar. |
data.resourceId | read_only_udm.target.resource.name |
Se asigna directamente desde el campo "resourceId" del objeto "data" del registro sin procesar. |
data.resourceType | read_only_udm.additional.fields.resourceType |
Se asigna directamente desde el campo "resourceType" del objeto "data" del registro sin procesar. |
data.resultDescription | read_only_udm.metadata.description |
Se asigna directamente desde el campo "resultDescription" del objeto "data" del registro sin procesar. |
data.resultSignature | read_only_udm.additional.fields.resultSignature |
Se asigna directamente desde el campo "resultSignature" del objeto "data" del registro sin procesar. |
data.resultType | read_only_udm.security_result.action_details , read_only_udm.additional.fields.resultType |
Se asigna directamente desde el campo "resultType" del objeto "data" del registro sin procesar. |
data.RoleLocation | read_only_udm.target.location.name |
Se asigna directamente desde el campo "RoleLocation" del objeto "data" del registro sin procesar. |
data.time | read_only_udm.metadata.event_timestamp |
El campo "time" del objeto "data" del registro sin procesar se analiza para extraer la marca de tiempo, que se asigna a event_timestamp . |
data.uri | read_only_udm.network.http.referral_url |
Se asigna directamente desde el campo "uri" del objeto "data" del registro sin procesar. |
read_only_udm.extensions.auth.mechanism |
INTERACTIVE |
Se asigna el valor "INTERACTIVE" si el campo "isInteractive" del objeto "properties" del objeto "data" del registro sin procesar es "true". De lo contrario, se le asigna el valor "MECHANISM_OTHER". |
read_only_udm.extensions.auth.type |
MACHINE |
Se le asigna el valor "MACHINE" si el campo "category" del registro sin procesar es "NonInteractiveUserSignInLogs", "ManagedIdentitySignInLogs" o "ServicePrincipalSignInLogs". |
read_only_udm.metadata.log_type |
AZURE_ACTIVITY |
Codificado como "AZURE_ACTIVITY". |
read_only_udm.metadata.vendor_name |
Microsoft |
Codificado como "Microsoft". |
read_only_udm.principal.platform |
WINDOWS , MAC , LINUX , ANDROID |
Se determina en función del valor del campo "properties.test.deviceDetail.operatingSystem". Si contiene "Win", platform se asigna a "WINDOWS". Si contiene "Mac", platform se asigna a "MAC". Si contiene "Lin", platform se asigna a "LINUX". Si contiene "Android", platform se asigna a "ANDROID". |
read_only_udm.principal.resource.type |
SERVICE_ACCOUNT , UNSPECIFIED |
Se determina en función del valor del campo "identity.authorization.evidence.principalType". Si es "ServicePrincipal", type se asigna a "SERVICE_ACCOUNT". De lo contrario, se le asigna el valor "UNSPECIFIED". |
read_only_udm.security_result.action |
ALLOW , BLOCK , UNKNOWN_ACTION |
Se determina en función de los valores de los campos "resultType", "status_errorcode" y "statusText". Si "resultType" es "Success", "success", "Succeeded", "Started", "Resolved", "Active", "Updated", "Start", "Accept", "Accepted" o "0", o si "status_errorcode" es 0, o si "statusText" es "Success", action se define como "ALLOW". Si "resultType" es "Failure" o "Failed", o si "status_errorcode" no está vacío, o si "resultType" no está vacío, action se asigna el valor "BLOCK". De lo contrario, se le asigna el valor "UNKNOWN_ACTION". |
read_only_udm.target.cloud.environment |
MICROSOFT_AZURE |
Codificado como "MICROSOFT_AZURE". |