Recoger registros de Azure Application Gateway
En este documento se explica cómo recoger registros de Azure Application Gateway configurando un feed de Google Security Operations. Este analizador gestiona estructuras JSON de uno o varios registros, extrae campos de la matriz "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 gestiona la lógica específica de los distintos valores de operationName
, extrayendo las direcciones IP, las subredes y otros detalles de configuración relevantes.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a una suscripción de Azure
- Un entorno de puerta de enlace de aplicaciones de Azure (inquilino) en Azure
Configurar la cuenta de Azure Storage
- En la consola de Azure, busca Cuentas de almacenamiento.
- Haz clic en Crear.
- Especifique 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: 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 Resumen de la cuenta de almacenamiento, seleccione el submenú Claves de acceso en Seguridad y redes.
- Haz clic en Mostrar junto a tecla1 o tecla2.
- 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 Azure Application Gateway
- Inicia sesión en el portal de Azure.
- Ve al grupo de recursos que quieras.
- Selecciona Puerta de enlace de aplicaciones (aparecerá la ventana Puerta de enlace de aplicaciones).
- En la sección Monitorización, selecciona Ajustes de diagnóstico > Activar diagnóstico.
- Selecciona Añadir ajuste de diagnóstico (en la ventana Ajustes de diagnóstico se muestran los ajustes de los registros de diagnóstico).
- En la sección Registro, haz lo siguiente:
- Seleccione la casilla ApplicationGatewayAccessLog.
- Seleccione la casilla ApplicationGatewayFirewallLog.
- Para almacenar registros en la cuenta de almacenamiento, haga lo siguiente:
- Marca la casilla Archivar en una cuenta de almacenamiento.
- En la lista Suscripción, selecciona una suscripción.
- En la lista Cuenta de almacenamiento, seleccione una 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
- Centro de contenido > Paquetes de contenido > Empezar
Cómo configurar el feed de la pasarela de aplicaciones de Azure
- Haz clic en el paquete Plataforma de Azure.
- Busca el tipo de registro Azure Application Gateway 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,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: incluye los archivos modificados en los últimos días. El valor predeterminado es de 180 días.
- Clave compartida: clave compartida (una cadena aleatoria de 512 bits codificada en base 64) que se usa para acceder a los recursos de Azure.
Opciones avanzadas
- Nombre del feed: 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 |
---|---|---|
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 define como "HIGH" y security_result.severity_details se asigna al 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 |
Cadena concatenada de direcciones IP de la matriz 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 |
Cadena concatenada de direcciones IP de la matriz 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 |
Cadena concatenada de direcciones IP de la matriz properties.configuration.VirtualNetworkRanges cuando operationName es "SetGatewayConfiguration". |
properties.configuration.VirtualNetworkSubnets |
principal.resource.attribute.labels[].key:"virtual network subnets", value |
Cadena concatenada de direcciones IP de la matriz 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 define como "HTTP" si el campo properties.httpVersion contiene "HTTP". |
properties.instance |
principal.hostname , principal.asset.hostname |
Se usa como 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 define como "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 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 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 mediante 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 user-agent 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 ISO 8601. Se recomienda usar timeStamp , pero se usa time si timeStamp no está presente. |
(Lógica del analizador) | metadata.event_type |
Se asigna el valor "NETWORK_CONNECTION" si están presentes tanto el principal como el objetivo, "STATUS_UPDATE" si solo está presente el principal y "GENERIC_EVENT" en los demás casos. |
(Lógica del analizador) | metadata.product_name |
Selecciona "Azure Gateway". |
(Lógica del analizador) | metadata.vendor_name |
Selecciona "Microsoft". |
(Lógica del analizador) | has_principal |
Marca booleana, con el valor "true" si se extrae información principal (nombre de host, IP o puerto) y "false" en caso contrario. |
(Lógica del analizador) | has_target |
Una marca booleana que se asigna al valor "true" si se extrae información de destino (nombre de host, IP, puerto, ID de recurso o URL) y "false" en caso contrario. |
(Lógica del analizador) | disambiguation_key |
Se añade cuando se extraen varios eventos de una sola entrada de registro. |