Un aspecto importante en seguridad es contar con logs, en AWS se pueden activar algunos logs importantes en diferentes recursos por ejemplo a nivel de Virtual Private Cloud VPC es mandatorio activar los flow logs para poder analizar trafico entre los recursos que se encuentran dentro de la VPC o que tienen una ENI o interfaz de red.
En este post vamos a realizar una configuracion para configurar logs en los ALB o Application Load Balancer, este recurso me permite poder exponer mis aplicaciones web hacia el internet o tambien de manera privada dentro de mi private subnet.
El ALB cuenta con dos configuraciones para logs una es los logs de acceso que registran las peticiones http dentro de los campos mas importantes tenemos el tipo de conexion el timestamp ip y puerto cliente asi como la direccion ip y puerto destino luego podemos revisar por codigo de respuesta asi como el uri path ,el user agent y el tipo de peticion POST GET estos logs nos sirve para ver con mayor detalle el tipo de request que esta recibiendo el balanceador y poder identificar patrones de ataque existen otros campos que a mas detalles lo puedes encontrar en este link. https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-access-logs.html
Luego tenemos logs de conexion este nos facilita informacion detallada de las peticiones enviadas al balanceador este log nos da cierta informacion como direccion ip y puerto del cliente, el puerto listener las configuraciones de TLS entre otras que nos sirve para poder determinar algun tema de latencia o tiempo de respuesta, aqui el detalle de los campos del log de conexion.
https://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-connection-logs.html
ok entonces para poder revisar estos logs la primera acción es habilitar dicha configuración a nivel de los atributos del balanceador.
en la parte final de la configuracion de atributos o parametros encontramos la seccion de monitoreo
para modificar dichos parametros damos click en editar atributos y nos dirigimos al final en donde podemos configurar el bucket s3 destino que guardara todos los logs
En este caso solametne activare los logs de acceso.
Para esto ya se debe contar con un bucket s3 creado y configurar con una politica especifica que se detalla acontinuacion.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "logdelivery.elasticloadbalancing.amazonaws.com"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/AWSLogs/123456789012/*"
}
]
}
Una vez creada esta configuracion en el balanceador se crearan carpetas dentro del s3 siguiendo este formato.
AWSLogs/#decuenta/elasticloadbalancing/region/2025/mes/dias
Dentro de la carpeta de cada ustedes visualizaran ya los diferentes archivos con formato del numero de cuenta el nombre del balanceador y con una extension log.gz, dependiendo de la cantidad de trafico que reciba su aplicacion pueden ser miles de archivos
Para poder realizar un analisis en estos archivos debemos usar el servicio de Athena
Amazon Athena es un servicio interactivo para realizar querys o consultas a datos que se encuentren en buckets S3 usando el estandar SQL.
Para activar la configuracion en athena ingresamos y buscamos la seccion de editor de querys
Aqui va a solicitar la creacion o el uso de un bucket s3 para guardar los resultados de las consultas que se realicen
Aqui seleccionamos el bucket s3 destino y asi nos dejara continuar con las configuraciones
Luego procedemos a crear nuestra base de datos para dentro de esta poder crear las tablas que se enlazaran a nuestros de logs de balanceador en el S3
Usamos el query. CREATE DATABASE AWSLOGS
Luego podemos crear la tabla utilizando el siguiente query
CREATE EXTERNAL TABLE IF NOT EXISTS alb_access_logs (
type string,
time string,
elb string,
client_ip string,
client_port int,
target_ip string,
target_port int,
request_processing_time double,
target_processing_time double,
response_processing_time double,
elb_status_code int,
target_status_code string,
received_bytes bigint,
sent_bytes bigint,
request_verb string,
request_url string,
request_proto string,
user_agent string,
ssl_cipher string,
ssl_protocol string,
target_group_arn string,
trace_id string,
domain_name string,
chosen_cert_arn string,
matched_rule_priority string,
request_creation_time string,
actions_executed string,
redirect_url string,
lambda_error_reason string,
target_port_list string,
target_status_code_list string,
classification string,
classification_reason string,
conn_trace_id string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1',
'input.regex' =
'([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) (.*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-_]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\\s]+?)\" \"([^\\s]+)\" \"([^ ]*)\" \"([^ ]*)\" ?([^ ]*)? ?( .*)?'
)
LOCATION 's3://amzn-s3-demo-bucket/access-log-folder-path/'
Aqui debemos editar la configuracion del S3
s3://logsawsalb/AWSLogs/123456789/elasticloadbalancing/us-east-1/'
una vez editado ejecutamos el query y posterior a esto ya podemos ejecutar diferentes querys para poder identificar por ejemplo las direcciones ip con mas trafico en un determinado tiempo
SELECT client_ip,
COUNT(*) as request_count
FROM alb_access_logsnonpartioned
WHERE time >= '2025-11-27T13:30:00'
AND time < '2025-11-27T13:40:00'
GROUP BY client_ip
ORDER BY request_count DESC;
o uno similar a este para poder ver los request en tiempo especifico.
SELECT *
FROM alb_access_logsnonpartioned
WHERE time >= '2025-11-27T13:30:00'
AND time < '2025-11-27T13:40:00'
ORDER BY time DESC;
y de esta manera poder realizar un análisis adecuado para resolución de problemas o incidentes de seguridad.
Espero que les sea de utilidad.
hasta una proxima entrega








Top comments (0)