CloudWatch Logs Insights를 사용하여 사용자 지정 VPC 흐름 로그를 분석하려면 어떻게 해야 합니까?

7분 분량
0

사용자 지정 VPC 흐름 로그를 구성했습니다. Amazon CloudWatch Logs Insights로 패턴과 트렌드를 찾으려면 어떻게 해야 합니까?

간략한 설명

CloudWatch Logs Insights를 사용하여 VPC 흐름 로그를 분석할 수 있습니다. CloudWatch Log Insights는 JSON 형식의 로그 이벤트뿐만 아니라 Amazon에서 제공하는 여러 로그의 필드를 자동으로 검색하므로 쉽게 쿼리를 구성하고 로그를 탐색할 수 있습니다. 기본 형식의 VPC 흐름 로그는 CloudWatch Logs Insights에 의해 자동으로 검색됩니다.

하지만 VPC 흐름 로그는 사용자 지정 형식으로 배포됩니다. 이에 따라, 자동으로 검색되지 않으므로 쿼리를 수정해야 합니다. 이 문서에서는 사용 사례에 맞게 사용자 지정하고 확장할 수 있는 쿼리의 몇 가지 예를 제공합니다.

다음 사용자 지정 VPC 흐름 로그 형식이 사용됩니다.

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

해결 방법

최신 VPC 흐름 로그 검색

로그 필드는 CloudWatch Logs Insights에서 자동으로 검색되지 않으므로 parse 키워드를 사용하여 원하는 필드를 격리해야 합니다. 이 쿼리에서 결과는 흐름 로그 이벤트 시작 시간을 기준으로 정렬되며 가장 최근의 두 로그 항목으로 제한됩니다.

쿼리

#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

결과

account_id vpc_id  subnet_id interface_idinstance_idsrcaddrsrcport
123456789012 vpc-0b69ce8d04278ddd subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e172.31.0.10455125
123456789012 vpc-0b69ce8d04278ddd1 subnet-002bdfe1767d0ddb0eni-0435cbb62960f230e91.240.118.8149422

소스/대상 IP 주소 쌍에 따라 데이터 전송 요약

다음으로, 소스/대상 IP 주소 쌍에 따라 네트워크 트래픽을 요약합니다. 이 예에서 sum 통계는 바이트 필드에 대한 집계를 수행하는 데 사용됩니다. 그러면 호스트 간에 전송된 데이터의 누적 합계가 계산됩니다. 더 많은 컨텍스트를 위해 flow_direction이 포함되어 있습니다. 그런 다음 이 집계의 결과가 일시적으로 Data_Transferred 필드에 할당됩니다. 그런 다음 Data_Tannered를 기준으로 결과가 내림차순으로 정렬되며 가장 큰 두 쌍이 반환됩니다.

쿼리

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

결과

srcaddrdstaddrflow_directionData_Transferred
172.31.1.2473.230.172.154egress346952038
172.31.0.463.230.172.154egress343799447

EC2 인스턴스 ID에 따라 데이터 전송 분석

사용자 지정 VPC 흐름 로그를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스 ID를 직접 분석할 수 있습니다. 이전 쿼리를 통해 이제 instance_id 필드를 사용하여 가장 활성화된 EC2 인스턴스를 확인할 수 있습니다.

쿼리

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

결과

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

거부된 SSH 트래픽 필터링

보안 그룹 및 네트워크 액세스 제어 목록(ACL)에서 거부된 트래픽을 더 잘 이해하려면 reject VPC 흐름 로그에서 필터링합니다. 프로토콜 및 대상 포트를 포함하도록 이 필터의 범위를 더 좁힐 수 있습니다. SSH 트래픽에서 거부되는 호스트를 식별하려면 TCP 프로토콜(예: 프로토콜 6)과 대상 포트가 22인 트래픽을 포함하도록 필터를 확장합니다.

쿼리

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

결과

srcaddrSSH_Traffic_Volume
23.95.222.129160
179.43.167.7480

특정 소스/대상 쌍에 대한 HTTP 데이터 스트림 격리

CloudWatch Logs Insights를 사용하여 데이터의 추세를 자세히 조사하려면 두 IP 주소 간의 양방향 트래픽을 격리합니다. 이 쿼리에서 **["172.31.1.247","172.31.11.212"]**는 IP 주소를 소스 또는 대상 IP 주소로 사용하여 흐름 로그를 반환합니다. HTTP 트래픽을 격리하기 위해 filter 문은 VPC 흐름 로그 이벤트를 프로토콜 6(TCP) 및 포트 80과 일치시킵니다. display 키워드를 사용하여 사용 가능한 모든 필드의 하위 집합을 반환합니다.

쿼리

#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

결과

interface_idsrcaddrsrcportdstaddrdestportprotocolbytesactionlog_status
eni-0b74120275654905e172.31.11.21280172.31.1.2472937665160876수락확인
eni-0b74120275654905e172.31.1.24729376172.31.11.21280697380수락확인

특정 소스/대상 쌍에 대한 HTTP 데이터 스트림 격리

CloudWatch Logs Insights를 사용하여 결과를 막대형 또는 원형 차트로 시각화할 수 있습니다. 결과에 bin () 함수가 포함된 경우 쿼리 결과가 타임스탬프와 함께 반환됩니다. 그런 다음 시계열(timeseries)을 선 또는 누적 영역 그래프로 시각화할 수 있습니다.

이전 쿼리를 기반으로 stats sum(bytes) as Data_Trasferred by bin(1m)를 사용하여 1분 간격으로 전송된 누적 데이터를 계산할 수 있습니다. 이 시각화를 보려면 CloudWatch Logs Insights 콘솔에서 로그(Logs)시각화(Visualization) 테이블 간을 전환하세요.

쿼리

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)

결과

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

관련 정보

지원되는 로그 및 검색된 필드

CloudWatch Logs Insights를 사용한 로그 데이터 분석

CloudWatch Logs Insights 쿼리 명령

자습서: 시계열 시각화를 생성하는 쿼리 실행

AWS 공식
AWS 공식업데이트됨 2년 전