Recopilar registros de Akamai WAF
En este documento se explica cómo exportar e ingerir registros de WAF de Akamai en Google Security Operations mediante Google Cloud Storage o AWS S3.
El analizador gestiona los registros y admite los formatos syslog y CEF. Extrae campos como direcciones IP, URLs, métodos HTTP, códigos de respuesta, agentes de usuario e información de reglas de seguridad, y los asigna al modelo de datos unificado (UDM) para que se representen de forma coherente. El analizador también gestiona campos específicos de Akamai, como attackData
y clientReputation
, y realiza las transformaciones de datos necesarias, así como enriquece la salida de UDM.
Antes de empezar
Asegúrate de que cumples los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a Google Cloud o AWS
- Acceso privilegiado a Akamai
Exportar e ingerir registros de Akamai WAF desde Cloud Storage
En esta sección se describe el primer paso del proceso: configurar el almacenamiento necesario para los registros de tu WAF de Akamai.
Crea un Google Cloud segmento de almacenamiento
- Inicia sesión en la Google Cloud consola.
Ve a la página Segmentos de Cloud Storage.
Haz clic en Crear.
En la página Crear un bucket, introduce la información del bucket. Después de cada uno de los pasos siguientes, haga clic en Continuar para pasar al siguiente:
En la sección Empezar, haz lo siguiente:
- Introduce un nombre único que cumpla los requisitos de nombres de segmentos (por ejemplo,
akamai-waf-logs
). - Para habilitar el espacio de nombres jerárquico, haz clic en la flecha para desplegar la sección Optimizar para cargas de trabajo orientadas a archivos y con gran cantidad de datos y, a continuación, selecciona Habilitar espacio de nombres jerárquico en este bucket.
- Para añadir una etiqueta de contenedor, haz clic en la flecha para desplegar la sección Etiquetas.
- Haga clic en Añadir etiqueta y especifique una clave y un valor para la etiqueta.
- Introduce un nombre único que cumpla los requisitos de nombres de segmentos (por ejemplo,
En la sección Elige dónde quieres almacenar los datos, haz lo siguiente:
- Selecciona un Tipo de ubicación.
- Usa el menú desplegable del tipo de ubicación para seleccionar una Ubicación donde se almacenarán permanentemente los datos de los objetos de tu segmento.
- Para configurar la replicación entre contenedores, despliega la sección Configurar la replicación entre contenedores.
En la sección Elige una clase de almacenamiento para tus datos, selecciona una clase de almacenamiento predeterminada para el segmento o Autoclass para gestionar automáticamente la clase de almacenamiento de los datos del segmento.
En la sección Elige cómo quieres controlar el acceso a los objetos, selecciona no para aplicar la prevención del acceso público y elige un modelo de control de acceso para los objetos del segmento.
En la sección Elige cómo proteger los datos de los objetos, haz lo siguiente:
- Selecciona cualquiera de las opciones de Protección de datos que quieras configurar para tu contenedor.
- Para elegir cómo se cifrarán los datos de los objetos, haga clic en la flecha del desplegable Cifrado de datos y seleccione un Método de cifrado de datos.
Haz clic en Crear.
Configurar permisos de Cloud Storage
Ve a la página Crear cuenta de servicio.
Selecciona un proyecto de Google Cloud.
Escribe el nombre de la cuenta de servicio, que será el que se muestre en la Google Cloud consola.
Haz clic en Crear y continuar.
Concede el rol roles/storage.admin en el segmento.
Haz clic en Hecho para terminar de crear la cuenta de servicio.
Crear y descargar un Google Cloud archivo de clave de cuenta de servicio
Ve a la página Cuentas de servicio.
Selecciona un proyecto Google Cloud.
Haz clic en la dirección de correo de la cuenta de servicio que acabas de crear.
Haga clic en la pestaña Claves.
Haz clic en el menú Añadir clave y, a continuación, selecciona Crear clave.
Selecciona JSON como tipo de clave y haz clic en Crear.
- Al hacer clic en Crear, se descarga un archivo de clave de cuenta de servicio. Una vez que hayas descargado el archivo de clave, no podrás volver a descargarlo.
- La clave descargada tiene el siguiente formato, donde
PRIVATE_KEY
es la parte privada del par de claves pública y privada.
Configurar Akamai WAF para enviar registros a Cloud Storage
- Inicia sesión en Akamai Control Center.
- Ve a la sección Seguridad.
- Selecciona Registros.
- Configura un nuevo registro de entrega:
- Fuente de registro: selecciona la configuración de tu WAF.
- Destino: selecciona Google Cloud Storage.
- Nombre visible: introduce una descripción única.
- Segmento: especifica el nombre del segmento de Cloud Storage que has creado (por ejemplo,
gs://akamai-waf-logs/
). - ID del proyecto: introduce el ID único de tu Google Cloud proyecto.
- Nombre de cuenta de servicio: introduce el nombre de la cuenta de servicio que has creado anteriormente.
- Clave privada: introduce el valor private_key de la clave JSON que has generado y descargado anteriormente. (Debe introducir su clave privada en formato PEM con símbolos de salto de línea (\n). Por ejemplo,
-----BEGIN PRIVATE KEY-----\nprivate_key\n-----END PRIVATE KEY-----\n
). - Formato de registro: elige el formato de registro que quieras (por ejemplo, JSON).
- Frecuencia de envío: selecciona la frecuencia con la que quieres que se envíen los registros (por ejemplo,
every 60 seconds
).
Haz clic en Validar y guardar para validar la conexión con el destino y guardar los detalles que has proporcionado.
Haz clic en Siguiente para ir a la pestaña Resumen.
Configurar feeds
Para configurar un feed, sigue estos pasos:
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En la página siguiente, haga clic en Configurar un solo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de WAF de Akamai).
- Seleccione Google Cloud Storage como Tipo de origen.
- Seleccione Akamai WAF como Tipo de registro.
- Haz clic en Obtener cuenta de servicio en Cuenta de servicio de Chronicle.
- Haz clic en Siguiente.
Especifique los valores de los siguientes parámetros de entrada:
- URI de segmento de almacenamiento: Google Cloud URL de segmento de almacenamiento (por ejemplo,
gs://akamai-waf-logs/
). Esta URL debe terminar con una barra inclinada (/). - El URI es un: selecciona Directorio que incluye subdirectorios.
- Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- URI de segmento de almacenamiento: Google Cloud URL de segmento de almacenamiento (por ejemplo,
Haz clic en Siguiente.
Revise la configuración del nuevo feed en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Exportar e ingerir registros de Akamai WAF desde AWS S3
En esta sección se explican los pasos iniciales para configurar el segmento de Amazon S3 de forma que reciba y almacene los registros de Akamai WAF.
Configurar un segmento de Amazon S3
- Crea un segmento de Amazon S3 siguiendo esta guía de usuario: Crear un segmento.
- Guarda el nombre y la región del bucket para consultarlos más adelante.
- Crea un usuario siguiendo esta guía: Crear un usuario de gestión de identidades y accesos.
- Selecciona el Usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- En la sección Claves de acceso, haz clic en Crear clave de acceso.
- Selecciona Servicio de terceros en Caso práctico.
- Haz clic en Siguiente.
- Opcional: añade una etiqueta de descripción.
- Haz clic en Crear clave de acceso.
- Haz clic en Descargar archivo CSV para guardar la clave de acceso y la clave de acceso secreta para futuras consultas.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Añadir permisos en la sección Políticas de permisos.
- Selecciona Añadir permisos.
- Seleccione Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Añadir permisos.
Configurar Akamai WAF para enviar registros a Amazon S3
- Inicia sesión en Akamai Control Center.
- Ve a la sección Seguridad.
- Selecciona Registros.
Configura un nuevo envío de registros:
- Fuente de registro: selecciona la configuración de tu WAF.
- Destino: elige Amazon S3.
- Segmento de S3: especifica el nombre del segmento de S3 que has creado.
- Región: selecciona la región de AWS en la que se encuentra tu contenedor de S3.
- ID de clave de acceso y clave de acceso secreta: proporciona las credenciales que has generado.
- Formato de registro: elige el formato de registro que quieras (por ejemplo, JSON).
Frecuencia de entrega: selecciona la frecuencia con la que quieres que se entreguen los registros (por ejemplo, cada 5 minutos).
Verifica la entrega de registros:
- Después de configurar LDS, monitoriza el segmento de S3 para ver si hay archivos de registro entrantes.
Configurar feeds desde Configuración de SIEM > Feeds con AWS S3
Para configurar un feed, sigue estos pasos:
- Ve a Configuración de SIEM > Feeds.
- Haz clic en Añadir feed.
- En la página siguiente, haga clic en Configurar un solo feed.
- En el campo Nombre del feed, introduce un nombre para el feed (por ejemplo, Registros de WAF de Akamai).
- Selecciona Amazon S3 como Tipo de fuente.
- Seleccione Akamai WAF como Tipo de registro.
- Haz clic en Siguiente.
Especifique los valores de los siguientes parámetros de entrada:
- Región: la región en la que se encuentra el segmento de Amazon S3.
- URI de S3: el URI del segmento.
s3:/BUCKET_NAME
Sustituye lo siguiente:BUCKET_NAME
: el nombre del segmento.
- El URI es un: selecciona el tipo de URI según la configuración del flujo de registros: Archivo único, Directorio o Directorio que incluye subdirectorios.
- Opciones de eliminación de la fuente: selecciona la opción de eliminación que prefieras.
- ID de clave de acceso: la clave de acceso del usuario con acceso al segmento de S3.
- Clave de acceso secreta: la clave secreta del usuario con acceso al segmento de S3.
Haz clic en Siguiente.
Revise la configuración de la nueva fuente en la pantalla Finalizar y, a continuación, haga clic en Enviar.
Tabla de asignación de UDM
Campo de registro (ascendente) | Asignación de UDM | Lógica |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Dirección IP del cliente que inicia la solicitud. Extraído del campo attackData.clientIP de los registros akamai_siem. |
attackData.configId |
metadata.product_log_id |
ID de configuración de seguridad. Extraído del campo attackData.configId de los registros akamai_siem. También se ha añadido como detection_field en el objeto security_result. |
attackData.policyId |
N/A | Se usa en la lógica del analizador para rellenar security_result.summary con el valor PolicyId:[value] . |
attackData.ruleActions |
security_result.action , security_result.action_details |
Acciones realizadas en función de la regla activada. Extraído del campo attackData.ruleActions de los registros akamai_siem. "deny" se asigna a BLOCK, mientras que otros valores ("alert", "monitor", "allow" y "tarpit") se asignan a ALLOW. El valor original también se almacena en action_details . |
attackData.ruleData |
security_result.detection_fields |
Datos asociados a la regla activada. Extraído del campo attackData.ruleData de los registros akamai_siem. Se ha añadido a security_result.detection_fields con la clave "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Mensajes asociados a la regla activada. Extraído del campo attackData.ruleMessages de los registros akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Selectores asociados a la regla activada. Extraído del campo attackData.ruleSelectors de los registros akamai_siem. Se ha añadido a security_result.detection_fields con la clave "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Etiquetas asociadas a la regla activada. Extraído del campo attackData.ruleTags de los registros akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Versiones de las reglas activadas. Extraído del campo attackData.ruleVersions de los registros akamai_siem. Se ha añadido a security_result.detection_fields con la clave "Rule Version". |
clientReputation |
principal.labels |
Información sobre la reputación del cliente. Extraído del campo clientReputation de los registros akamai_siem. Se ha añadido como etiqueta al principal con la clave "reputation". |
cliIP , cli_ip , principal_ip |
principal.ip , principal.asset.ip |
Dirección IP del cliente. Se extrae de cliIP , cli_ip o principal_ip , en función del formato del registro. |
cp |
additional.fields |
Código de CP. Extraído del campo cp . Se ha añadido a additional.fields con la clave "cp". |
eventId |
metadata.product_log_id |
ID de evento. Extraído del campo eventId . |
eventTime , log_date |
metadata.event_timestamp |
Marca de tiempo del evento. Se extrae de eventTime o se analiza a partir de log_date , según el formato del registro. |
eventType.eventDefinition.eventDefinitionId |
target.resource.product_object_id |
ID de definición de evento. Extraído de eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Descripción del evento. Extraído de eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nombre del evento. Extraído de eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
ID del tipo de evento. Extraído de eventType.eventTypeId . Se ha añadido a additional.fields con la clave "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Nombre del tipo de evento. Extraído de eventType.eventTypeName . Se ha añadido a additional.fields con la clave "eventTypeName". |
format |
N/A | Usado por el analizador para determinar el formato del registro. |
geo.asn |
principal.location.name |
Número de sistema autónomo (ASN). Se extrae de geo.asn o AkamaiSiemASN , según el formato del registro. El valor tiene el prefijo "ASN ". |
geo.city |
principal.location.city |
Ciudad. Se extrae de geo.city o AkamaiSiemCity , según el formato del registro. |
geo.country |
principal.location.country_or_region |
País. Se extrae de geo.country o AkamaiSiemContinent , según el formato del registro. |
httpMessage.bytes |
network.sent_bytes |
Bytes enviados en el mensaje HTTP. Extraído de httpMessage.bytes . |
httpMessage.host |
target.hostname , target.asset.hostname |
Nombre de host. Se extrae de httpMessage.host o reqHost , según el formato del registro. |
httpMessage.method |
network.http.method |
Método HTTP. Se extrae de httpMessage.method , network_http_method o reqMethod , en función del formato del registro. Se ha convertido a mayúsculas. |
httpMessage.path |
target.url |
Ruta de la solicitud. Se extrae de httpMessage.path , target_url o reqPath , en función del formato del registro. Si httpMessage.query está presente, se añade a la ruta con el separador "?". |
httpMessage.port |
target.port |
Puerto. Se extrae de httpMessage.port o reqPort , según el formato del registro. |
httpMessage.protocol |
N/A | Usado por el analizador para determinar el protocolo. |
httpMessage.query |
N/A | Se usa en la lógica del analizador para añadirlo a httpMessage.path si está presente. |
httpMessage.requestId |
network.session_id |
ID de solicitud. Se extrae de httpMessage.requestId o reqId , según el formato del registro. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
Encabezados de solicitud. Se extrae de httpMessage.requestHeaders o AkamaiSiemRequestHeaders , según el formato del registro. Se ha añadido a additional.fields con la clave "AkamaiSiemRequestHeaders". |
httpMessage.responseHeaders , AkamaiSiemResponseHeaders |
additional.fields |
Encabezados de respuesta. Se extrae de httpMessage.responseHeaders o AkamaiSiemResponseHeaders , según el formato del registro. Se ha añadido a additional.fields con la clave "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Código de respuesta HTTP. Extraído de httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code o statusCode , según el formato del registro. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Versión de TLS. Se extrae de httpMessage.tls , AkamaiSiemTLSVersion o tlsVersion , en función del formato del registro. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
User-agent. Extraído de httpMessage.useragent , network_http_user_agent , UA o useragent , según el formato del registro. |
log_description |
metadata.description |
Descripción del registro. Extraído de log_description . |
log_rule |
security_result.rule_name |
Regla de registro. Extraído de log_rule . |
message |
N/A | El mensaje de registro sin procesar. Usada por el analizador para varias extracciones. |
network_http_referral_url |
network.http.referral_url |
URL de referencia HTTP. Extraído de network_http_referral_url . |
proto |
N/A | Se usa en la lógica del analizador para rellenar security_result.summary si attackData.policyId no está presente. |
reqHost |
target.hostname , target.asset.hostname |
Solicitar host. Extraído de reqHost . |
reqId |
metadata.product_log_id , network.session_id |
ID de solicitud. Extraído de reqId . |
reqMethod |
network.http.method |
Método de solicitud. Extraído de reqMethod . |
reqPath |
target.url |
Ruta de la solicitud. Extraído de reqPath . |
reqPort |
target.port |
Solicita la portabilidad. Extraído de reqPort . |
rspContentType |
target.file.mime_type |
Tipo de contenido de la respuesta. Extraído de rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Reglas de seguridad. Extraído de securityRules . La primera parte se asigna a rule_name y el resto se añade como etiquetas con las claves "non_deny_rules" y "deny_rule_format". |
statusCode |
network.http.response_code |
Código de estado. Extraído de statusCode . |
state |
principal.location.state , target.user.personal_address.state |
Estado. Extraído de state . |
tlsVersion |
network.tls.version |
Versión de TLS. Extraído de tlsVersion . |
type |
metadata.product_event_type |
Tipo de evento. Extraído de type . |
UA |
network.http.user_agent |
User-agent. Extraído de UA . |
version |
metadata.product_version , principal.asset.software.version |
Versión. Extraído de version . |
N/A | metadata.event_timestamp |
La marca de tiempo del evento se deriva del campo _ts de los registros akamai_lds, del campo httpMessage.start de los registros akamai_siem o del campo log_date de otros formatos. |
N/A | metadata.vendor_name |
Codificado como "Akamai". |
N/A | metadata.product_name |
Codificado como "Kona". |
N/A | metadata.log_type |
Codificado como "AKAMAI_WAF". |
N/A | network.application_protocol |
Asigna el valor "HTTP" a los registros akamai_siem y akamai_lds, o "DNS" a otros formatos. |
N/A | security_result.severity |
Define el valor MEDIUM para la acción "alert", CRITICAL para la acción "deny" y HIGH para otras acciones. |
N/A | event.idm.read_only_udm.metadata.event_type |
Se asigna el valor "NETWORK_HTTP" a la mayoría de los formatos de registro, "GENERIC_EVENT" a los eventos con los campos eventId o eventData , o "STATUS_UPDATE" a los eventos con los campos cli_ip o p_ip , pero sin reqHost . |
¿Necesitas más ayuda? Recibe respuestas de los miembros de la comunidad y de los profesionales de Google SecOps.