

# Consulta de los registros de flujo de Amazon VPC
<a name="vpc-flow-logs"></a>

Los registros de flujo de Amazon Virtual Private Cloud capturan información acerca del tráfico IP entrante y saliente por las interfaces de red de una VPC. Utilice los registros para investigar los patrones de tráfico de red e identificar las amenazas y los riesgos en la red de VPC.

Tiene dos opciones para consultar los registros de flujo de Amazon VPC:

****
+ **Consola de Amazon VPC**: utilice la característica de integración de Athena en la consola de Amazon VPC para generar una plantilla de CloudFormation que crea una base de datos, un grupo de trabajo y una tabla de registros de flujo de Athena con particiones por usted. La plantilla también crea un conjunto de [consultas de registro de flujo predefinidas](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html#predefined-queries) que puede utilizar para obtener información sobre el tráfico que fluye a través de la VPC.

  Para obtener más información sobre este enfoque, consulte [Realizar consultas en los registros de flujo mediante Amazon Athena](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-athena.html) en la *Guía del usuario de Amazon VPC*.
+ **Consola Amazon Athena**: cree tablas y consultas directamente en la consola de Athena. Para obtener más información, continúe leyendo esta página.

Antes de comenzar la consulta de los registros en Athena, [habilite los registros de flujo de VPC](https://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/flow-logs.html) y configúrelos para que se guarden en el bucket de Amazon S3. Después de crear los registros, deje que se ejecuten durante unos minutos para recopilar algunos datos. Los registros se crean con un formato de compresión GZIP que Athena le permite consultar directamente. 

Al crear un registro de flujo de VPC, puede utilizar un formato personalizado cuando quiera especificar los campos que se devolverán en el registro de flujo y el orden en que aparecerán. Para obtener más información sobre los registros de flujo, consulte [Registros de flujo](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) en la *Guía del usuario de Amazon VPC*.

## Consideraciones y limitaciones
<a name="vpc-flow-logs-common-considerations"></a>

Cuando cree tablas en los registros de flujo de Athena para Amazon VPC, recuerde los puntos a continuación:
+ De forma predeterminada, en Athena, Parquet accede a las columnas por su nombre. Para obtener más información, consulte [Gestión de las actualizaciones de los esquemas](handling-schema-updates-chapter.md).
+ Utilice los nombres de los registros del registro de flujo en los nombres de las columnas de Athena. Los nombres de las columnas del esquema de Athena deben coincidir exactamente con los nombres de campo de los registros de flujo de Amazon VPC, con las siguientes diferencias: 
  + Sustituya los guiones de los nombres de los campos de registro de Amazon VPC por guiones bajos en los nombres de columna de Athena. Para obtener información sobre los caracteres aceptables para los nombres de base de datos, los nombres de tablas y los nombres de columnas en Athena, consulte [Nombrar tablas, bases de datos y columnas](tables-databases-columns-names.md).
  + Escape los nombres de registros del registro de flujo que sean [palabras clave reservadas](reserved-words.md) en Athena encerrándolos con acentos graves. 
+ Los registros de flujo de VPC son específicos de la Cuenta de AWS. Cuando publica sus archivos de registro en Amazon S3, la ruta que Amazon VPC crea en Amazon S3 incluye el ID de la Cuenta de AWS que se usó para crear el registro de flujo. Para obtener más información, consulte [Publicar registros de flujo en Amazon S3](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs-s3.html) en la *Guía del usuario de Amazon VPC*.

**Topics**
+ [Consideraciones y limitaciones](#vpc-flow-logs-common-considerations)
+ [Creación de una tabla para los registros de flujo de Amazon VPC y consulta de esta](vpc-flow-logs-create-table-statement.md)
+ [Creación de tablas para los registros de flujo en formato Apache Parquet](vpc-flow-logs-parquet.md)
+ [Creación y consulta de una tabla para los registros de flujo de Amazon VPC mediante la proyección de particiones](vpc-flow-logs-partition-projection.md)
+ [Creación de tablas para los registros de flujo en formato Apache Parquet mediante la proyección de particiones](vpc-flow-logs-partition-projection-parquet-example.md)
+ [Recursos adicionales](query-examples-vpc-logs-additional-resources.md)

# Creación de una tabla para los registros de flujo de Amazon VPC y consulta de esta
<a name="vpc-flow-logs-create-table-statement"></a>

En el siguiente procedimiento, se crea una tabla de Amazon VPC para los registros de flujo de Amazon VPC. Cuando crea un registro de flujo con un formato personalizado, crea una tabla con campos que coinciden con los campos especificados al crear el registro de flujo, en el mismo orden en que los especificó.

**Para crear una tabla de Athena para los registros de flujo de Amazon VPC**

1. Ingrese una instrucción DDL como la siguiente en el editor de consultas de la consola de Athena y siga las directrices de la sección [Consideraciones y limitaciones](vpc-flow-logs.md#vpc-flow-logs-common-considerations). Con la instrucción de muestra, se crea una tabla que tiene las columnas para los registros de flujo de Amazon VPC (versiones 2 a 5), como se documenta en [Registros de flujo](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records). Si utiliza un conjunto o un orden de columnas diferente, modifique la instrucción según corresponda.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs` (
     version int,
     account_id string,
     interface_id string,
     srcaddr string,
     dstaddr string,
     srcport int,
     dstport int,
     protocol bigint,
     packets bigint,
     bytes bigint,
     start bigint,
     `end` bigint,
     action string,
     log_status string,
     vpc_id string,
     subnet_id string,
     instance_id string,
     tcp_flags int,
     type string,
     pkt_srcaddr string,
     pkt_dstaddr string,
     region string,
     az_id string,
     sublocation_type string,
     sublocation_id string,
     pkt_src_aws_service string,
     pkt_dst_aws_service string,
     flow_direction string,
     traffic_path int
   )
   PARTITIONED BY (`date` date)
   ROW FORMAT DELIMITED
   FIELDS TERMINATED BY ' '
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'
   TBLPROPERTIES ("skip.header.line.count"="1");
   ```

   Tenga en cuenta los siguientes puntos:
   + La consulta especifica `ROW FORMAT DELIMITED` y omite especificar un elemento SerDe. Esto significa que la consulta utiliza [Lazy Simple SerDe para CSV, TSV y archivos con delimitación personalizada](lazy-simple-serde.md). En esta consulta los campos terminan con un espacio.
   + La cláusula `PARTITIONED BY` utiliza el tipo `date`. Esto permite utilizar operadores matemáticos en las consultas para seleccionar los elementos más antiguos o más recientes respecto a una fecha determinada.
**nota**  
Dado que `date` es una palabra clave reservada en las instrucciones DDL, se incluye en una secuencia de escape con caracteres de comilla simple. Para obtener más información, consulte [Aplicación de caracteres de escape a las palabras clave reservadas de las consultas](reserved-words.md).
   + En el caso de un registro de flujo de VPC con un formato personalizado diferente, modifique los campos para que coincidan con los campos especificados al crear el registro de flujo.

1. Modifique `LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'` de modo que apunte al bucket de Amazon S3 que contiene los datos de registro.

1. Ejecute la consulta en la consola de Athena. Cuando la consulta finaliza, Athena registra la tabla `vpc_flow_logs`, dejando los datos que contiene listos para efectuar consultas.

1. Cree particiones para poder leer los datos, tal y como se indica en la siguiente consulta de ejemplo. Esta consulta de ejemplo crea una sola partición para la fecha especificada. Sustituya los marcadores de posición para la fecha y la ubicación según sea necesario. 
**nota**  
Esta consulta crea solo crea una partición única para la fecha que especifique. Para automatizar el proceso, utilice un script que ejecute esta consulta y que cree las particiones de este modo para `year/month/day`, o bien utilice una instrucción `CREATE TABLE` en la que se especifique la [proyección de particiones](vpc-flow-logs-partition-projection.md).

   ```
   ALTER TABLE vpc_flow_logs
   ADD PARTITION (`date`='YYYY-MM-dd')
   LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';
   ```

## Consultas de ejemplo para la tabla vpc\$1flow\$1logs
<a name="query-examples-vpc-logs"></a>

Utilice el editor de consultas de la consola de Athena para ejecutar instrucciones SQL en la tabla que cree. Puede guardar las consultas, ver consultas anteriores o descargar los resultados de las consultas en formato CSV. En los siguientes ejemplos, sustituya `vpc_flow_logs` por el nombre de la tabla. Modifique los valores de columna y otras variables según sus requisitos.

La siguiente consulta de ejemplo muestra un máximo de 100 registros de flujo para la fecha especificada.

```
SELECT * 
FROM vpc_flow_logs 
WHERE date = DATE('2020-05-04') 
LIMIT 100;
```

La siguiente consulta obtiene una lista de todas las conexiones TCP rechazadas y utiliza la columna de partición de fecha que acaba de crear, `date`, para extraer de ella el día de la semana en el que se produjeron esos eventos.

```
SELECT day_of_week(date) AS
  day,
  date,
  interface_id,
  srcaddr,
  action,
  protocol
FROM vpc_flow_logs
WHERE action = 'REJECT' AND protocol = 6
LIMIT 100;
```

Para saber qué servidor está recibiendo el mayor número de solicitudes HTTPS, utilice la siguiente consulta. Cuenta el número de paquetes recibidos en el puerto 443 de HTTPS, los agrupa según la dirección IP de destino y devuelve los 10 principales de la última semana.

```
SELECT SUM(packets) AS
  packetcount,
  dstaddr
FROM vpc_flow_logs
WHERE dstport = 443 AND date > current_date - interval '7' day
GROUP BY dstaddr
ORDER BY packetcount DESC
LIMIT 10;
```

# Creación de tablas para los registros de flujo en formato Apache Parquet
<a name="vpc-flow-logs-parquet"></a>

En el siguiente procedimiento, se crea una tabla de Amazon VPC para los registros de flujo de Amazon VPC en formato Apache Parquet.

**Para crear una tabla de Athena para los registros de flujo de Amazon VPC en formato Parquet**

1. Ingrese una instrucción DDL como la siguiente en el editor de consultas de la consola de Athena y siga las directrices de la sección [Consideraciones y limitaciones](vpc-flow-logs.md#vpc-flow-logs-common-considerations). Con la instrucción de muestra, se crea una tabla que tiene las columnas para los registros de flujo de Amazon VPC (versiones 2 a 5), como se documenta en [Registros de flujo](https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html#flow-log-records) en formato Parquet, particionada en Hive por hora. Si no tiene particiones por hora, elimine `hour` de la cláusula `PARTITIONED BY`.

   ```
   CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs_parquet (
     version int,
     account_id string,
     interface_id string,
     srcaddr string,
     dstaddr string,
     srcport int,
     dstport int,
     protocol bigint,
     packets bigint,
     bytes bigint,
     start bigint,
     `end` bigint,
     action string,
     log_status string,
     vpc_id string,
     subnet_id string,
     instance_id string,
     tcp_flags int,
     type string,
     pkt_srcaddr string,
     pkt_dstaddr string,
     region string,
     az_id string,
     sublocation_type string,
     sublocation_id string,
     pkt_src_aws_service string,
     pkt_dst_aws_service string,
     flow_direction string,
     traffic_path int
   )
   PARTITIONED BY (
     `aws-account-id` string,
     `aws-service` string,
     `aws-region` string,
     `year` string, 
     `month` string, 
     `day` string,
     `hour` string
   )
   ROW FORMAT SERDE 
     'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
   STORED AS INPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
   OUTPUTFORMAT 
     'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
   LOCATION
     's3://amzn-s3-demo-bucket/prefix/AWSLogs/'
   TBLPROPERTIES (
     'EXTERNAL'='true', 
     'skip.header.line.count'='1'
     )
   ```

1. Modifique la muestra `LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/'` para que apunte a la ruta de Amazon S3 que contiene los datos de registro.

1. Ejecute la consulta en la consola de Athena.

1. Si sus datos están en formato compatible con HIVE, ejecute el siguiente comando en la consola de Athena para actualizar y cargar las particiones de Hive en el almacén de metadatos. Una vez completada la consulta, puede consultar los datos en la tabla `vpc_flow_logs_parquet`.

   ```
   MSCK REPAIR TABLE vpc_flow_logs_parquet
   ```

   Si no utiliza datos compatibles con Hive, ejecute [ALTER TABLE ADD PARTITION](alter-table-add-partition.md) para cargar las particiones.

Para obtener más información sobre el uso de Athena para consultar los registros de flujo de Amazon VPC en formato Parquet, consulte la publicación [Optimice el rendimiento y reduzca los costos de los análisis de red con los registros de flujo de VPC en formato Apache Parquet](https://aws.amazon.com/blogs/big-data/optimize-performance-and-reduce-costs-for-network-analytics-with-vpc-flow-logs-in-apache-parquet-format/) en el *Blog de macrodatos de AWS*.

# Creación y consulta de una tabla para los registros de flujo de Amazon VPC mediante la proyección de particiones
<a name="vpc-flow-logs-partition-projection"></a>

Use la instrucción `CREATE TABLE` como la siguiente para crear una tabla, particionar la tabla y rellenar las particiones automáticamente mediante la [proyección de particiones](partition-projection.md). Sustituya el nombre de la tabla `test_table_vpclogs` en el ejemplo con el nombre de su tabla. Edite la cláusula `LOCATION` para especificar el bucket de Amazon S3 que contiene los datos de registro de Amazon VPC.

La siguiente instrucción `CREATE TABLE` es para los registros de flujo de VPC entregados en formato de partición que no es de estilo Hive. El ejemplo permite agregar varias cuentas. Si va a centralizar los registros de flujo de VPC de varias cuentas en un bucket de Amazon S3, el ID de la cuenta debe introducirse en la ruta de Amazon S3.

```
CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol bigint,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string,
  vpc_id string,
  subnet_id string,
  instance_id string,
  tcp_flags int,
  type string,
  pkt_srcaddr string,
  pkt_dstaddr string,
  az_id string,
  sublocation_type string,
  sublocation_id string,
  pkt_src_aws_service string,
  pkt_dst_aws_service string,
  flow_direction string,
  traffic_path int
)
PARTITIONED BY (accid string, region string, day string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION '$LOCATION_OF_LOGS'
TBLPROPERTIES
(
"skip.header.line.count"="1",
"projection.enabled" = "true",
"projection.accid.type" = "enum",
"projection.accid.values" = "$ACCID_1,$ACCID_2",
"projection.region.type" = "enum",
"projection.region.values" = "$REGION_1,$REGION_2,$REGION_3",
"projection.day.type" = "date",
"projection.day.range" = "$START_RANGE,NOW",
"projection.day.format" = "yyyy/MM/dd",
"storage.location.template" = "s3://amzn-s3-demo-bucket/AWSLogs/${accid}/vpcflowlogs/${region}/${day}"
)
```

## Consultas de ejemplo para test\$1table\$1vpclogs
<a name="query-examples-vpc-logs-pp"></a>

Las consultas de ejemplo a continuación consultan los `test_table_vpclogs` creados por la instrucción `CREATE TABLE` anterior. Reemplace `test_table_vpclogs` en las consultas por el nombre de su propia tabla. Modifique los valores de columna y otras variables según sus requisitos.

Para devolver las 100 primeras entradas de registro de acceso en orden cronológico durante un período especificado, ejecute una consulta como la siguiente.

```
SELECT *
FROM test_table_vpclogs
WHERE day >= '2021/02/01' AND day < '2021/02/28'
ORDER BY day ASC
LIMIT 100
```

Para ver qué servidor recibe el mayor número de paquetes HTTP durante un período especificado, ejecute una consulta como la siguiente. La consulta cuenta el número de paquetes recibidos en el puerto 443 HTTPS, los agrupa según la dirección IP de destino y devuelve las 10 principales entradas de la semana anterior.

```
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
```

Para devolver los registros creados durante un período especificado, ejecute una consulta como la siguiente.

```
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 devolver los registros de acceso de una dirección IP de origen entre periodos especificados, ejecute una consulta como la siguiente.

```
SELECT *
FROM test_table_vpclogs
WHERE srcaddr = '10.117.1.22'
  AND day >= '2021/02/01'
  AND day < '2021/02/28'
```

Para enumerar las conexiones TCP rechazadas, ejecute una consulta como la siguiente.

```
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 devolver los registros de acceso del intervalo de direcciones IP que comienza por `10.117`, ejecute una consulta como la siguiente.

```
SELECT *
FROM test_table_vpclogs
WHERE split_part(srcaddr,'.', 1)='10'
  AND split_part(srcaddr,'.', 2) ='117'
```

Para devolver los registros de acceso de una dirección IP de destino entre un intervalo de tiempo determinado, ejecute una consulta como la siguiente.

```
SELECT *
FROM test_table_vpclogs
WHERE dstaddr = '10.0.1.14'
  AND day >= '2021/01/01'
  AND day < '2021/01/31'
```

# Creación de tablas para los registros de flujo en formato Apache Parquet mediante la proyección de particiones
<a name="vpc-flow-logs-partition-projection-parquet-example"></a>

La siguiente instrucción `CREATE TABLE` de proyección de particiones para los registros de flujo de VPC se encuentra en formato Apache Parquet, no es compatible con Hive y se divide por hora y fecha en lugar de por día. Sustituya el nombre de la tabla `test_table_vpclogs_parquet` en el ejemplo con el nombre de su tabla. Edite la cláusula `LOCATION` para especificar el bucket de Amazon S3 que contiene los datos de registro de Amazon VPC.

```
CREATE EXTERNAL TABLE IF NOT EXISTS test_table_vpclogs_parquet (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol bigint,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string,
  vpc_id string,
  subnet_id string,
  instance_id string,
  tcp_flags int,
  type string,
  pkt_srcaddr string,
  pkt_dstaddr string,
  az_id string,
  sublocation_type string,
  sublocation_id string,
  pkt_src_aws_service string,
  pkt_dst_aws_service string,
  flow_direction string,
  traffic_path int
)
PARTITIONED BY (region string, date string, hour string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/'
TBLPROPERTIES (
"EXTERNAL"="true",
"skip.header.line.count" = "1",
"projection.enabled" = "true",
"projection.region.type" = "enum",
"projection.region.values" = "us-east-1,us-west-2,ap-south-1,eu-west-1",
"projection.date.type" = "date",
"projection.date.range" = "2021/01/01,NOW",
"projection.date.format" = "yyyy/MM/dd",
"projection.hour.type" = "integer",
"projection.hour.range" = "00,23",
"projection.hour.digits" = "2",
"storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/AWSLogs/${account_id}/vpcflowlogs/${region}/${date}/${hour}"
)
```

# Recursos adicionales
<a name="query-examples-vpc-logs-additional-resources"></a>

Para obtener más información acerca de cómo utilizar Athena para consultar registros, consulte las siguientes entradas del Blog de macrodatos de AWS:
+ [Analyze VPC Flow Logs with point-and-click Amazon Athena integration](https://aws.amazon.com/blogs/networking-and-content-delivery/analyze-vpc-flow-logs-with-point-and-click-amazon-athena-integration/) (Análisis de los registros de flujo de VPC con una integración de Amazon Athena de apuntar y hacer clic) 
+ [Analyzing VPC flow logs using Amazon Athena and Quick](https://aws.amazon.com/blogs/big-data/analyzing-vpc-flow-logs-using-amazon-athena-and-amazon-quicksight/)
+ [Optimize performance and reduce costs for network analytics with VPC Flow Logs in Apache Parquet format](https://aws.amazon.com/blogs/big-data/optimize-performance-and-reduce-costs-for-network-analytics-with-vpc-flow-logs-in-apache-parquet-format/) (Optimización del rendimiento y reducción de los costos de análisis de red con registros de flujo de VPC en formato Apache Parquet)