Como posso usar o CloudWatch Logs Insights para analisar os logs de fluxo personalizados do Amazon VPC?

8 minuto de leitura
0

Usei o Amazon Virtual Private Cloud (Amazon VPC) Flow Logs para configurar logs de fluxo de VPC personalizados. Quero usar o Amazon CloudWatch Logs Insights para descobrir padrões e tendências nos logs.

Breve descrição

O CloudWatch Logs Insights descobre automaticamente os logs de fluxo que estão no formato padrão, mas não descobre automaticamente os logs de fluxo no formato personalizado.

Para usar o CloudWatch Logs Insights com logs de fluxo que estão no formato personalizado, você deve modificar as consultas.

Veja a seguir um exemplo de um formato de log de fluxo personalizado:

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

As consultas a seguir são exemplos de como você pode personalizar e ampliar as consultas para que correspondam aos seus casos de uso.

Resolução

Recuperar os logs de fluxo mais recentes

Para extrair dados dos seus campos de log, use a palavra-chave parse. Por exemplo, a saída da consulta a seguir é classificada pela hora de início do evento de log de fluxo e restrita às duas entradas de log mais recentes.

Consulta

#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

Saída

account_idvpc_idsubnet_idinterface_idinstance_idsrcaddrsrcport
123456789012vpc-0b69ce8d04278dddsubnet-002bdfe1767d0ddb0eni-0435cbb62960f230e-172.31.0.10455125
123456789012vpc-0b69ce8d04278ddd1subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e-91.240.118.8149422

Resumir as transferências de dados por pares de endereços IP de origem e destino

Use a consulta a seguir para resumir o tráfego de rede por pares de endereços IP de origem e destino. Na consulta de exemplo, a estatística sum agrega o campo bytes. A estatística sum calcula um total cumulativo dos dados transferidos entre hosts, portanto, o fluxo flow_direction está incluído na consulta e na saída. Os resultados da agregação são atribuídos temporariamente ao campo Data_Transferred. Em seguida, os resultados são classificados por Data_Transferred em ordem decrescente, e os dois maiores pares são retornados.

Consulta

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

Saída

srcaddrdstaddrflow_directionData_Transferred
172.31.1.2473.230.172.154egress346952038
172.31.0.463.230.172.154egress343799447

Analisar transferências de dados por ID de instância do Amazon EC2

Você pode usar logs de fluxo personalizados para analisar transferências de dados pelo ID de instância do Amazon Elastic Compute Cloud (Amazon EC2). Para determinar as instâncias EC2 mais ativas, inclua o campo instance_id na consulta.

Consulta

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

Saída

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

Filtrar o tráfego SSH rejeitado

Para analisar o tráfego que o seu grupo de segurança e as listas de controle de acesso à rede (ACLs de rede) negaram, use a ação de filtro REJECT. Para identificar os hosts que são rejeitados no tráfego SSH, estenda o filtro para incluir o protocolo TCP e o tráfego com uma porta de destino 22. No exemplo de consulta a seguir, é usado o protocolo TCP 6.

Consulta

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

Saída

srcaddrSSH_Traffic_Volume
23.95.222.129160
179.43.167.7480

Isolar o fluxo de dados HTTP para um par específico de origem/destino

Para analisar as tendências em seus dados, use o CloudWatch Logs Insights para isolar o tráfego bidirecional entre dois endereços IP. Na consulta a seguir, ["172.31.1.247", "172.31.11.212"] usa qualquer endereço IP como endereço IP de origem ou destino para retornar os logs de fluxo. O filtro faz a correspondência entre os eventos de log de fluxo da VPC com o protocolo TCP 6 e a porta 80 para isolar o tráfego HTTP. Para retornar um subconjunto de todos os campos disponíveis, use a palavra-chave display.

Consulta

Veja a consulta a seguir:

#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

Saída

interface_idsrcaddrsrcportdstaddrdstportprotocolobytesaçãolog_status
eni-0b74120275654905e172.31.11.21280172.31.1.2472937665160876ACCEPTOK
eni-0b74120275654905e172.31.1.24729376172.31.11.21280697380ACCEPTOK

Visualize os resultados como um gráfico de barras ou de setores

Você pode usar o CloudWatch Log Insights para visualizar os resultados como um gráfico de barras ou de setores. Se os resultados incluírem a função bin(), a saída da consulta retornará com um registro de data e hora. Em seguida, você pode visualizar a série temporal com um gráfico de linhas ou áreas empilhadas.

Para calcular os dados cumulativos que são transferidos em intervalos de 1 minuto, use stats sum(bytes) as Data_Trasferred by bin(1m). Para ver essa visualização, alterne entre as tabelas Logs e Visualização no console do CloudWatch Logs Insights.

Consulta

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)

Saída

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

Informações relacionadas

Supported logs and discovered fields

CloudWatch Logs Insights query syntax

AWS OFICIAL
AWS OFICIALAtualizada há 5 meses