Recopila registros de auditoría de Azure Storage
En este documento, se explica cómo exportar los registros de auditoría de Azure Storage a Google Security Operations con 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, realiza conversiones de tipos de datos, enriquece los datos con contexto adicional (como el análisis del usuario-agente y el desglose de la dirección IP) y asigna los campos extraídos a los campos de la AUA correspondientes.
Antes de comenzar
- Asegúrate de tener una instancia de Google SecOps.
- Asegúrate de tener un inquilino de Azure activo.
- Asegúrate de tener acceso con privilegios a Azure.
Configura la cuenta de Azure Storage
- En la consola de Azure, busca Cuentas de almacenamiento.
- Haz clic en Crear.
- Especifica valores para los siguientes parámetros de entrada:
- Subscription: 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: Ingresa un nombre para la cuenta de almacenamiento nueva.
- Haz clic en Revisar + crear.
- Revisa la descripción general de la cuenta y haz clic en Crear.
- En la página Descripción general de la cuenta de almacenamiento, selecciona el submenú Llaves de acceso en Seguridad y herramientas de 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 una ubicación segura para usarla más adelante.
- En la página Descripción general de la cuenta de almacenamiento, selecciona el submenú Puntos finales en Configuración.
- Haz clic en Copiar en el portapapeles para copiar la URL del extremo del servicio de almacenamiento en caché; por ejemplo,
https://<storageaccountname>.blob.core.windows.net
. - Guarda la URL del extremo en una ubicación segura para usarla más adelante.
Configura la exportación de registros para los registros de auditoría de Azure Storage
- Accede al portal de Azure con tu cuenta con privilegios.
- Ve a Cuentas de almacenamiento > Configuración de diagnóstico.
- Haz clic en + Agregar parámetro de configuración de diagnóstico.
- Selecciona la configuración de diagnóstico para
blob
,queue
,table
yfile
.- Selecciona la opción allLogs en Grupos de categorías para cada parámetro de configuración de diagnóstico.
- Ingresa un nombre descriptivo para cada parámetro de configuración de diagnóstico.
- Selecciona la casilla de verificación Archivar en una cuenta de almacenamiento como destino.
- Especifica la Suscripción y la Cuenta de almacenamiento.
- Haz clic en Guardar.
Configura un feed en Google SecOps para transferir los registros de auditoría de Azure Storage
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Agregar nueva.
- En el campo Nombre del feed, ingresa un nombre para el feed, por ejemplo, Registros de auditoría de almacenamiento de Azure.
- Selecciona Microsoft Azure Blob Storage como el Tipo de fuente.
- Selecciona Auditoría de Azure Storage como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- URI de Azure: Es la URL del extremo de blob.
ENDPOINT_URL/BLOB_NAME
- Reemplaza lo siguiente:
ENDPOINT_URL
: La URL del extremo de blob (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: Es el nombre del blob (como<logname>-logs
).
- Reemplaza lo siguiente:
- URI is a: Selecciona el TIPO DE URI según la configuración del flujo de registro (Archivo único | Directorio | Directorio que incluye subdirectorios).
Opciones de eliminación de fuentes: Selecciona la opción de eliminación según tu preferencia.
Clave compartida: Es la clave de acceso a Azure Blob Storage.
Espacio de nombres de recursos: Es el espacio de nombres de recursos.
Etiquetas de transferencia: Es la etiqueta que se aplicará a los eventos de este feed.
- URI de Azure: Es la URL del extremo de blob.
Haz clic en Siguiente.
Revisa la configuración de tu nuevo feed en la pantalla Finalizar y, luego, haz clic en Enviar.
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 callerIpAddress con un patrón grok y se asigna a principal.asset.ip . |
callerIpAddress |
principal.ip |
La dirección IP se extrae del campo callerIpAddress con un patrón grok y se asigna a principal.ip . |
callerIpAddress |
principal.port |
El número de puerto se extrae del campo callerIpAddress con un patrón de grok y se asigna a principal.port . |
category |
security_result.category_details |
El valor del campo category se asigna a security_result.category_details . |
correlationId |
security_result.detection_fields[0].key |
La cadena literal correlationId se asigna al campo de clave. |
correlationId |
security_result.detection_fields[0].value |
El valor del campo correlationId se asigna a security_result.detection_fields[0].value . El valor del campo time se analiza como una marca de tiempo y se asigna a event.idm.read_only_udm.metadata.event_timestamp . Si category es StorageWrite y existe principal.user.userid (derivado de properties.accountName ), el valor se establece en USER_RESOURCE_UPDATE_CONTENT . Si category es StorageDelete y principal.user.userid existe, el valor se establece en USER_RESOURCE_DELETION . De lo contrario, el valor se establece en USER_RESOURCE_ACCESS . La cadena literal AZURE_STORAGE_AUDIT se asigna a event.idm.read_only_udm.metadata.log_type . La cadena literal AZURE_STORAGE_AUDIT se asigna a event.idm.read_only_udm.metadata.product_name . El valor del campo schemaVersion se asigna a event.idm.read_only_udm.metadata.product_version . La cadena literal AZURE_STORAGE_AUDIT se asigna a event.idm.read_only_udm.metadata.vendor_name . |
location |
target.location.name |
El valor del campo location se asigna a target.location.name . |
operationName |
additional.fields[x].key |
La cadena literal operationName se asigna al campo de clave. |
operationName |
additional.fields[x].value.string_value |
El valor del campo operationName se asigna a additional.fields[x].value.string_value . |
operationVersion |
additional.fields[x].key |
La cadena literal operationVersion se asigna al campo de clave. |
operationVersion |
additional.fields[x].value.string_value |
El valor del campo operationVersion se asigna a additional.fields[x].value.string_value . |
properties.accountName |
principal.user.userid |
El valor del campo properties.accountName se asigna a principal.user.userid . |
properties.clientRequestId |
additional.fields[x].key |
La cadena literal clientRequestId se asigna al campo de clave. |
properties.clientRequestId |
additional.fields[x].value.string_value |
El valor del campo properties.clientRequestId se asigna a additional.fields[x].value.string_value . |
properties.etag |
additional.fields[x].key |
La cadena literal etag se asigna al campo de clave. |
properties.etag |
additional.fields[x].value.string_value |
El valor del campo properties.etag se asigna a additional.fields[x].value.string_value . |
properties.objectKey |
additional.fields[x].key |
La cadena literal objectKey se asigna al campo de clave. |
properties.objectKey |
additional.fields[x].value.string_value |
El valor del campo properties.objectKey se asigna a additional.fields[x].value.string_value . |
properties.requestMd5 |
additional.fields[x].key |
La cadena literal requestMd5 se asigna al campo de clave. |
properties.requestMd5 |
additional.fields[x].value.string_value |
El valor del campo properties.requestMd5 se asigna a additional.fields[x].value.string_value . |
properties.responseMd5 |
additional.fields[x].key |
La cadena literal responseMd5 se asigna al campo de clave. |
properties.responseMd5 |
additional.fields[x].value.string_value |
El valor del campo properties.responseMd5 se asigna a additional.fields[x].value.string_value . |
properties.serviceType |
additional.fields[x].key |
La cadena literal serviceType se asigna al campo de clave. |
properties.serviceType |
additional.fields[x].value.string_value |
El valor del campo properties.serviceType se asigna a additional.fields[x].value.string_value . |
properties.tlsVersion |
network.tls.version |
El valor del campo properties.tlsVersion se asigna a network.tls.version . |
properties.userAgentHeader |
network.http.parsed_user_agent |
El valor del campo properties.userAgentHeader se analiza como una cadena de usuario-agente y se asigna a network.http.parsed_user_agent . |
properties.userAgentHeader |
network.http.user_agent |
El valor del campo properties.userAgentHeader se asigna a network.http.user_agent . |
protocol |
network.application_protocol |
El valor del campo protocol se asigna a network.application_protocol . |
resourceId |
target.resource.id |
El valor del campo resourceId se asigna a target.resource.id . |
resourceId |
target.resource.product_object_id |
El valor del campo resourceId se asigna a target.resource.product_object_id . La cadena literal DATABASE se asigna a target.resource.resource_type . |
resourceType |
additional.fields[x].key |
La cadena literal resourceType se asigna al campo de clave. |
resourceType |
additional.fields[x].value.string_value |
El valor del campo resourceType se asigna a additional.fields[x].value.string_value . Si statusText es Success , el valor se establece en ALLOW . |
statusCode |
network.http.response_code |
El valor del campo statusCode se convierte en un número entero y se asigna a network.http.response_code . La cadena literal MICROSOFT_AZURE se asigna a target.cloud.environment . |
time |
timestamp |
El valor del campo time se analiza como una marca de tiempo y se asigna a timestamp . |
uri |
network.http.referral_url |
El valor del campo uri se asigna a network.http.referral_url . |
Cambios
2024-12-12
- Se asignaron
identity.tokenHash
,identity.type
,identity.requester.appId
,identity.requester.tenantId
,identity.requester.tokenIssuer
,properties.sourceAccessTier
,principal.type
,auth.action
,auth.roleAssignmentId
yauth.roleDefinitionId
aadditional.fields
. - Se asignó
identity.requester.upn
asrc.user.userid
. - Se asignó
identity.requester.objectId
asrc.user.product_object_id
.
2024-12-06
- Se asignó
smbCommandMinor
asecurity_result.action_details
.
2024-07-31
- Se inicializaron
statusText
ycorrelationId
como nulos.
2024-04-08
- Sin embargo, el analizador se creó recientemente.
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.