CloudWatch Logs Insights를 사용하여 사용자 지정 VPC 흐름 로그를 분석하려면 어떻게 해야 합니까?
사용자 지정 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_id | instance_id | 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 |
소스/대상 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
결과
srcaddr | dstaddr | flow_direction | Data_Transferred |
---|---|---|---|
172.31.1.247 | 3.230.172.154 | egress | 346952038 |
172.31.0.46 | 3.230.172.154 | egress | 343799447 |
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_id | Data_Transferred |
---|---|
- | 1443477306 |
i-03205758c9203c979 | 517558754 |
i-0ae33894105aa500c | 324629414 |
i-01506ab9e9e90749d | 198063232 |
i-0724007fef3cb06f3 | 54847643 |
거부된 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
결과
srcaddr | SSH_Traffic_Volume |
---|---|
23.95.222.129 | 160 |
179.43.167.74 | 80 |
특정 소스/대상 쌍에 대한 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_id | srcaddr | srcport | dstaddr | destport | protocol | bytes | action | log_status |
---|---|---|---|---|---|---|---|---|
eni-0b74120275654905e | 172.31.11.212 | 80 | 172.31.1.247 | 29376 | 6 | 5160876 | 수락 | 확인 |
eni-0b74120275654905e | 172.31.1.247 | 29376 | 172.31.11.212 | 80 | 6 | 97380 | 수락 | 확인 |
특정 소스/대상 쌍에 대한 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.000 | 17225787 |
2022-04-01 15:21:00.000 | 17724499 |
2022-04-01 15:20:00.000 | 1125500 |
2022-04-01 15:19:00.000 | 101525 |
2022-04-01 15:18:00.000 | 81376 |
관련 정보
CloudWatch Logs Insights를 사용한 로그 데이터 분석

관련 콘텐츠
- 질문됨 2일 전lg...
- 질문됨 2달 전lg...
- 질문됨 6년 전lg...
- 질문됨 2달 전lg...
- 질문됨 한 달 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 9달 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 2년 전