Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
¿Cómo puedo usar Athena para analizar los registros de flujo de Amazon VPC?
Quiero usar Amazon Athena para analizar mis registros de flujo de Amazon Virtual Private Cloud (Amazon VPC).
Descripción corta
Puedes usar el editor de consultas de la consola Athena para crear una base de datos, crear una tabla para los registros de flujo de la VPC y ejecutar consultas de ejemplo. Utiliza los registros de flujo para investigar los patrones de tráfico de la red e identificar las amenazas y los riesgos en la red de Amazon VPC.
Resolución
Creación de una base de datos con el editor de consultas de la consola de Athena
Sigue estos pasos:
- Abre el editor de consultas de la consola de Athena.
- Ejecuta el siguiente comando:
Nota: Sustituye test_db_vpclogs por el nombre de tu base de datos.CREATE DATABASE test_db_vpclogs;
Importante: Se recomienda crear la base de datos en la misma región de AWS que el bucket de Amazon Simple Storage Service (Amazon S3) en el que se almacenan los registros de flujo.
Creación de una tabla para los registros de flujo en la base de datos
Sigue estos pasos:
- En el editor de consultas de la consola de Athena, ejecuta el siguiente comando:
Nota: Sustituye test_table_vpclogs por el nombre de tu tabla.CREATE EXTERNAL TABLE `vpcflow_logs`( `version` int, `resource_type` string, `account_id` string, `tgw_id` string, `tgw_attachment_id` string, `tgw_src_vpc_account_id` string, `tgw_dst_vpc_account_id` string, `tgw_src_vpc_id` string, `tgw_dst_vpc_id` string, `tgw_src_subnet_id` string, `tgw_dst_subnet_id` string, `tgw_src_eni` string, `tgw_dst_eni` string, `tgw_src_az_id` string, `tgw_dst_az_id` string, `tgw_pair_attachment_id` string, `srcaddr` string, `dstaddr` string, `srcport` int, `dstport` int, `protocol` bigint, `packets` bigint, `bytes` bigint, `start` bigint, `end` bigint, `log_status` string, `type` string, `packets_lost_no_route` bigint, `packets_lost_blackhole` bigint, `packets_lost_mtu_exceeded` bigint, `packets_lost_ttl_expired` bigint, `tcp_flags` int, `region` string, `flow_direction` string, `pkt_src_aws_service` string, `pkt_dst_aws_service` string) PARTITIONED BY ( `aws_region` string, `log_time` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://AWS_S3_BUCKET/awsexampleprefix/AWSLogs/AWS_ACCOUNT_NUMBER/vpcflowlogs/' TBLPROPERTIES ( 'projection.aws_region.type'='enum', 'projection.aws_region.values'='us-east-1,us-west-2,ap-southeast-2', 'projection.log_time.format'='yyyy/MM/dd', 'projection.log_time.range'='2025/01/01,NOW', 'projection.log_time.type'='date', 'projection.enabled'='true', 'skip.header.line.count'='1', 'storage.location.template'='s3://AWS_S3_BUCKET/awsexampleprefix/AWSLogs/AWS_ACCOUNT_NUMBER/vpcflowlogs/${aws_region}/${log_time}')
Modifica el parámetro LOCATION en la consulta para que señale al bucket de Amazon S3 que contiene los datos de tu registro. Establece el primer valor de projection.log_time.range en función de los primeros registros disponibles en tus datos. Por ejemplo, si tus registros comienzan el 1 de marzo de 2023, establece el intervalo de tiempo como «2025/03/01,NOW». Modifica el valor de acuerdo con la fecha de inicio real de tus registros para una proyección de datos precisa. El comando anterior usa la proyección de partición para crear una tabla, particionarla y rellenar automáticamente las particiones. Si no existe ninguna partición proyectada en Amazon S3, Athena proyectará la partición de todos modos. Se recomienda utilizar atributos con particiones en las consultas.
Ejecución de instrucciones SQL en la tabla para los registros de flujo
Utiliza la consola de Amazon Athena para ejecutar instrucciones SQL en la tabla. Puedes guardar las consultas, ver consultas anteriores o descargar los resultados de las consultas en formato .csv.
Consultas de ejemplo
Nota: En las consultas de ejemplo siguientes, sustituye test_table_vpclogs por el nombre de la tabla. Modifica los valores de las columnas y otras variables para tu caso de uso.
Para ver las 100 primeras entradas del registro de flujo en orden cronológico durante un periodo de tiempo especificado, ejecuta la siguiente consulta:
SELECT * FROM test_table_vpclogs WHERE day >= '2021/02/01' AND day < '2021/02/28' ORDER BY day ASC LIMIT 100;
Para ver el servidor que recibe los diez primeros paquetes HTTP durante un periodo de tiempo especificado, ejecuta la siguiente consulta:
SELECT SUM(packets) AS packetcount, dstaddr FROM test_table_vpclogs WHERE dstport = 443 AND day >= '2021/03/01' AND day < '2021/03/31' GROUP BY dstaddr ORDER BY packetcount DESC LIMIT 10;
Nota: Esta anterior consulta cuenta el número de paquetes que se reciben en el puerto HTTPS 443 y los agrupa por dirección IP de destino. A continuación, devuelve las 10 entradas principales de la semana anterior.
Para comprobar los registros que se crean para un intervalo de tiempo específico, ejecuta la siguiente consulta:
SELECT interface_id, srcaddr, action, protocol, to_iso8601(from_unixtime(start)) AS start_time, to_iso8601(from_unixtime("end")) AS end_time FROM test_table_vpclogs WHERE DAY >= '2021/04/01' AND DAY < '2021/04/30';
Para ver los registros de flujo de una dirección IP de origen concreta entre un intervalo de tiempo especificado, ejecuta la siguiente consulta:
SELECT *FROM test_table_vpclogs WHERE srcaddr = '10.117.1.22' AND day >= '2021/02/01' AND day < '2021/02/28';
Para mostrar un listado con las conexiones TCP rechazadas entre un intervalo de tiempo especificado, ejecuta la siguiente consulta:
SELECT day, interface_id, srcaddr, action, protocol FROM test_table_vpclogs WHERE action = 'REJECT' AND protocol = 6 AND day >= '2021/02/01' AND day < '2021/02/28' LIMIT 10;
Para ver los registros de flujo del intervalo de direcciones IP que comienza por 10.117, ejecuta la siguiente consulta:
SELECT *FROM test_table_vpclogs WHERE split_part(srcaddr,'.', 1)='10' AND split_part(srcaddr,'.', 2) ='117'
Para ver los registros de flujo de una dirección IP de destino concreta dentro de un intervalo de tiempo, ejecuta la siguiente consulta:
SELECT *FROM test_table_vpclogs WHERE dstaddr = '10.0.1.14' AND day >= '2021/01/01' AND day < '2021/01/31'
Información relacionada
¿Cómo puedo supervisar el tráfico en mi VPC con registros de flujo?
Análisis de los registros de flujo de VPC mediante Amazon Athena y Amazon QuickSight

Contenido relevante
- Respuesta aceptadapreguntada hace 2 meseslg...
- Respuesta aceptadapreguntada hace 3 meseslg...
- preguntada hace 3 meseslg...
- preguntada hace un meslg...
- preguntada hace 5 meseslg...