VPC Flow Logs

신동수·2024년 8월 13일
0

AWS

목록 보기
20/26

VPC Flow logs 

VPC Flow log는 VPC위에 생성된 네트워크 인터페이스에서 송수신되는 IP 트래픽 로그를 수집할 수 있는 기능이다.
AWS에서 네트워크 인터페이스를 ENI(Elastic Network Interface)라고 하는데, 대표적으로 EC2와 RDS, ELB에 ENI가 할당이되며 VPC endpoint, RDS, Elasticache 등에도 ENI가 할당이 된다.

VPC FlowLogs 저장 위치


VPC flow log는 S3Cloudwatch logs 에 저장할 수 있다. (kinesis Firehose는 따로 사용해보진 않음)
비용적인 측면으로 보면 s3가 더 저렴하지만 로그 파일 형태로 일일히 다운로드 받아야하며 원하는 데이터를 필터링하기가 어렵다.
S3 에서 네트워크 관련 로그를 확인 하기 위해서는 S3, Athena 를 사용한 쿼리 해당 링크를 참조하면 좋을거 같다. (기회가 된다면 포스팅하도록....!)

Cloudwatch logs를 사용하게되면 AWS관리 콘솔에서 대시보드 형태로 제공이되며 필터를 걸어서 검색하기도 수월하고, 데이터 보관주기도 쉽게 설정할 수 있다.
또한, Cloudwatch 에서도 로그 그룹에 저장된 로그를 쿼리할 수 있다. Cloudwatch Logs Insights 를 사용한 쿼리 해당 링크를 참고하면 좋을거 같다. (기회가 된다면 함께 포스팅)

VPC FlowLogs 형식

# Default Format
${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}

# Log 예시
2 123456789012 eni-xxxxxxxxxxxxxxxxx 10.x.x.x 192.x.x.x 80 54452 6 5 884 1690848063 1690848091 ACCEPT OK
2 123456789012 eni-xxxxxxxxxxxxxxxxx 192.x.x.x 10.x.x.x 54452 80 6 7 3145 1690848063 1690848091 ACCEPT OK

Default 포맷으로 위 14가지를 확인할 것인지, 필요한 것만 커스텀 할 것인지를 선택할 수 있다.

VPC FlowLogs 필드 설명

필드설명
versionVPC Flow Log Version
account-id트래픽이 기록되는 소스 네트워크 인터페이스 소유자의 AWS 계정 ID
interface-id트래픽이 기록되는 네트워크 인터페이스 ID
srcaddr들어오는 트래픽의 소스 주소 또는 네트워크 인터페이스의 나가는 트래픽의 네트워크 인터페이스의 IPv4 또는 IPv6 주소
dstaddr나가는 트래픽의 대상 주소 또는 네트워크 인터페이스의 들어오는 트래픽의 네트워크 인터페이스의 IPv4 또는 IPv6 주소.
srcport트래픽의 소스 포트
dstport트래픽의 대상 포트
protocol패킷에 대한 Protocol Number (6: TCP, 17: UDP, 1: ICMP)
packets로그 캡처 중 전송된 패킷 수
bytes로그 캡처 중 전송된 바이트 수
start로그 캡처 시작 시간 (단위 : Unix 초)
end로그 캡처 종료 시간 (단위 : Unix 초)
actionACCEPT : 보안 그룹 및 네트워크 ACL에서 허용한 기록된 트래픽 
REJECT : 보안 그룹 또는 네트워크 ACL에서 허용하지 않은 트래픽
log-statusFlow Log의 로깅 상태 
– OK: 데이터가 선택된 대상에 정상적으로 로깅 
– NODATA: 캡처 기간 중 ENI에서 전송하거나 수신된 네트워크 트래픽이 없을 경우 
– SKIPDATA: 캡처 기간 중 일부 Flow Log 레코드를 건너뜀. 내부용량 제한 또는 내부오류 원인 가능

AWS 공식 문서와 다르게 작성자 기준으로 읽기 쉽게 적어놓은 내용이라 자세한 내용은 아래 링크를 참고하면 좋을거 같다.
VPC FlowLogs

VPC FlowLogs 필드 설명 (확장)

필드설명
vpc-id트래픽이 기록되는 네트워크 인터페이스를 포함하는 VPC 의 ID
subnet-id트래픽이 기록되는 네트워크 인터페이스가 포함된 서브넷의 ID
instance-id인스턴스를 소유한 경우 트래픽이 기록되는 네트워크 인터페이스와 연결된 인스턴스의 ID
tcp-flags다음 TCP 플래그의 비트마스크 값 (FIN:1, SYN:2, RST:4, PSH:8, ACK:16, SYN-ACK:18, URG:32) TCP segment structure
type트래픽 유형(IPv4, IPv6)
pkt-srcaddr트래픽의 패킷레벨의 출발지 IP 주소 (NAT 를 통과하여도 원래의 IP를 알 수 있음)
pkt-dstaddr트래픽의 패킷레벨의 목적지 대상 IP 주소 (NAT 를 통과하여도 원래의 IP를 알 수 있음)
region리전 정보
az-id가용 영역의 ID
sublocation-typesublocation-type 필드에 반환되는 하위 위치 타입 (wavelength, outpost, localzone)
sublocation-id하위 위치의 ID
pkt-src-aws-servicepkt-srcaddr 필드에 대한 IP 주소 범위의 이름 (AMAZON, CLOUDFRONT, ...)
pkt-dst-aws-servicepkt-dstaddr 필드에 대한 IP 주소 범위의 이름 (AMAZON, CLOUDFRONT, ...)
flow-direction인터페이스에 대한 흐름 방향으로 ingress 또는 egress
traffic-path송신 트래픽이 대상으로 이동하는 경로

정리

인프라 운영을 하면서 네트워크 로그를 보는 경우가 종종 있으며, 폐쇄망에서 tcpdump 등 명령어를 설치하는 것은 어려운 상황이라면 VPC Flow Logs 를 활용하는 경우가 있었다. 또한 통신 여부를 확인하기 위해서 자주 사용하기에 활용하면 좋을 것 같다.
위에도 언급 했지만, Cloudwatch 로그 그룹에 로그를 쌓다보니 제법 많은 비용이 발생할 수 있기 때문에 보관 기간을 정하거나 특정 Subnet 만 하는 등 상황에 맞게 설정을 진행하면 된다.

profile
조금씩 성장하는 DevOps 엔지니어가 되겠습니다. 😄

0개의 댓글