Interrogation des journaux de flux Amazon VPC - Amazon Athena

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Interrogation des journaux de flux Amazon VPC

Les journaux de flux de cloud privé virtuel Amazon Virtual Private Cloud capturent des informations sur le trafic IP circulant vers et depuis les interfaces réseau d'un VPC. Utilisez les journaux pour examiner les modèles de trafic réseau, et identifier les menaces et les risques au sein de votre réseau VPC.

Pour interroger vos journaux de flux Amazon VPC, deux options s'offrent à vous :

  • Console Amazon VPC : utilisez la fonctionnalité d'intégration Athena de la console Amazon VPC pour générer un modèle AWS CloudFormation qui crée une base de données Athena, un groupe de travail et une table de journaux de flux avec partitionnement pour vous. Le modèle crée également un ensemble de requêtes de journaux de flux prédéfinies que vous pouvez utiliser pour obtenir des informations concernant le trafic qui passe par votre VPC.

    Pour de plus amples d'informations, consultez la section Interroger des journaux de flux à l'aide d'Amazon Athena dans le Guide de l'utilisateur Amazon VPC.

  • Console Amazon Athena – Créez vos tables et vos requêtes directement dans la console Athena. Pour plus d'informations, continuez à lire cette page.

Création et interrogation de tables pour les journaux de flux VPC personnalisés

Avant de commencer à interroger les journaux dans Athena, activez les journaux de flux VPC et configurez-les pour qu'ils soient enregistrés dans votre compartiment Simple Storage Service (Amazon S3). Une fois que vous avez créé les journaux, laissez-les s'exécuter quelques minutes pour collecter les données. Les journaux sont créés dans un format de compression GZIP qu'Athena vous permet d'interroger directement.

Lorsque vous créez un journal de flux VPC personnalisé, vous pouvez utiliser un format personnalisé quand vous voulez spécifier les champs à renvoyer dans le journal de flux et l'ordre dans lequel ils doivent apparaître. Pour plus d'informations sur les enregistrements des journaux de flux, consultez Enregistrements des journaux de flux du Guide de l'utilisateur Amazon VPC.

Considérations communes

Lorsque vous créez des tables dans les journaux de flux Athena pour Amazon VPC, n'oubliez pas les points suivants :

  • Par défaut, sur Athena, Parquet accède aux colonnes par nom. Pour de plus amples informations, veuillez consulter Traitement des mises à jour de schéma.

  • Utilisez les noms des enregistrements du journal de flux pour les noms de colonnes sur Athena. Les noms des colonnes du schéma Athena doivent correspondre exactement aux noms des champs dans les journaux de flux Amazon VPC, avec les différences suivantes :

    • Remplacez les traits d'union dans les noms des champs de journaux Amazon VPC par des traits de soulignement dans les noms des colonnes Athena. Sur Athena, les seuls caractères acceptables pour les noms de bases de données, les noms de tables et les noms de colonnes sont les lettres minuscules, les chiffres et le caractère de soulignement. Pour de plus amples informations, veuillez consulter Noms de bases de données, de tables et de colonnes.

    • Échappez les noms des enregistrements du journal de flux qui sont Mots-clés réservés sur Athena en les entourant de barres obliques inversées.

  • Les journaux de flux VPC sont Compte AWS spécifiques. Lorsque vous publiez vos fichiers journaux sur Amazon S3, le chemin créé par Amazon VPC dans Amazon S3 inclut l'ID du Compte AWS utilisé pour créer le journal de flux. Pour plus d'informations, consultez Publier les journaux de flux vers Amazon S3 dans le Guide de l'utilisateur Amazon VPC.

Instruction CREATE TABLE pour les journaux de flux Amazon VPC

La procédure suivante permet de créer une table Amazon VPC pour les journaux de flux VPC. Lorsque vous créez un journal de flux avec un format personnalisé, vous créez une table avec des champs correspondant à ceux que vous avez spécifiés lors de la création du journal de flux, dans le même ordre que celui où vous les avez spécifiés.

