Wie kann ich benutzerdefinierte VPC Flow Logs mit CloudWatch Logs Insights analysieren?

Letzte Aktualisierung: 27.04.2022

Ich habe benutzerdefinierte VPC Flow Logs konfiguriert. Wie kann ich mit Amazon CloudWatch Logs Insights Vorlagen und Trends entdecken?

Kurzbeschreibung

Sie können CloudWatch Logs Insights verwenden, um VPC Flow Logs zu analysieren. CloudWatch Log Insights erkennt automatisch Felder in vielen von Amazon bereitgestellten Protokollen sowie JSON-formatierten Protokollereignissen, um eine einfache Anfrageerstellung und Protokollerkundung zu ermöglichen. VPC Flow Logs im Standardformat werden automatisch von CloudWatch Logs Insights erkannt.

VPC Flow Logs werden jedoch in einem benutzerdefinierten Format bereitgestellt. Aus diesem Grund werden sie nicht automatisch erkannt, sodass Sie die Abfragen ändern müssen. Dieser Artikel gibt mehrere Beispiele für Abfragen, die Sie an Ihre Anwendungsfälle anpassen und erweitern können.

Es wird dieses benutzerdefinierte VPC-Flow-Logs-Format verwendet:

${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}

Auflösung

Rufen Sie aktuelle VPC-Flow-Protokolle ab

Sie müssen zur Isolierung der gewünschten Felder ein analytisches Keyword benutzen, da Protokollfelder nicht automatisch von CloudWatch Logs Insights erkannt werden. In dieser Abfrage werden die Ergebnisse nach Startzeit des Flow-Log-Ereignisses sortiert und auf die beiden neuesten Protokolleinträge beschränkt.

Abfrage

#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

Ergebnisse


Konto_ID  VPC_ID   Subnetz_ID  Interface_ID Instanz_ID srcAddr srcPort
123456789012  VPC-0b69ce8d04278ddd  Subnetz-002bdfe1767d0ddb0 ENI-0435cbb62960f230e 172.31.0.104 55125
123456789012  VPC-0b69ce8d04278ddd1  Subnetz-002bdfe1767d0ddb0 ENI-0435cbb62960f230e 91.240.118.81 49422

Fassen Sie Datenübertragungen nach Quell-/Ziel-IP-Adresspaaren zusammen

Fassen Sie als nächstes den Netzwerkverkehr nach Quell-/Ziel-IP-Adresspaaren zusammen. In diesem Beispiel wird die Summenstatistik verwendet, um eine Aggregation für das Byte-Feld durchzuführen. Man berechnet dadurch eine kumulierte Summe der übertragenen Daten zwischen Hosts. Für mehr Kontext ist die Flow_Direction enthalten. Die Ergebnisse dieser Aggregation werden dann vorübergehend dem Feld übertragene Daten zugewiesen. Dann werden die Ergebnisse in absteigender Reihenfolge nach übertragenen Daten sortiert, und die beiden größten Paare werden zurückgegeben.

Abfrage

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

Ergebnisse

srcAddr dstAddr Flow_Direction übertragene Daten
172.31.1.247 3.230.172.154 egress 346952038
172.31.0.46 3.230.172.154 Egress 343799447

Analysieren von Datenübertragungen nach EC2-Instanz-ID

Sie können benutzerdefinierte VPC Flow Logs verwenden, um eine Amazon Elastic Compute Cloud (Amazon EC2)-Instanz-ID direkt zu analysieren. Mit der vorherigen Abfrage können Sie jetzt die aktivsten EC2-Instances ermitteln, indem Sie das Feld Instance_ID verwenden.

Abfrage

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

Ergebnisse

Instanz_ID übertragene Daten
- 1443477306
i-03205758c9203c979 5175 58754
i-0ae33894105aa500c 324629414
i-01506ab9e9e90749d 198063232
i-0724007fef3cb06f3 54847643

Filter für abgelehnten SSH-Verkehr

Um den Datenverkehr, der von Ihrer Sicherheitsgruppe und den Network Access Control Lists (ACL) verweigert wurde, besser zu verstehen, sollten Sie nach abgelehnten VPC-Flow-Protokollen filtern. Sie können diesen Filter weiter eingrenzen, um Protokoll und Zielport einzubeziehen. Erweitern Sie den Filter zum Einschluß des TCP-Protokolls (z.B. Protokoll 6) und den Datenverkehr mit einem Zielport von 22, um Hosts zu identifizieren, die bei SSH-Verkehr abgelehnt werden.

Abfrage

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

Ergebnisse

srcAddr SSH_Verkehrsaufkommen
23.95.222.129 160
179.43.167.74 80

Isolieren Sie den HTTP-Datenstrom für ein bestimmtes Quell-/Zielpaar

Isolieren Sie den bidirektionalen Datenverkehr zwischen zwei IP-Adressen, um Trends in Ihren Daten mithilfe von CloudWatch Logs Insights weiter zu untersuchen. In dieser Abfrage gibt ["172.31.1.247", "172.31.11.212"] Flow-Protokolle zurück, die entweder die IP-Adresse als Quell- oder Ziel-IP-Adresse verwenden. Stimmen Sie die Filteranweisungen VPC Flow Log-Ereignisse mit Protokoll 6 (TCP) und Port 80 ab, um den HTTP-Verkehr zu isolieren. Verwenden Sie das angegebene Schlüsselwort, um eine Teilmenge aller verfügbaren Felder zurückzugeben.

Abfrage

#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

Ergebnisse

Interface_ID srcAddr srcPort dstAddr dst-port Protokoll Bytes Aktion Log_Status
Eni-0b74120275654905e 172.31.11.212 80 172.31.1.247 29376 6 5160876 ANNAHME OK
Eni-0b74120275654905e 172.31.1.247 29376 172.31.11.212 80 6 97380 ANNAHME OK

Isolieren Sie den HTTP-Datenstrom für ein bestimmtes Quell-/Zielpaar

Sie können CloudWatch Logs Insights verwenden, um Ergebnisse als Balken- oder Tortendiagramm zu visualisieren. Wenn die Ergebnisse die Funktion bin () enthalten, werden Abfrageergebnisse mit einem Zeitstempel zurückgegeben. Diese Zeitreihen können dann mit einem Linien- oder gestapelten Flächendiagramm visualisiert werden.

Aufbauend auf der vorherigen Abfrage können Sie stats sum(Byte) als Datentransfert durch bin(1m) verwenden, um die kumulativen Daten zu berechnen, die in Intervallen von einer Minute übertragen wurden. Um diese Visualisierung anzuzeigen, wechseln Sie in der CloudWatch Logs Insights-Konsole zwischen den Tabellen Logs und Visualisierung.

Abfrage

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)

Ergebnisse

bin(1m) übertragene Daten
01.04.2022 15.23 Uhr 17225787
01.04.2022 15.21 Uhr 17724499
2022-04-01 15.20 Uhr 1125500
01.04.2022 15:19 Uhr 101525
01.04.2022 15.18 Uhr 81376