Comment analyser les journaux de flux VPC personnalisés à l'aide de CloudWatch Logs Insights ?
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_id | instance_id | srcaddr | srcport |
---|---|---|---|---|---|---|
123456789012 | vpc-0b69ce8d04278ddd | subnet-002bdfe1767d0ddb0 | eni-0435cbb62960f230e | - | 172.31.0.104 | 55125 |
123456789012 | vpc-0b69ce8d04278ddd1 | subnet-002bdfe1767d0ddb0 | eni-0435cbb62960f230e | - | 91.240.118.81 | 49422 |
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
srcaddr | dstaddr | flow_direction | Data_Transferred |
---|---|---|---|
172.31.1.247 | 3.230.172.154 | sortie | 346952038 |
172.31.0.46 | 3.230.172.154 | sortie | 343799447 |
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_id | Data_Transferred |
---|---|
- | 1443477306 |
i-03205758c9203c979 | 517558754 |
i-0ae33894105aa500c | 324629414 |
i-01506ab9e9e90749d | 198063232 |
i-0724007fef3cb06f3 | 54847643 |
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
srcaddr | SSH_Traffic_Volume |
---|---|
23.95.222.129 | 160 |
179.43.167.74 | 80 |
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_id | srcaddr | srcport | dstaddr | dstport | Protocole | octets | action | log_status |
---|---|---|---|---|---|---|---|---|
eni-0b74120275654905e | 172.31.11.212 | 80 | 172.31.1.247 | 29376 | 6 | 5160876 | ACCEPTER | OK |
eni-0b74120275654905e | 172.31.1.247 | 29376 | 172.31.11.212 | 80 | 6 | 97380 | ACCEPTER | OK |
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.000 | 17225787 |
2022-04-01 15:21:00.000 | 17724499 |
2022-04-01 15:20:00.000 | 1125500 |
2022-04-01 15:19:00.000 | 101525 |
2022-04-01 15:18:00.000 | 81376 |
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
Contenus pertinents
- demandé il y a 8 moislg...
- Réponse acceptéedemandé il y a 8 moislg...
- demandé il y a un anlg...
- demandé il y a 8 moislg...
- demandé il y a 3 moislg...
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans
- AWS OFFICIELA mis à jour il y a 2 ans