Pour créer une table Athena pour les journaux de flux Amazon VPC
  1. Saisissez une instruction DDL telle que la suivante dans l'éditeur de requêtes de la console Athena, en suivant les instructions de la section Considérations communes. L'exemple d'instruction suivant crée une table comportant les colonnes des journaux de flux Amazon VPC versions 2 à 5, comme indiqué dans la rubrique Registres des journaux de flux. Si vous utilisez un autre jeu de colonnes ou un autre ordre de colonnes, modifiez l'instruction en conséquence.

    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://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/' TBLPROPERTIES ("skip.header.line.count"="1");

    Notez les points suivants :

    • La requête spécifie ROW FORMAT DELIMITED et omet de spécifier un SerDe. Cela signifie que la requête utilise le LazySimpleSerDe pour fichiers CSV, TSV et avec séparateur personnalisé. Dans cette requête, les champs sont terminés par un espace.

    • La clause PARTITIONED BY utilise le type date. Cela permet d'utiliser des opérateurs mathématiques dans les requêtes pour sélectionner ce qui est plus ancien ou plus récent par rapport à une certaine date.

      Note

      Étant donné que date est un mot-clé réservé dans les instructions DDL, il est entouré de guillemets inversés. Pour de plus amples informations, veuillez consulter Mots-clés réservés.

    • Pour un journal de flux VPC avec un autre format personnalisé, modifiez les champs pour qu'ils correspondent à ceux que vous avez spécifiés lors de la création du journal de flux.

  2. Modifiez le LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/' afin de pointer vers le compartiment Amazon S3 qui contient les données de vos journaux.

  3. Exécutez la requête dans la console Athena. Une fois que la requête est terminée, Athena enregistre la table vpc_flow_logs, de telle sorte que les données soient prêtes pour que vous puissiez émettre des requêtes.

  4. Créez des partitions pour être en mesure de lire les données, comme dans l'exemple de requête suivant. Cette requête suivant crée une partition unique pour une date spécifique. Remplacez les espaces réservés de date et d'emplacement en fonction des besoins.

    Note

    Cette requête crée seulement une partition unique, pour une date que vous spécifiez. Pour automatiser le processus, utilisez un script qui exécute cette requête et crée des partitions de cette manière pour la year/month/day, ou utilisez une instruction CREATE TABLE qui spécifie la projection des partitions.

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

Exemples de requêtes pour la table vpc_flow_logs

Utilisez l'éditeur de requêtes de la console Athena pour exécuter des instructions SQL sur la table que vous créez. Vous pouvez enregistrer les requêtes, afficher des requêtes précédentes ou télécharger les résultats de la requête au format CSV. Dans les exemples suivants, remplacer vpc_flow_logs par le nom de votre table. Modifiez les valeurs de colonne et d'autres variables en fonction de vos besoins.

L'exemple de requête suivant répertorie un maximum de 100 journaux de flux pour la date spécifiée.

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

La requête suivante répertorie toutes les connexions TCP rejetées et utilise la nouvelle colonne de partition de date, date, pour en extraire le jour de la semaine pendant lequel ces événements sont survenus.

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;

Pour voir lequel de vos serveurs reçoit le plus grand nombre de demandes HTTPS, utilisez cette requête. Elle comptabilise le nombre de paquets reçus sur le port HTTPS 443, les regroupe par adresse IP de destination et renvoie les 10 principaux.

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;

Création de tables pour les journaux de flux au format Apache Parquet

La procédure suivante permet de créer une table Amazon VPC pour les journaux de flux VPC au format Apache Parquet.

