AWS 클라우드 시스템을 운영하다 보면 여러 케이스에 다양한 이슈들을 맞이하게 되는데, 특히 간헐적으로 발생하는 네트워크 이슈가 발생 했을 때 로그에는 별 다른 내용이 없어 원인을 알 수 없는 경우가 종종 있습니다.
실시간으로 네트워크 이슈 발생 시 네트워크 트래픽을 수집하는 방법이 가장 좋은 방법이지만 tcpdump를 실행할 수 없는 리소스이거나 실시간으로 tcpdump를 수집하기에 현실적으로 쉽지 않습니다.
그런 경우 AWS에서 제공하는 VPC Flow Logs를 활용하여 네트워크 트래픽 흐름을 수집하고 분석하여 어느 구간이 문제인지 원인 분석에 활용 할 수 있습니다.
또한 네트워크 이슈 원인 분석 뿐 아니라 현 시스템에 큰 부하 없이 네트워크 트래픽 분석에 활용할 수도 있습니다.
VPC Flow Logs 란?
VPC Flow Logs는 VPC의 네트워크 인터페이스로 들어오고 나가는 IP 트래픽에 대한 정보를 캡처할 수 있는 기능입니다. Flow Logs 데이터는 Amazon CloudWatch Logs 또는 Amazon S3에 게시할 수 있습니다. VPC, 서브넷 또는 네트워크 인터페이스에 대한 Flow Logs를 생성할 수 있습니다.
VPC Flow Logs 특징
Flow Logs는 서브넷의 모든 트래픽을 캡처하고 수집 된 레코드를 Amazon CloudWatch Logs에 게시합니다. Flow Logs는 서브넷의 모든 네트워크 인터페이스에 대한 트래픽을 캡처합니다.
Flow Logs는 다음과 같은 여러 작업에 도움이 될 수 있습니다.
- 지나치게 제한적인 보안 그룹 규칙 진단
- 인스턴스에 도달하는 트래픽 모니터링
- 네트워크 인터페이스를 오가는 트래픽 방향 결정
Flow Logs 데이터는 네트워크 트래픽 경로 외부에서 수집 되므로 네트워크 처리량이나 지연 시간에 영향을 주지 않습니다. 네트워크 성능에 영향을 주지 않고 Flow Logs를 생성하거나 삭제할 수 있습니다.
Flow Logs는 패킷의 순서가 일치하지 않을 수 있습니다. 데이터가 초 단위로 밖에 볼 수 없다 보니 나열된 패킷 중 먼저 들어온 패킷이 나중에 보여질 수 있습니다. 이런 단점이 있기 때문에전체적인 Flow Logs 흐름을 보고 순서에 관계없이 트래픽을 분석 해야합니다.
VPC Flow Logs 수집 예외
Flow Logs는 모든 IP 트래픽을 캡처하지는 않습니다 다음 트래픽 유형은 기록되지 않습니다
- Amazon DNS 서버에 연결할 때 생성한 트래픽. 자체 DNS 서버를 사용할 경우 DNS 서버에 대한 모든 트래픽은 기록됩니다
- Amazon Windows 라이선스 인증을 위해 Windows 인스턴스에서 생성한 트래픽
- 인스턴스 메타데이터를 위해 169.254.169.254와 주고받는 트래픽
- Amazon Time Sync Service를 위해 169.254.169.123와 주고받는 트래픽
- DHCP 트래픽
- 미러링된 트래픽
- 기본 VPC 라우터의 예약된 IP 주소로 보내는 트래픽
- 엔드포인트 네트워크 인터페이스와 Network Load Balancer 네트워크 인터페이스 간의 트래픽
VPC Flow Logs 형식
VPC Flow Logs 생성 시 로깅 형식을 정할 수 있습니다. 수집하고자 하는 정보에 맞게 Field를 추가하여 원하는 정보를 수집할 수 있습니다.
1. 기본 로깅 형식 예
${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}
2. tcpdump와 유사하게 사용하기 위한 형식 예
${interface-id} ${pkt-srcaddr} ${srcaddr} ${srcport} ${pkt-dstaddr} ${dstaddr} ${dstport} ${tcp-flags} ${action}
3. 필드 설명
필드 | 설명 |
version | VPC Flow Log Version |
account-id | 트래픽이 기록되는 소스 네트워크 인터페이스 소유자의 AWS 계정 ID |
interface-id | 트래픽이 기록되는 네트워크 인터페이스 ID |
srcaddr | 들어오는 트래픽의 소스 주소 또는 네트워크 인터페이스의 나가는 트래픽의 네트워크 인터페이스의 IPv4 또는 IPv6 주소 |
dstaddr | 나가는 트래픽의 대상 주소 또는 네트워크 인터페이스의 들어오는 트래픽의 네트워크 인터페이스의 IPv4 또는 IPv6 주소. |
srcport | 트래픽의 소스 포트 |
dstport | 트래픽의 대상 포트 |
protocol | 패킷에 대한 Protocol Number |
packets | 캡처 중 전송된 패킷 수 |
bytes | 캡처 중 전송된 바이트 수 |
start | 캡처 시작 시간 (단위 : Unix 초) |
end | 캡처 종료 시간 (단위 : Unix 초) |
action | ACCEPT : 보안 그룹 및 네트워크 ACL에서 허용한 기록된 트래픽 REJECT : 보안 그룹 또는 네트워크 ACL에서 허용하지 않은 트래픽 |
log-status | Flow Log의 로깅 상태 – OK: 데이터가 선택된 대상에 정상적으로 로깅 – NODATA: 캡처 기간 중 ENI에서 전송하거나 수신된 네트워크 트래픽이 없을 경우 – SKIPDATA: 캡처 기간 중 일부 Flow Log 레코드를 건너뜀. 내부용량 제한 또는 내부오류 원인 가능 |
VPC Flow Logs를 이용한 네트워크 트래픽 분석하기
1. CloudWatch Logs에 Flow Logs를 게시하기 위한 IAM Role, Policy 생성
1) IAM Role에 연결된 Policy 생성 및 아래 Permission 추가
- VPC Flow Logs를 생성하기 전 수집할 수 있는 권한인 IAM Role이 필요합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams" ], "Resource": "*" } ] }
2. VPC Flow Logs 생성
VPC Flow Logs 생성 시 로그 기록 형식 및 게시 된 데이터 저장위치를 설정 할 수 있습니다.
1) VPC -> Create flow log 선택
2) Flow Log 만들기
- CloudWatch는 필터를 걸어 검색하기도 쉽고 AWS 콘솔에서 제공해주는 기능이 많습니다.
- S3는 저렴하긴 하지만 파일 형태로 일일이 확인해야 하기 때문에 원하는 데이터를 필터링하기 어렵습니다.
3) Flow Logs 생성 확인하기
3. VPC Flow Logs를 통한 네트워크 트래픽 분석
Flow Logs는 CloudWatch Logs 로그 그룹에 저장됩니다. Flow Logs를 작성한 후 약 15분 후에 새로운 로그 그룹이 생성됩니다. CloudWatch Logs의 대시 보드에서 접근 가능합니다
1) CloudWatch에서 Log groups 확인하기
- CloudWatch -> Logs -> Log groups -> 생성 된 VPC Flow Log group 확인
- CloudWatch Logs의 로그 그룹은 트래픽이 기록될 때만 생성됩니다.
2) CloudWatch에서 Log groups 확인하기
- VPC Flow Logs를 생성하여 일정기간 동안 패킷을 수집 한 뒤 이슈가 발생하면 수집 된 패킷을 통하여 네트워크 트래픽 분석이 가능합니다.
결론
AWS 클라우드 서비스 중 간헐적인 네트워크 이슈가 발생하여 트래픽 분석이 필요하지만 tcpdump를 사용하지 못하는 상황이라면 VPC Flow logs를 활용하는 방법도 좋은 방안입니다.
운영 중인 시스템에 부담을 주지 않으면서 패킷을 수집하여 분석까지 가능하도록 기능 제공 해주기 때문입니다.
물론 많은 비용이 발생할 수 있지만 목적에 맞게 설정하여 사용한다면 보다 수월하게 네트워크 트래픽 분석에 도움이 될 수 있다고 생각됩니다.
참고문서
- https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/flow-logs.html
- https://aws.amazon.com/ko/blogs/korea/vpc-flow-logs-log-and-view-network-traffic-flows/