본문 바로가기
AWS/CloudWatch

VPC Flow Logs 조회 방법(CloudWatch Logs Insights)

by study4me 2024. 10. 10.
반응형

CloudWatch Logs Insights를 사용하여 VPC Flow Logs 조회 방법에 대해 설명한다.
VPC Flow Log를 활성화한 후 CloudWatch Log Group에 저장은 했는데

어떻게 활용해야하는지 막막했다면

아래와 같이 필터를 사용해서 조회해보자.

 

1. VPC Flow Logs

보안 요건으로 VPC Flow Logs는 주로 활성화하는 편이고 CloudWatch Log Group에 저장하는 편이다.
S3가 아닌 CloudWatch Log Group에 저장하는 이유는 로그를 분석해야할 때 CloudWatch Logs Insights를 사용하여 쿼리로 조회하면 보다 간편하기 때문이다.

S3에 저장할 경우 Athena로 조회가 가능하지만 개인적으로 손이 더 많이 가는 느낌이었다.

클라우드 환경 구축 및 운영을 하다보면 트래픽 로그를 확인해야할 때가 있다.
주로 예상되는 트래픽이 방화벽에 의해서 Reject되었는지 확인하거나 Security Group 통제를 위해 아웃바운드 트래픽을 파악하기 위해서 사용한다.

2. CloudWatch Logs Insights를 사용한 VPC Flow Log 조회 방법

2.1 쿼리 작성하기 전 생각할 부분

아래 리스트 중 필요한 부분만 고려하면된다.

Network Interface ID 어떤 네트워크 인터페이스의 로그를 살펴볼 것인지
Action 트래픽이 Reject되었는지 Accept되었는지
IP Source IP, Destination IP로 필터링할 것인지
Port 아웃바운드 트래픽일 경우 Destination Port를, 인바운드 트래픽일 경우 Source Port를 사용하여 필터링할 것인지
count(*) 특정 필드의 결과 값에 대해서 발생 건수를 볼 것인지 상세를 볼 것인지
sort 특정 필드를 기준으로 정렬을 할 것인지 desc(내림차순), asc(오름차순)
Limit 출력 Limit 조건을 사용할 것인지


나는 주로 count(*) 을 사용하여 발생 건수로 출력하게끔 한다.

이렇게 하지 않으면 트래픽 하나하나가 출력되기 때문에 한눈에 보기 힘들다.

2.2 VPC Flow Log 조회 쿼리 작성

아래와 같이 작성하면되고, 필요한 필터만 남기고 불필요한 필터는 지우면된다.

filter @logStream = '네트워크 인터페이스 ID-all'
| filter action='REJECT 또는 ACCEPT'
| filter srcAddr = 'Source IP'
| filter scrPort = 'Source Port'
| filter dstAddr = 'Destination IP'
| filter dstPort = 'Destination Port'
| stats count(*) as num by srcAddr, srcPort, dstAddr, dstPort
| sort num desc 또는 asc
| limit 숫자

 

2.3 쿼리 예시

eni-0e7ae111222111000의 Private IP가 10.0.1.10이라고 가정.

# 예시1

filter @logStream = 'eni-0e7ae111222111000-all'
| filter action='REJECT'
| filter srcAddr = '10.0.1.10'
| filter dstAddr = '10.0.2.15'
| filter dstPort = '22'
| stats count(*) as num by srcAddr, dstAddr, dstPort

==> eni에서 나가는 아웃바운드 트래픽이 Reject가 났는지 확인할 때 위와 같이 사용한다.
(단 이 경우 결과에서 dstPort가 동적포트일 경우는 고려하지 않음.)
쿼리 조회 범위 : eni-0e7ae111222111000에서 발생
트래픽 Reject된 항목만
10.0.1.10에서 10.0.2.15의 22번 포트로 발생한 트래픽만 보고 싶어
결과는 num/srcAddr/dstAddr/dstPort로 출력할거야
num은 srcAddr/dstAddr/dstPort에 대해서 몇번 발생했는지 건수를 알려줘

 

 

# 예시2

filter @logStream = 'eni-0e7ae111222111000-all'
| filter action='ACCEPT'
| filter srcAddr = '10.0.1.10'
| stats count(*) as num by srcAddr, dstAddr, dstPort
| sort num desc

==> eni에서 나가는 아웃바운드 트래픽 중 Accept되는 트래픽을 파악할 때 위와 같이 사용한다.
(단 이 경우 결과에서 dstPort가 동적포트일 경우는 고려하지 않음.)
쿼리 조회 범위 : eni-0e7ae111222111000에서 발생
트래픽 Accept된 항목만
10.0.1.10에서 발생한 트래픽만 보고 싶어
결과는 num/srcAddr/dstAddr/dstPort로 출력할거야
num은 srcAddr/dstAddr/dstPort에 대해서 몇번 발생했는지 건수를 알려줘
발생 건수(num)을 기준으로 내림차순으로 정렬해줘

 

 

 

 

이번 포스팅에서는 CloudWatch Log에 저장된 VPC Flow Log를 Insights를 사용하여 조회하는 방법에 대해서 알아봤습니다.
예시는 아웃바운드 트래픽 파악에 대해서 들었는데 인바운드 트래픽도 필터링이 가능하니 실무에서 활용해보시길 바랍니다.

반응형