Pour créer une table Athena pour les journaux de flux Amazon VPC au format Parquet
  1. Saisissez une instruction DDL telle que la suivante dans l'éditeur de requêtes de la console Athena, en suivant les instructions de la section Considérations communes. L'exemple d'instruction suivant crée une table comportant les colonnes des journaux de flux Amazon VPC versions 2 à 5, comme indiqué dans la rubrique Registres des journaux de flux au format Parquet, Hive partitionné heure par heure. Si vous n'avez aucune partition horaire, retirez hour de la clause 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://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/' TBLPROPERTIES ( 'EXTERNAL'='true', 'skip.header.line.count'='1' )
  2. Modifiez l'exemple LOCATION 's3://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/' afin de pointer vers le chemin Simple Storage Service (Amazon S3) qui contient les données de vos journaux.

  3. Exécutez la requête dans la console Athena.

  4. Si vos données sont au format compatible Hive, exécutez la commande suivante dans la console Athena pour mettre à jour et charger les partitions Hive dans le métastore. Une fois la requête terminée, vous pouvez interroger les données dans la table vpc_flow_logs_parquet.

    MSCK REPAIR TABLE vpc_flow_logs_parquet

    Si vous n'utilisez pas de données compatibles avec Hive, exécutez ALTER TABLE ADD PARTITION pour charger les partitions.

Pour de plus amples informations sur l'utilisation d'Athena pour interroger les journaux de flux Amazon VPC au format Parquet, veuillez consulter l'article Optimiser les performances et réduire les coûts d'analytique réseau avec les journaux de flux VPC au format Apache Parquet dans le Blog Big DataAWS .

Création et interrogation d'une table pour les journaux de flux Amazon VPC à l'aide de la projection de partitions

Utilisez une instruction CREATE TABLE comme la suivante pour créer une table, partitionner la table et remplir automatiquement les partitions en utilisant projection de partition. Remplacer le nom de la table test_table_vpclogs dans l'exemple par le nom de votre table. Modifiez la clause LOCATION pour spécifier le compartiment Amazon S3 qui contient les données de vos journaux Amazon VPC.

L'instruction CREATE TABLE suivante concerne les journaux de flux VPC livrés dans un format de partitionnement de style non Hive. L’exemple permet l’agrégation de plusieurs comptes. Si vous centralisez les journaux de flux VPC de plusieurs comptes dans un compartiment Amazon S3, l'ID du compte doit être saisi dans le chemin d'accès 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://$LOCATION_OF_LOGS/AWSLogs/${accid}/vpcflowlogs/${region}/${day}" )

Exemples de requêtes pour la table test_table_vpclogs

L'exemple de requête suivant interroge la table test_table_vpclogs créée par l'instruction précédente CREATE TABLE. Remplacez test_table_vpclogs dans les requêtes par le nom de votre table. Modifiez les valeurs de colonne et d'autres variables en fonction de vos besoins.

Pour renvoyer les 100 premières entrées du journal d'accès dans l'ordre chronologique pendant une période donnée, exécutez une requête comme la suivante.

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

Pour voir quel serveur reçoit les dix premiers paquets HTTP pendant une période de temps spécifiée, exécutez une requête semblable à la suivante. La requête compte le nombre de paquets reçus sur le port HTTPS 443, les regroupe par adresse IP de destination et renvoie les 10 premières entrées de la semaine précédente.

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

Pour renvoyer les journaux créés pendant une période donnée, exécutez une requête semblable à la suivante.

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'

Pour renvoyer les journaux d'accès d'une adresse IP source entre des périodes spécifiées, exécutez une requête semblable à la suivante.

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

La requête ci-dessous affiche toutes les connexions TCP rejetées.

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

Pour renvoyer les journaux d'accès de la plage d'adresses IP commençant par 10.117, exécutez une requête similaire à la suivante.

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

Pour renvoyer les journaux d'accès d'une adresse IP de destination entre une certaine plage de temps, exécutez une requête semblable à la suivante.

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

Création de tables pour les journaux de flux au format Apache Parquet à l'aide de la projection de partition

L'instruction CREATE TABLE de projection de partition suivante pour les journaux de flux VPC est au format Apache Parquet, n'est pas compatible avec Hive et est partitionnée par heure et par date plutôt que par jour. Remplacer le nom de la table test_table_vpclogs_parquet dans l'exemple par le nom de votre table. Modifiez la clause LOCATION pour spécifier le compartiment Amazon S3 qui contient les données de vos journaux 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://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/prefix/AWSLogs/${account_id}/vpcflowlogs/${region}/${date}/${hour}" )

Ressources supplémentaires

Pour plus d'informations sur l'utilisation d'Athena pour analyser les journaux de flux VPC, consultez les articles suivants du blog AWS Big Data :