Come analizzare log di flusso VPC personalizzati utilizzando CloudWatch Logs Insights?

Ultimo aggiornamento: 2022-04-27

Ho configurato log di flusso VPC personalizzati. Come scoprire modelli e tendenze con Amazon CloudWatch Logs Insights?

Breve descrizione

È possibile utilizzare CloudWatch Logs Insights per analizzare i log di flusso VPC. CloudWatch Log Insights rileva automaticamente i campi in molti log forniti da Amazon, nonché gli eventi di log in formato JSON, per consentire una facile creazione di query ed esplorazione dei log. I log di flusso VPC nel formato predefinito vengono rilevati automaticamente da CloudWatch Logs Insights.

Tuttavia, i log di flusso VPC vengono distribuiti in un formato personalizzato. Per questo motivo, non vengono rilevati automaticamente, quindi è necessario modificare le query. In questo articolo vengono forniti diversi esempi di query che è possibile personalizzare ed estendere in base ai propri casi d'uso.

Questo formato di log di flusso VPC personalizzato viene utilizzato:

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

Risoluzione

Recupera gli ultimi log di flusso VPC

Poiché i campi di log non vengono rilevati automaticamente da CloudWatch Logs Insights, è necessario utilizzare la parola chiave analizza per isolare i campi desiderati. In questa query, i risultati vengono ordinati in base all'ora di inizio dell'evento del log di flusso e limitati alle due voci di log più recenti.

Query

#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

Risultati


id_account  id_vpc   id_sottorete  id_interfaccia id_istanza 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

Riepiloga i trasferimenti di dati per coppie di indirizzi IP di origine/destinazione

Successivamente, riepiloga il traffico di rete in base alle coppie di indirizzi IP di origine/destinazione. In questo esempio, la statistica della somma viene utilizzata per eseguire un'aggregazione sul campo byte. Questo calcola un totale cumulativo dei dati trasferiti tra host. Per maggiori informazioni, è inclusa la direzione_flusso. I risultati di questa aggregazione vengono quindi assegnati temporaneamente al campo Dati_Trasferiti. Quindi, i risultati vengono ordinati per Dati_Trasferiti in ordine decrescente e vengono restituite le due coppie più grandi.

Query

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

Risultati

srcaddr dstaddr direzione_flusso Dati_Transferiti
172.31.1.247 3.230.172.154 in uscita 346952038
172.31.0.46 3.230.172.154 in uscita 343799447

Analizza i trasferimenti di dati dell'ID di istanza EC2

È possibile utilizzare log di flusso VPC personalizzati per analizzare direttamente un ID di istanza Amazon EC2 (Amazon Elastic Compute Cloud). Utilizzando la query precedente, è ora possibile determinare le istanze EC2 più attive utilizzando il campo id_istanza.

Query

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

Risultati

id_istanza Dati_Transferiti
- 1443477306
i-03205758c9203c979 517558754
i-0ae33894105aa500c 324629414
i-01506ab9e9e90749d 198063232
i-0724007fef3cb06f3 54847643

Filtro per il traffico SSH rifiutato

Per comprendere meglio il traffico negato dal gruppo di sicurezza e dalla lista di controllo degli accessi alla rete, filtra in base ai log di flusso VPC rifiutati. È possibile restringere ulteriormente questo filtro per includere il protocollo e la porta di destinazione. Per identificare gli host rifiutati sul traffico SSH, estendi il filtro per includere il protocollo TCP (ad esempio, il protocollo 6) e il traffico con una porta di destinazione di 22.

Query

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

Risultati

srcaddr SSH_volume_traffico
23.95.222.129 160
179.43.167.74 80

Isola il flusso di dati HTTP per una coppia origine/destinazione specifica

Per analizzare ulteriormente le tendenze dei dati utilizzando CloudWatch Logs Insights, isola il traffico bidirezionale tra due indirizzi IP. In questa query, ["172.31.1.247", "172.31.11.212"] restituisce i log di flusso utilizzando l'indirizzo IP come origine o destinazione. Per isolare il traffico HTTP, le istruzioni del filtro corrispondono agli eventi del log di flusso VPC con il protocollo 6 (TCP) e la porta 80. Utilizza la parola chiave visualizza per restituire un sottoinsieme di tutti i campi disponibili.

Query

#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

Risultati

id_interfaccia srcaddr srcport dstaddr dstport protocollo byte operazione stato_log
eni-0b74120275654905e 172.31.11.212 80 172.31.1.247 29376 6 5160876 ACCETTA OK
eni-0b74120275654905e 172.31.1.247 29376 172.31.11.212 80 6 97380 ACCETTA OK

Isola il flusso di dati HTTP per una coppia origine/destinazione specifica

È possibile utilizzare CloudWatch Logs Insights per visualizzare i risultati sotto forma di grafico a barre o a torta. Se i risultati includono la funzione bin(), i risultati della query vengono restituiti con un timestamp. Questa serie temporale può quindi essere visualizzata con un grafico a linee o ad area in pila.

Basandosi sulla query precedente, è possibile utilizzare la somma (byte) delle statistiche come Dati_Trasferiti da bin(1m) per calcolare i dati cumulativi trasferiti su intervalli di un minuto. Per accedere a questa visualizzazione, passa tra le tabelle Log e Visualizzazione nella console di CloudWatch Logs Insights.

Query

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)

Risultati

bin(1 m) Dati_Transferiti
2022-04-01 15:23:00 .000 17225787
2022-04-01 15:21:00 .000 1772449
2022-04-01 15:20:00 .000 1125500
2022-04-01 15:19:00 .000 101525
2022-04-01 15:18:00 .000 81376