Comment analyser les journaux de flux VPC personnalisés à l'aide de CloudWatch Logs Insights ?

Lecture de 8 minute(s)
0

J'ai configuré des journaux de flux VPC personnalisés. Comment puis-je découvrir des modèles et des tendances avec Amazon CloudWatch Logs Insights ?

Brève description

Vous pouvez utiliser CloudWatch Logs Insights pour analyser les journaux de flux VPC. CloudWatch Log Insights découvre automatiquement les champs dans de nombreux journaux fournis par Amazon, ainsi que les événements de journaux au format JSON, afin de faciliter la construction de requêtes et l'exploration des journaux. Les journaux de flux VPC qui sont au format par défaut sont automatiquement découverts par CloudWatch Logs Insights.

Toutefois, les journaux de flux VPC sont déployés dans un format personnalisé. De ce fait, ils ne sont pas découverts automatiquement, vous devez donc modifier les requêtes. Cet article fournit plusieurs exemples de requêtes que vous pouvez personnaliser et étendre en fonction de vos cas d'utilisation.

Ce format de journaux de flux VPC personnalisé est utilisé :

${account-id} ${vpc-id} ${subnet-id} ${interface-id} ${instance-id} ${srcaddr} ${srcport} ${dstaddr} ${dstport} ${protocol} ${packets} ${bytes} ${action} ${log-status} ${start} ${end} ${flow-direction} ${traffic-path} ${tcp-flags} ${pkt-srcaddr} ${pkt-src-aws-service} ${pkt-dstaddr} ${pkt-dst-aws-service} ${region} ${az-id} ${sublocation-type} ${sublocation-id}

Solution

Récupérer les derniers journaux de flux VPC

Comme les champs de journaux ne sont pas automatiquement découverts par CloudWatch Logs Insights, vous devez utiliser le mot clé parse pour isoler les champs souhaités. Dans cette requête, les résultats sont triés en fonction de l'heure de début des événements du journal de flux et limités aux deux entrées de journaux les plus récentes.

Requête

#Retrieve latest custom VPC Flow Logs
parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| sort start desc
| limit 2

Résultats

account_id vpc_id  subnet_id interface_idinstance_idsrcaddrsrcport
123456789012 vpc-0b69ce8d04278ddd subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e172.31.0.10455125
123456789012 vpc-0b69ce8d04278ddd1 subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e91.240.118.8149422

Résumez les transferts de données par paires d'adresses IP source/de destination

Résumez ensuite le trafic réseau par paires d'adresses IP source/de destination. Dans cet exemple, la statistique de somme est utilisée pour effectuer une agrégation sur le champ octets. Cela permet de calculer le total cumulé des données transférées entre les hôtes. Pour plus de contexte, flow_direction (direction du flux) est incluse. Les résultats de cette agrégation sont ensuite affectés temporairement au champ Data_Transferred. Ensuite, les résultats sont triés par Data_Transferred dans l'ordre décroissant, et les deux plus grandes paires sont renvoyées.

Requête

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| stats sum(bytes) as Data_Transferred by srcaddr, dstaddr, flow_direction
| sort by Data_Transferred desc
| limit 2

Résultats

srcaddrdstaddrflow_directionData_Transferred
172.31.1.2473.230.172.154sortie346952038
172.31.0.463.230.172.154sortie343799447

Analyser les transferts de données par ID d'instance EC2

Vous pouvez utiliser les journaux de flux VPC personnalisés pour analyser directement un ID d'instance Amazon Elastic Compute Cloud (Amazon EC2). En reprenant la requête précédente, vous pouvez maintenant déterminer les instances EC2 les plus actives à l'aide du champ instance_id.

Requête

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| stats sum(bytes) as Data_Transferred by instance_id
| sort by Data_Transferred desc
| limit 5

Résultats

instance_idData_Transferred
-1443477306
i-03205758c9203c979517558754
i-0ae33894105aa500c324629414
i-01506ab9e9e90749d198063232
i-0724007fef3cb06f354847643

Filtre pour le trafic SSH rejeté

