Recopila registros del WAF de Akamai
En este documento, se explica cómo exportar y transferir registros del WAF de Akamai a Google Security Operations con Google Cloud Storage o AWS S3.
El analizador controla los registros y admite los formatos syslog y CEF. Extrae campos como direcciones IP, URLs, métodos HTTP, códigos de respuesta, usuarios-agente y la información de las reglas de seguridad, y los asigna al modelo de datos unificado (UDM) para una representación coherente. El analizador también controla campos específicos de Akamai, como attackData
y clientReputation
, y realiza las transformaciones de datos necesarias y enriquece el resultado de UDM.
Antes de comenzar
Asegúrate de cumplir con los siguientes requisitos previos:
- Instancia de Google SecOps
- Acceso privilegiado a Google Cloud o AWS
- Acceso privilegiado a Akamai
Exporta e ingiere registros del WAF de Akamai desde Cloud Storage
En esta sección, se describe el paso inicial del proceso: configurar el almacenamiento necesario para tus registros del WAF de Akamai.
Crea un Google Cloud bucket de Storage
- Accede a la consola de Google Cloud .
Ve a la página Buckets de Cloud Storage.
Haz clic en Crear.
En la página Crear un bucket, ingresa la información de tu bucket. Después de cada uno de los siguientes pasos, haz clic en Continuar para avanzar al siguiente paso:
En la sección Primeros pasos, haz lo siguiente:
- Ingresa un nombre único que cumpla con los requisitos de nombres de bucket (por ejemplo,
akamai-waf-logs
). - Para habilitar el espacio de nombres jerárquico, haz clic en la flecha de expansión para expandir la sección Optimizar las cargas de trabajo orientadas a archivos y con uso intensivo de datos y, luego, selecciona Habilitar el espacio de nombres jerárquico en este bucket.
- Para agregar una etiqueta de bucket, haz clic en la flecha de expansión para expandir la sección Etiquetas.
- Haz clic en Agregar etiqueta y especifica una clave y un valor para tu etiqueta.
- Ingresa un nombre único que cumpla con los requisitos de nombres de bucket (por ejemplo,
En la sección Eligir dónde almacenar tus datos, haz lo siguiente:
- Selecciona un tipo de ubicación
- Usa el menú desplegable del tipo de ubicación para seleccionar una Ubicación en la que se almacenarán de forma permanente los datos de objetos de tu bucket.
- Para configurar la replicación entre bucket, expande la sección Configura la bucket entre buckets.
En la sección Elige una clase de almacenamiento para tus datos, selecciona una clase de almacenamiento predeterminada para el bucket o selecciona Autoclass para la administración automática de clases de almacenamiento de los datos de tu bucket.
En la sección Elige cómo controlar el acceso a los objetos, selecciona no para aplicar la prevención del acceso público y selecciona un modelo de control de acceso para los objetos del bucket.
En la sección Elige cómo proteger los datos de objetos, haz lo siguiente:
- Selecciona cualquiera de las opciones de Protección de datos que desees configurar para tu bucket.
- Para elegir cómo se encriptarán los datos de tus objetos, haz clic en la flecha desplegable etiquetada como Encriptación de datos y selecciona un método de encriptación de datos.
Haz clic en Crear.
Configura permisos para Cloud Storage
Ve a la página Crear cuenta de servicio.
Selecciona un proyecto de Google Cloud.
Ingresa un nombre de cuenta de servicio para mostrar en la consola de Google Cloud .
Haz clic en Crear y continuar.
Otorga el rol roles/storage.admin en el bucket.
Haz clic en Listo para terminar de crear la cuenta de servicio.
Crea y descarga Google Cloud el archivo de claves de la cuenta de servicio
Ve a la página Cuentas de servicio.
Selecciona un proyecto Google Cloud.
Haz clic en la dirección de correo electrónico de la cuenta de servicio recién creada.
Haz clic en la pestaña Claves.
Haz clic en el menú Agregar clave y, luego, selecciona Crear clave nueva.
Selecciona JSON como el tipo de clave y haz clic en Crear.
- Si haces clic en Crear, se descargará un archivo de claves de cuenta de servicio. Después de descargar el archivo de claves, no puedes volver a descargarlo.
- La clave descargada tiene el siguiente formato, en el que
PRIVATE_KEY
es la parte privada del par de claves pública-privada.
Configura el WAF de Akamai para enviar registros a Cloud Storage
- Accede a Akamai Control Center.
- Ve a la sección Seguridad.
- Selecciona Registros.
- Configura una nueva entrega de registros:
- Fuente de registro: Selecciona la configuración del WAF.
- Destino: Selecciona Google Cloud Storage.
- Nombre visible: Ingresa una descripción del nombre único.
- Bucket: Especifica el nombre del bucket de Cloud Storage que creaste (por ejemplo,
gs://akamai-waf-logs
). - ID del proyecto: Ingresa el ID único de tu proyecto Google Cloud .
- Nombre de la cuenta de servicio: Ingresa el nombre de la cuenta de servicio que creaste antes.
- Clave privada: Ingresa el valor de private_key de la clave JSON que generaste y descargaste antes. (Debes ingresar tu 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 desees (por ejemplo, JSON).
- Frecuencia de envío: Selecciona la frecuencia con la que deseas 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 proporcionaste.
Haz clic en Siguiente para ir a la pestaña Resumen.
Configura feeds
Existen dos puntos de entrada diferentes para configurar feeds en la plataforma de Google SecOps:
- Configuración de SIEM > Feeds
- Centro de contenido > Paquetes de contenido
Configura feeds desde Configuración del SIEM > Feeds con Google Cloud Almacenamiento
Para configurar un feed, sigue estos pasos:
- Ve a SIEM Settings > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros del WAF de Akamai).
- Selecciona Google Cloud Storage como el Tipo de fuente.
- Selecciona Akamai WAF como el Tipo de registro.
- Haz clic en Obtener cuenta de servicio como la Cuenta de servicio de Chronicle.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- URI del bucket de almacenamiento:URL del bucket de almacenamiento Google Cloud (por ejemplo,
gs://akamai-waf-logs
) - URI Is A: Selecciona Directory which includes subdirectories.
- Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
- URI del bucket de almacenamiento:URL del bucket de almacenamiento Google Cloud (por ejemplo,
Haz clic en Siguiente.
Revisa la configuración de tu nuevo feed en la pantalla Finalizar y, luego, haz clic en Enviar.
Configura feeds desde el Centro de contenido
Especifica valores para los siguientes campos:
- URI del bucket de almacenamiento:URL del bucket de almacenamiento Google Cloud (por ejemplo,
gs://akamai-waf-logs
) - URI Is A: Selecciona Directory which includes subdirectories.
Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
Opciones avanzadas
- Nombre del feed: Es un valor completado previamente que identifica el feed.
- Tipo de fuente: Es el método que se usa para recopilar registros en Google SecOps.
- Espacio de nombres del activo: Es el espacio de nombres asociado con el feed.
- Etiquetas de transferencia: Son las etiquetas que se aplican a todos los eventos de este feed.
Exporta e ingiere registros del WAF de Akamai desde AWS S3
En esta sección, se explican los pasos iniciales para configurar tu bucket de Amazon S3 para recibir y almacenar registros del WAF de Akamai.
Configura el bucket de Amazon S3
- Crea un bucket de Amazon S3 siguiendo esta guía del usuario: Crea un bucket.
- Guarda el Nombre y la Región del bucket para futuras referencias.
- Crea un usuario siguiendo esta guía del usuario: Cómo crear un usuario de IAM.
- Selecciona el usuario creado.
- Selecciona la pestaña Credenciales de seguridad.
- Haz clic en Crear clave de acceso en la sección Claves de acceso.
- Selecciona Servicio de terceros como Caso de uso.
- Haz clic en Siguiente.
- Opcional: Agrega 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 consultarlas en el futuro.
- Haz clic en Listo.
- Selecciona la pestaña Permisos.
- Haz clic en Agregar permisos en la sección Políticas de permisos.
- Selecciona Agregar permisos.
- Selecciona Adjuntar políticas directamente.
- Busca la política AmazonS3FullAccess.
- Selecciona la política.
- Haz clic en Siguiente.
- Haz clic en Agregar permisos.
Configura el WAF de Akamai para enviar registros a Amazon S3
- Accede a Akamai Control Center.
- Ve a la sección Seguridad.
- Selecciona Registros.
Sigue estos pasos para configurar una nueva entrega de registros:
- Fuente de registro: Selecciona la configuración del WAF.
- Destino: Elige Amazon S3.
- Bucket de S3: Especifica el nombre del bucket de S3 que creaste.
- Región: Selecciona la región de AWS en la que se encuentra tu bucket de S3.
- ID de clave de acceso y clave de acceso secreta: Proporciona las credenciales que generaste.
- Formato de registro: Elige el formato de registro que desees (por ejemplo, JSON).
Frecuencia de entrega: Selecciona la frecuencia con la que deseas que se entreguen los registros (por ejemplo, cada 5 minutos).
Verifica la entrega del registro:
- Después de configurar LDS, supervisa el bucket de S3 para detectar archivos de registro entrantes.
Configura feeds desde SIEM Settings > Feeds con AWS S3
Para configurar un feed, sigue estos pasos:
- Ve a SIEM Settings > Feeds.
- Haz clic en Agregar feed nuevo.
- En la siguiente página, haz clic en Configurar un solo feed.
- En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Registros del WAF de Akamai).
- Selecciona Amazon S3 como el Tipo de fuente.
- Selecciona Akamai WAF como el Tipo de registro.
- Haz clic en Siguiente.
Especifica valores para los siguientes parámetros de entrada:
- Región: Es la región en la que se encuentra el bucket de Amazon S3.
- URI de S3: Es el URI del bucket.
s3:/BUCKET_NAME
Reemplaza lo siguiente:BUCKET_NAME
: el nombre del bucket.
- URI is a: Selecciona el TIPO DE URI según la configuración del flujo de registros: Single file | Directory | Directory which includes subdirectories.
- Opciones de borrado de la fuente: Selecciona la opción de borrado según tu preferencia.
- ID de clave de acceso: Es la clave de acceso del usuario con acceso al bucket de S3.
- Clave de acceso secreta: Es la clave secreta del usuario con acceso al bucket de S3.
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 (ascendente) | Asignación de UDM | Lógica |
---|---|---|
attackData.clientIP |
principal.ip , principal.asset.ip |
Es la dirección IP del cliente que inicia la solicitud. Se extrae del campo attackData.clientIP en los registros de akamai_siem. |
attackData.configId |
metadata.product_log_id |
Es el ID de configuración de seguridad. Se extrae del campo attackData.configId en los registros de akamai_siem. También se agregó como un detection_field en el objeto security_result. |
attackData.policyId |
N/A | Se usa en la lógica del analizador para propagar security_result.summary con el valor PolicyId:[value] . |
attackData.ruleActions |
security_result.action , security_result.action_details |
Son las acciones que se tomaron en función de la regla activada. Se extrae del campo attackData.ruleActions en los registros de akamai_siem. "deny" se asigna a BLOCK, y otros valores ("alert", "monitor", "allow", "tarpit") se asignan a ALLOW. El valor original también se almacena en action_details . |
attackData.ruleData |
security_result.detection_fields |
Son los datos asociados con la regla activada. Se extrae del campo attackData.ruleData en los registros de akamai_siem. Se agregó a security_result.detection_fields con la clave "RuleData". |
attackData.ruleMessages |
security_result.threat_name |
Son los mensajes asociados a la regla activada. Se extrae del campo attackData.ruleMessages en los registros de akamai_siem. |
attackData.ruleSelectors |
security_result.detection_fields |
Son los selectores asociados a la regla activada. Se extrae del campo attackData.ruleSelectors en los registros de akamai_siem. Se agregó a security_result.detection_fields con la clave "RuleSelector". |
attackData.ruleTags |
security_result.category_details |
Son las etiquetas asociadas a la regla activada. Se extrae del campo attackData.ruleTags en los registros de akamai_siem. |
attackData.ruleVersions |
security_result.detection_fields |
Son las versiones de las reglas activadas. Se extrae del campo attackData.ruleVersions en los registros de akamai_siem. Se agregó a security_result.detection_fields con la clave "Versión de la regla". |
clientReputation |
principal.labels |
Es la información de reputación del cliente. Se extrae del campo clientReputation en los registros de akamai_siem. Se agregó como etiqueta a la 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 , según el formato del registro. |
cp |
additional.fields |
Código de CP Se extrae del campo cp . Se agregó a additional.fields con la clave "cp". |
eventId |
metadata.product_log_id |
ID del evento. Se extrae del campo eventId . |
eventTime , log_date |
metadata.event_timestamp |
Es la 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 |
Es el ID de la definición del evento. Se extrajo de eventType.eventDefinition.eventDefinitionId . |
eventType.eventDefinition.eventDescription |
metadata.description |
Descripción del evento. Se extrajo de eventType.eventDefinition.eventDescription . |
eventType.eventDefinition.eventName |
metadata.product_event_type |
Nombre del evento. Se extrajo de eventType.eventDefinition.eventName . |
eventType.eventTypeId |
additional.fields |
Es el ID del tipo de evento. Se extrajo de eventType.eventTypeId . Se agregó a additional.fields con la clave "eventTypeId". |
eventType.eventTypeName |
additional.fields |
Es el nombre del tipo de evento. Se extrajo de eventType.eventTypeName . Se agregó a additional.fields con la clave "eventTypeName". |
format |
N/A | El analizador lo usa 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 |
Son los bytes enviados en el mensaje HTTP. Se extrajo 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 , según el formato del registro. Se convirtió a mayúsculas. |
httpMessage.path |
target.url |
Es la ruta de la solicitud. Se extrae de httpMessage.path , target_url o reqPath , según el formato del registro. Si httpMessage.query está presente, se agrega a la ruta con un separador "?". |
httpMessage.port |
target.port |
Puerto. Se extrae de httpMessage.port o reqPort , según el formato del registro. |
httpMessage.protocol |
N/A | El analizador lo usa para determinar el protocolo. |
httpMessage.query |
N/A | Se usa en la lógica del analizador para agregar a httpMessage.path si está presente. |
httpMessage.requestId |
network.session_id |
ID de la solicitud. Se extrae de httpMessage.requestId o reqId , según el formato del registro. |
httpMessage.requestHeaders , AkamaiSiemRequestHeaders |
additional.fields |
Son los encabezados de la solicitud. Se extrae de httpMessage.requestHeaders o AkamaiSiemRequestHeaders , según el formato del registro. Se agregó 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 agregó a additional.fields con la clave "AkamaiSiemResponseHeaders". |
httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code , statusCode |
network.http.response_code |
Es el código de respuesta HTTP. Se extrae de httpMessage.status , AkamaiSiemResponseStatus , network_http_response_code o statusCode , según el formato del registro. |
httpMessage.tls , AkamaiSiemTLSVersion , tlsVersion |
network.tls.version |
Es la versión de TLS. Se extrae de httpMessage.tls , AkamaiSiemTLSVersion o tlsVersion , según el formato del registro. |
httpMessage.useragent , network_http_user_agent , UA , useragent |
network.http.user_agent |
Es el usuario-agente. Se extrae de httpMessage.useragent , network_http_user_agent , UA o useragent , según el formato del registro. |
log_description |
metadata.description |
Es la descripción del registro. Se extrajo de log_description . |
log_rule |
security_result.rule_name |
Es la regla de registro. Se extrajo de log_rule . |
message |
N/A | Es el mensaje de registro sin procesar. El analizador lo usa para varias extracciones. |
network_http_referral_url |
network.http.referral_url |
Es la URL de referencia HTTP. Se extrajo de network_http_referral_url . |
proto |
N/A | Se usa en la lógica del analizador para completar security_result.summary si attackData.policyId no está presente. |
reqHost |
target.hostname , target.asset.hostname |
Es el host de la solicitud. Se extrajo de reqHost . |
reqId |
metadata.product_log_id , network.session_id |
ID de la solicitud. Se extrajo de reqId . |
reqMethod |
network.http.method |
Es el método de la solicitud. Se extrajo de reqMethod . |
reqPath |
target.url |
Es la ruta de la solicitud. Se extrajo de reqPath . |
reqPort |
target.port |
Puerto de solicitud. Se extrajo de reqPort . |
rspContentType |
target.file.mime_type |
Tipo de contenido de la respuesta. Se extrajo de rspContentType . |
securityRules |
security_result.rule_name , security_result.about.resource.attribute.labels |
Reglas de seguridad Se extrajo de securityRules . La primera parte se asigna a rule_name , y el resto se agrega como etiquetas con las claves "non_deny_rules" y "deny_rule_format". |
statusCode |
network.http.response_code |
Código de estado. Se extrajo de statusCode . |
state |
principal.location.state , target.user.personal_address.state |
Estado. Se extrajo de state . |
tlsVersion |
network.tls.version |
Es la versión de TLS. Se extrajo de tlsVersion . |
type |
metadata.product_event_type |
Es el tipo de evento. Se extrajo de type . |
UA |
network.http.user_agent |
Es el usuario-agente. Se extrajo de UA . |
version |
metadata.product_version , principal.asset.software.version |
Versión. Se extrajo de version . |
N/A | metadata.event_timestamp |
La marca de tiempo del evento se deriva del campo _ts en los registros de akamai_lds, el campo httpMessage.start en los registros de akamai_siem o el campo log_date en otros formatos. |
N/A | metadata.vendor_name |
Se codificó de forma rígida como "Akamai". |
N/A | metadata.product_name |
Se codificó de forma rígida como "Kona". |
N/A | metadata.log_type |
Se codificó de forma rígida como "AKAMAI_WAF". |
N/A | network.application_protocol |
Se debe configurar como "HTTP" para los registros de akamai_siem y akamai_lds, o como "DNS" para otros formatos. |
N/A | security_result.severity |
Se debe establecer en MEDIUM para la acción "alert", en CRITICAL para la acción "deny" y en HIGH para otras acciones. |
N/A | event.idm.read_only_udm.metadata.event_type |
Se establece en "NETWORK_HTTP" para la mayoría de los formatos de registro, en "GENERIC_EVENT" para los eventos con campos eventId o eventData , o en "STATUS_UPDATE" para los eventos con cli_ip o p_ip , pero sin reqHost . |
¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.