Recoger registros de auditoría de Azure Storage
En este documento se explica cómo exportar registros de auditoría de Azure Storage a Google Security Operations mediante una cuenta de Azure Storage. El analizador procesa los registros en formato JSON y los transforma en el modelo de datos unificado (UDM). Extrae campos del registro sin procesar, convierte los tipos de datos, enriquece los datos con contexto adicional (como el análisis del user-agent y el desglose de la dirección IP) y asigna los campos extraídos a los campos de UDM correspondientes.
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 para los registros de auditoría de Azure Storage
- Inicia sesión en el portal de Azure con tu cuenta con privilegios.
- Ve a Cuentas de almacenamiento > Configuración de diagnóstico.
- Haga clic en + Añadir ajuste de diagnóstico.
- Selecciona los ajustes de diagnóstico de blob,queue,tableyfile.- Selecciona la opción allLogs en Grupos de categorías para cada ajuste de diagnóstico.
- Escribe un nombre descriptivo para cada ajuste de diagnóstico.
 
- Seleccione la casilla Archivar en una cuenta de almacenamiento como destino.
- Especifica la Suscripción y la Cuenta de almacenamiento.
 
- 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 auditoría de almacenamiento de Azure
- Haz clic en el paquete Plataforma de Azure.
- Busca el tipo de registro Auditoría de almacenamiento de Azure y haz clic en Añadir nuevo feed.
- 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,- <logname>-logs)
 
 
- 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: incluye los 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 | 
|---|---|---|
| callerIpAddress | principal.asset.ip | La dirección IP se extrae del campo callerIpAddressmediante un patrón grok y se asigna aprincipal.asset.ip. | 
| callerIpAddress | principal.ip | La dirección IP se extrae del campo callerIpAddressmediante un patrón grok y se asigna aprincipal.ip. | 
| callerIpAddress | principal.port | El número de puerto se extrae del campo callerIpAddressmediante un patrón grok y se asigna aprincipal.port. | 
| category | security_result.category_details | El valor del campo categoryse asigna asecurity_result.category_details. | 
| correlationId | security_result.detection_fields[0].key | La cadena literal correlationIdse asigna al campo de clave. | 
| correlationId | security_result.detection_fields[0].value | El valor del campo correlationIdse asigna asecurity_result.detection_fields[0].value. El valor del campotimese analiza como una marca de tiempo y se asigna aevent.idm.read_only_udm.metadata.event_timestamp.  SicategoryesStorageWriteyprincipal.user.useridexiste (derivado deproperties.accountName), el valor se define comoUSER_RESOURCE_UPDATE_CONTENT. SicategoryesStorageDeleteyprincipal.user.useridexiste, el valor se define comoUSER_RESOURCE_DELETION. De lo contrario, se le asigna el valorUSER_RESOURCE_ACCESS. La cadena literalAZURE_STORAGE_AUDITse asigna aevent.idm.read_only_udm.metadata.log_type. La cadena literalAZURE_STORAGE_AUDITse asigna aevent.idm.read_only_udm.metadata.product_name. El valor del camposchemaVersionse asigna aevent.idm.read_only_udm.metadata.product_version. La cadena literalAZURE_STORAGE_AUDITse asigna aevent.idm.read_only_udm.metadata.vendor_name. | 
| location | target.location.name | El valor del campo locationse asigna atarget.location.name. | 
| operationName | additional.fields[x].key | La cadena literal operationNamese asigna al campo de clave. | 
| operationName | additional.fields[x].value.string_value | El valor del campo operationNamese asigna aadditional.fields[x].value.string_value. | 
| operationVersion | additional.fields[x].key | La cadena literal operationVersionse asigna al campo de clave. | 
| operationVersion | additional.fields[x].value.string_value | El valor del campo operationVersionse asigna aadditional.fields[x].value.string_value. | 
| properties.accountName | principal.user.userid | El valor del campo properties.accountNamese asigna aprincipal.user.userid. | 
| properties.clientRequestId | additional.fields[x].key | La cadena literal clientRequestIdse asigna al campo de clave. | 
| properties.clientRequestId | additional.fields[x].value.string_value | El valor del campo properties.clientRequestIdse asigna aadditional.fields[x].value.string_value. | 
| properties.etag | additional.fields[x].key | La cadena literal etagse asigna al campo de clave. | 
| properties.etag | additional.fields[x].value.string_value | El valor del campo properties.etagse asigna aadditional.fields[x].value.string_value. | 
| properties.objectKey | additional.fields[x].key | La cadena literal objectKeyse asigna al campo de clave. | 
| properties.objectKey | additional.fields[x].value.string_value | El valor del campo properties.objectKeyse asigna aadditional.fields[x].value.string_value. | 
| properties.requestMd5 | additional.fields[x].key | La cadena literal requestMd5se asigna al campo de clave. | 
| properties.requestMd5 | additional.fields[x].value.string_value | El valor del campo properties.requestMd5se asigna aadditional.fields[x].value.string_value. | 
| properties.responseMd5 | additional.fields[x].key | La cadena literal responseMd5se asigna al campo de clave. | 
| properties.responseMd5 | additional.fields[x].value.string_value | El valor del campo properties.responseMd5se asigna aadditional.fields[x].value.string_value. | 
| properties.serviceType | additional.fields[x].key | La cadena literal serviceTypese asigna al campo de clave. | 
| properties.serviceType | additional.fields[x].value.string_value | El valor del campo properties.serviceTypese asigna aadditional.fields[x].value.string_value. | 
| properties.tlsVersion | network.tls.version | El valor del campo properties.tlsVersionse asigna anetwork.tls.version. | 
| properties.userAgentHeader | network.http.parsed_user_agent | El valor del campo properties.userAgentHeaderse analiza como una cadena user-agent y se asigna anetwork.http.parsed_user_agent. | 
| properties.userAgentHeader | network.http.user_agent | El valor del campo properties.userAgentHeaderse asigna anetwork.http.user_agent. | 
| protocol | network.application_protocol | El valor del campo protocolse asigna anetwork.application_protocol. | 
| resourceId | target.resource.id | El valor del campo resourceIdse asigna atarget.resource.id. | 
| resourceId | target.resource.product_object_id | El valor del campo resourceIdse asigna atarget.resource.product_object_id. La cadena literalDATABASEse asigna atarget.resource.resource_type. | 
| resourceType | additional.fields[x].key | La cadena literal resourceTypese asigna al campo de clave. | 
| resourceType | additional.fields[x].value.string_value | El valor del campo resourceTypese asigna aadditional.fields[x].value.string_value. SistatusTextesSuccess, el valor se define comoALLOW. | 
| statusCode | network.http.response_code | El valor del campo statusCodese convierte en un número entero y se asigna anetwork.http.response_code. La cadena literalMICROSOFT_AZUREse asigna atarget.cloud.environment. | 
| time | timestamp | El valor del campo timese analiza como una marca de tiempo y se asigna atimestamp. | 
| uri | network.http.referral_url | El valor del campo urise asigna anetwork.http.referral_url. | 
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.