Pour mieux comprendre le trafic refusé par votre groupe de sécurité et vos listes de contrôle d'accès réseau (ACL), filtrez les journaux de flux VPC rejetés. Vous pouvez affiner davantage ce filtre pour inclure le protocole et le port cible. Pour identifier les hôtes rejetés sur le trafic SSH, étendez le filtre pour inclure le protocole TCP (par exemple, le protocole 6) et le trafic avec un port de destination de 22.

Requête

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter action = "REJECT" and protocol = 6 and dstport = 22
| stats sum(bytes) as SSH_Traffic_Volume by srcaddr
| sort by SSH_Traffic_Volume desc
| limit 2

Résultats

srcaddrSSH_Traffic_Volume
23.95.222.129160
179.43.167.7480

Isoler le flux de données HTTP pour une paire source/destination spécifique

Pour étudier plus en détail les tendances de vos données à l'aide de CloudWatch Logs Insights, isolez le trafic bidirectionnel entre deux adresses IP. Dans cette requête, ["172.31.1.247","172.31.11.212"] renvoie les journaux de flux en utilisant l'adresse IP comme adresse IP source ou de destination. Pour isoler le trafic HTTP, les instructions de filtre font correspondre les événements du journal de flux VPC avec le protocole 6 (TCP) et le port 80. Utilisez le mot-clé display pour renvoyer un sous-ensemble de tous les champs disponibles.

Requête

#HTTP Data Stream for Specific Source/Destination Pair
parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter srcaddr in ["172.31.1.247","172.31.11.212"] and dstaddr in ["172.31.1.247","172.31.11.212"] and protocol = 6 and (dstport = 80 or srcport=80)
| display interface_id,srcaddr, srcport, dstaddr, dstport, protocol, bytes, action, log_status, start, end, flow_direction, tcp_flags
| sort by start desc
| limit 2

Résultats

interface_idsrcaddrsrcportdstaddrdstportProtocoleoctetsactionlog_status
eni-0b74120275654905e172.31.11.21280172.31.1.2472937665160876ACCEPTEROK
eni-0b74120275654905e172.31.1.24729376172.31.11.21280697380ACCEPTEROK

Isoler le flux de données HTTP pour une paire source/destination spécifique

Vous pouvez utiliser CloudWatch Logs Insights pour visualiser les résultats sous forme de graphique à barres ou à secteurs. Si les résultats incluent la fonction bin(), les résultats de la requête sont renvoyés avec un horodatage. Cette série temporelle peut ensuite être visualisée à l'aide d'un graphique linéaire ou en zones empilées.

Sur la base de la requête précédente, vous pouvez utiliser la somme des statistiques (octets) comme Data_Transferred by bin(1m) pour calculer les données cumulées transférées sur des intervalles d'une minute. Pour afficher cette visualisation, basculez entre les tableaux Logs (Journaux) et Visualization (Visualisation) dans la console CloudWatch Logs Insights.

Requête

parse @message "* * * * * * * * * * * * * * * * * * * * * * * * * * *" as account_id, vpc_id, subnet_id, interface_id,instance_id, srcaddr, srcport, dstaddr, dstport, protocol, packets, bytes, action, log_status, start, end, flow_direction, traffic_path, tcp_flags, pkt_srcaddr, pkt_src_aws_service, pkt_dstaddr, pkt_dst_aws_service, region, az_id, sublocation_type, sublocation_id
| filter srcaddr in ["172.31.1.247","172.31.11.212"] and dstaddr in ["172.31.1.247","172.31.11.212"] and protocol = 6 and (dstport = 80 or srcport=80)
| stats sum(bytes) as Data_Transferred by bin(1m)

Résultats

bin(1m)Data_Transferred
2022-04-01 15:23:00.00017225787
2022-04-01 15:21:00.00017724499
2022-04-01 15:20:00.0001125500
2022-04-01 15:19:00.000101525
2022-04-01 15:18:00.00081376

Informations connexes

Fichiers journaux pris en charge et champs découverts

Analyse des données de journaux avec CloudWatch Logs Insights

Commandes de requête CloudWatch Logs Insights

Didacticiel : Exécuter une requête qui produit une visualisation de séries temporelles

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans