Recopila registros de Azure Application Gateway
En este documento, se explica cómo recopilar registros de Azure Application Gateway configurando un feed de Google Security Operations. Este analizador controla las estructuras JSON de uno o varios registros, extrae campos del array "records", realiza conversiones de tipos de datos, asigna campos al UDM y enriquece los datos con metadatos y campos derivados, como el tipo de conexión de red. También controla la lógica específica para diferentes valores de operationName
, y extrae las direcciones IP, las subredes y otros detalles de configuración pertinentes.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso con privilegios a una suscripción de Azure
- Un entorno (inquilino) de la puerta de enlace de aplicación de Azure en 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:
- 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: Ingresa un nombre para la nueva cuenta de almacenamiento.
- Haz clic en Revisar + crear.
- Revisa el resumen de la cuenta y haz clic en Crear.
- En la página Descripción general de la cuenta de almacenamiento, selecciona el submenú Claves de acceso en Seguridad y redes.
- Haz clic en Mostrar junto a key1 o key2.
- Haz clic en Copiar en el portapapeles para copiar la clave.
- Guarda la llave en una ubicación segura para usarla más adelante.
- En la página Información general de la cuenta de almacenamiento, selecciona el submenú Extremos en Configuración.
- Haz clic en Copiar al portapapeles para copiar la URL del extremo del servicio Blob. (por ejemplo,
https://<storageaccountname>.blob.core.windows.net
) - Guarda la URL del extremo en una ubicación segura para usarla más adelante.
Cómo configurar Azure Application Gateway
- Accede al portal de Azure.
- Ve al grupo de recursos que desees.
- Selecciona Puerta de enlace de aplicación (aparecerá la ventana Puerta de enlace de aplicación).
- En la sección Monitoring, selecciona Configuración de diagnóstico > Activar el diagnóstico.
- Selecciona Agregar configuración de diagnóstico (en la ventana Configuración de diagnóstico, se muestran los parámetros de configuración de los registros de diagnóstico).
- En la sección log, haz lo siguiente:
- Selecciona la casilla de verificación ApplicationGatewayAccessLog.
- Selecciona la casilla de verificación ApplicationGatewayFirewallLog.
- Para almacenar registros en la cuenta de almacenamiento, haz lo siguiente:
- Selecciona la casilla de verificación Archivar en una cuenta de almacenamiento.
- En la lista Subscription, selecciona una suscripción existente.
- En la lista Cuenta de almacenamiento, selecciona una cuenta de almacenamiento existente.
Configura feeds
Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:
- Configuración del SIEM > Feeds > Agregar nuevo
- Centro de contenido > Paquetes de contenido > Comenzar
Cómo configurar el feed de la puerta de enlace de la aplicación de Azure
- Haz clic en el paquete Azure Platform.
- Ubica el tipo de registro Azure Application Gateway y haz clic en Agregar nuevo feed.
Especifica valores para los siguientes campos:
- Tipo de fuente: Microsoft Azure Blob Storage V2
- URI de Azure: Es la URL del extremo del blob.
ENDPOINT_URL/BLOB_NAME
- Reemplaza lo siguiente:
ENDPOINT_URL
: Es la URL del extremo del blob. (https://<storageaccountname>.blob.core.windows.net
)BLOB_NAME
: Es el nombre del blob. (comoinsights-logs-<logname>
)
- Reemplaza lo siguiente:
- Opciones de eliminación de la fuente: Selecciona la opción de eliminación según tus preferencias de transferencia.
- Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días más reciente. El valor predeterminado es de 180 días.
- Clave compartida: Es la clave compartida (una cadena aleatoria de 512 bits en codificación base-64) que se usa para acceder a los recursos de Azure.
Opciones avanzadas
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Espacio de nombres del recurso: Espacio de nombres asociado al feed.
- Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.
Haz clic en Crear feed.
Para obtener más información sobre cómo configurar varios feeds para diferentes tipos de registros dentro de esta familia de productos, consulta Configura feeds por producto.
Tabla de asignación de UDM
Campo de registro | Asignación de UDM | Lógica |
---|---|---|
Category |
metadata.product_event_type |
Se asigna directamente desde el campo Category . |
ClientOperationId |
additional.fields[].key:"ClientOperationId", value.string_value |
Se asigna directamente desde el campo ClientOperationId . |
CorrelationRequestId |
additional.fields[].key:"CorrelationRequestId", value.string_value |
Se asigna directamente desde el campo CorrelationRequestId . |
GatewayManagerVersion |
additional.fields[].key:"GatewayManagerVersion", value.string_value |
Se asigna directamente desde el campo GatewayManagerVersion . |
category |
metadata.product_event_type |
Se asigna directamente desde el campo category . |
level |
security_result.severity |
Se asigna directamente desde el campo level y se convierte a mayúsculas. Si el valor es "WARNING", la gravedad se establece en "HIGH" y security_result.severity_details se establece en el valor original. |
properties.clientIP |
principal.ip , principal.asset.ip |
Se asigna directamente desde el campo properties.clientIP . |
properties.clientPort |
principal.port |
Se asigna directamente desde el campo properties.clientPort y se convierte en un número entero. |
properties.clientResponseTime |
additional.fields[].key:"clientResponseTime", value.string_value |
Se asigna directamente desde el campo properties.clientResponseTime . |
properties.configuration.BgpConfiguration.GatewayConfig.Asn |
security_result.detection_fields[].key:"ASN", value |
Se asigna directamente desde el campo properties.configuration.BgpConfiguration.GatewayConfig.Asn cuando operationName es "SetGatewayConfiguration". |
properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress |
target.ip , target.asset.ip |
Se asigna directamente desde el campo properties.configuration.BgpConfiguration.GatewayConfig.PeerAddress cuando operationName es "SetGatewayConfiguration". |
properties.configuration.BgpConfiguration.GatewayConfig.PeerType |
security_result.detection_fields[].key:"PeerType", value |
Se asigna directamente desde el campo properties.configuration.BgpConfiguration.GatewayConfig.PeerType cuando operationName es "SetGatewayConfiguration". |
properties.configuration.IkeVersion |
principal.resource.attribute.labels[].key:"ike_version", value |
Se asigna directamente desde el campo properties.configuration.IkeVersion cuando operationName es "SetConnectionConfiguration". |
properties.configuration.LocalSubnets |
principal.resource.attribute.labels[].key:"local subnets", value |
Es una cadena concatenada de direcciones IP del array properties.configuration.LocalSubnets cuando operationName es "SetConnectionConfiguration". |
properties.configuration.LocalTunnelEndpoint |
principal.ip , principal.asset.ip |
Se asigna directamente desde el campo properties.configuration.LocalTunnelEndpoint cuando operationName es "SetConnectionConfiguration". |
properties.configuration.Name |
principal.hostname , principal.asset.hostname |
Se asigna directamente desde el campo properties.configuration.Name . Si está vacío, el valor se toma de properties.instance . |
properties.configuration.RemoteSite |
target.hostname , target.asset.hostname |
Se asigna directamente desde el campo properties.configuration.RemoteSite . |
properties.configuration.RemoteSubnets |
principal.resource.attribute.labels[].key:"remote subnets", value |
Es una cadena concatenada de direcciones IP del array properties.configuration.RemoteSubnets cuando operationName es "SetConnectionConfiguration". |
properties.configuration.RemoteTunnelEndpoint |
target.ip , target.asset.ip |
Se asigna directamente desde el campo properties.configuration.RemoteTunnelEndpoint cuando operationName es "SetConnectionConfiguration". |
properties.configuration.VIPAddress |
principal.ip , principal.asset.ip |
Se asigna directamente desde el campo properties.configuration.VIPAddress cuando operationName es "SetGatewayConfiguration". |
properties.configuration.VirtualNetworkRanges |
principal.resource.attribute.labels[].key:"virutal network ranges", value |
Es una cadena concatenada de direcciones IP del array properties.configuration.VirtualNetworkRanges cuando operationName es "SetGatewayConfiguration". |
properties.configuration.VirtualNetworkSubnets |
principal.resource.attribute.labels[].key:"virtual network subnets", value |
Es una cadena concatenada de direcciones IP del array properties.configuration.VirtualNetworkSubnets cuando operationName es "SetGatewayConfiguration". |
properties.error_info |
additional.fields[].key:"error_info", value.string_value |
Se asigna directamente desde el campo properties.error_info . |
properties.host |
principal.hostname , principal.asset.hostname |
Se asigna directamente desde el campo properties.host si properties.originalHost está vacío. |
properties.httpMethod |
network.http.method |
Se asigna directamente desde el campo properties.httpMethod . |
properties.httpStatus |
network.http.response_code |
Se asigna directamente desde el campo properties.httpStatus y se convierte en un número entero. |
properties.httpVersion |
network.application_protocol |
Se establece en "HTTP" si el campo properties.httpVersion contiene "HTTP". |
properties.instance |
principal.hostname , principal.asset.hostname |
Se usa como el valor de principal.hostname si properties.configuration.Name está vacío. |
properties.message |
metadata.description |
Se asigna directamente desde el campo properties.message . |
properties.operationName |
additional.fields[].key:"operationName", value.string_value |
Se asigna directamente desde el campo properties.operationName . |
properties.operationStatus |
security_result.category_details |
Se asigna directamente desde el campo properties.operationStatus . Si el valor es "Success" o "InProgress", security_result.action se establece en "ALLOW". |
properties.originalHost |
principal.hostname , principal.asset.hostname |
Se asigna directamente desde el campo properties.originalHost . |
properties.originalRequestUriWithArgs |
additional.fields[].key:"originalRequestUriWithArgs", value.string_value |
Se asigna directamente desde el campo properties.originalRequestUriWithArgs . |
properties.receivedBytes |
network.received_bytes |
Se asigna directamente desde el campo properties.receivedBytes y se convierte en un número entero sin signo. |
properties.requestQuery |
additional.fields[].key:"requestQuery", value.string_value |
Se asigna directamente desde el campo properties.requestQuery . |
properties.requestUri |
target.url |
Se asigna directamente desde el campo properties.requestUri . |
properties.sentBytes |
network.sent_bytes |
Se asigna directamente desde el campo properties.sentBytes y se convierte en un número entero sin signo. |
properties.serverResponseLatency |
additional.fields[].key:"Server Response Latency", value.string_value |
Se asigna directamente desde el campo properties.serverResponseLatency . |
properties.serverRouted |
target.ip , target.asset.ip , target.port |
La IP y el puerto se extraen del campo properties.serverRouted con una expresión regular. |
properties.sslCipher |
network.tls.cipher |
Se asigna directamente desde el campo properties.sslCipher . |
properties.sslClientCertificateIssuerName |
network.tls.server.certificate.issuer |
Se asigna directamente desde el campo properties.sslClientCertificateIssuerName . |
properties.sslProtocol |
network.tls.version |
Se asigna directamente desde el campo properties.sslProtocol . |
properties.timeTaken |
additional.fields[].key:"timeTaken", value.string_value |
Se asigna directamente desde el campo properties.timeTaken . |
properties.transactionId |
network.session_id |
Se asigna directamente desde el campo properties.transactionId . |
properties.userAgent |
network.http.user_agent , network.http.parsed_user_agent |
Se asigna directamente desde el campo properties.userAgent . Además, el campo se convierte en un usuario-agente analizado y se asigna a network.http.parsed_user_agent . |
properties.WAFEvaluationTime |
additional.fields[].key:"WAFEvaluationTime", value.string_value |
Se asigna directamente desde el campo properties.WAFEvaluationTime . |
properties.WAFMode |
additional.fields[].key:"WAFMode", value.string_value |
Se asigna directamente desde el campo properties.WAFMode . |
resourceId |
target.resource.id |
Se asigna directamente desde el campo resourceId . |
resourceid |
target.resource.product_object_id |
Se asigna directamente desde el campo resourceid . |
ruleName |
security_result.rule_name |
Se asigna directamente desde el campo ruleName . |
time /timeStamp |
metadata.event_timestamp , timestamp |
Se analiza como una marca de tiempo con el formato RFC 3339 o ISO8601. Se prefiere timeStamp , pero se usa time si timeStamp no está presente. |
(Lógica del analizador) | metadata.event_type |
Se establece en "NETWORK_CONNECTION" si están presentes tanto el principal como el objetivo, en "STATUS_UPDATE" si solo está presente el principal y en "GENERIC_EVENT" en los demás casos. |
(Lógica del analizador) | metadata.product_name |
Establece el valor en "Puerta de enlace de Azure". |
(Lógica del analizador) | metadata.vendor_name |
Se establece en "Microsoft". |
(Lógica del analizador) | has_principal |
Es una marca booleana establecida en "true" si se extrae información principal (nombre de host, IP o puerto) y en "false" en caso contrario. |
(Lógica del analizador) | has_target |
Es una marca booleana que se establece en "true" si se extrae información de destino (nombre de host, IP, puerto, ID de recurso o URL) y en "false" en caso contrario. |
(Lógica del analizador) | disambiguation_key |
Se agrega cuando se extraen varios eventos de una sola entrada de registro. |