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

8 minuti di lettura
0

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_interfacciaid_istanzasrcaddrsrcport
123456789012 vpc-0b69ce8d04278ddd subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e172.31.0.10455125
123456789012 vpc-0b69ce8d04278ddd1 subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e91.240.118.8149422

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

srcaddrdstaddrdirezione_flussoDati_Transferiti
172.31.1.2473.230.172.154in uscita346952038
172.31.0.463.230.172.154in uscita343799447

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_istanzaDati_Transferiti
-1443477306
i-03205758c9203c979517558754
i-0ae33894105aa500c324629414
i-01506ab9e9e90749d198063232
i-0724007fef3cb06f354847643

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

srcaddrSSH_volume_traffico
23.95.222.129160
179.43.167.7480

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_interfacciasrcaddrsrcportdstaddrdstportprotocollobyteoperazionestato_log
eni-0b74120275654905e172.31.11.21280172.31.1.2472937665160876ACCETTAOK
eni-0b74120275654905e172.31.1.24729376172.31.11.21280697380ACCETTAOK

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 .00017225787
2022-04-01 15:21:00 .0001772449
2022-04-01 15:20:00 .0001125500
2022-04-01 15:19:00 .000101525
2022-04-01 15:18:00 .00081376

Informazioni correlate

Log supportati e campi scoperti

Analisi dei dati di log con CloudWatch Logs Insights

Comandi di query CloudWatch Logs Insights

Tutorial: Eseguire una query che produca una visualizzazione di serie temporali

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa