AWS VPC Flow Logs는 VPC 내의 로그를 수집/저장하여 장애나 보안 문제 발생 시 원인 파악, 분석 등 다양한 용도로 활용할 수 있는 기능입니다.
아래에서는 VPC Flow Logs의 특징과 설정 방법을 안내합니다.
1. VPC Flow Logs 특징
VPC Flow Logs는 다음과 같은 특징을 가지고 있습니다.
특징
- 네트워크 연결 문제 해결 및 보안 문제, 네트워크상 접근 규칙이 정상 작동하는지 확인하기 위해 Flow log 수집, 저장 및 분석 가능
- EC2에 직접 에이전트를 설치하여 데이터 수집 시 해당 인스턴스에 부하를 줄 수 있음
- VPC Subnet과 ENI 의 네트워크 트래픽이 CloudWatch Logs를 통해 저장된 후 별도 응용 프로그램 등에서 분석 가능
- 특정 유형의 트래픽을 감지하여 알람을 만들거나 트래픽의 변화와 패턴을 파악하기 위한 통계를 만들 수도 있음
Log에 포함된 정보
- Security Group 및 NACL 규칙에 의해 허용 또는 차단 트래픽 정보
- 소스, 목적지IP 주소, 포트, 프로토콜 번호, 패킷 바이트, 모니터링 간격 시간, Action(ACCEPT or REJECT)
Log에 포함되지 않는 정보
- Amazon DNS 서버 트래픽(개인 호스트 영역 쿼리 포함)
- Amazon에서 제공하는 Windows 라이선스 활성화 트래픽
- 인스턴스 메타 데이터 요청(169.254.169.254)
- DHCP 요청과 응답
- ARP 및 NTP(169.254.169.123)
제한 사항
- 서비스 트래픽은 미러링 된 트래픽보다 우선 순위가 높음, 혼잡 발생시 미러링된 트래픽이 삭제될 수 있음
- 미러링 된 트래픽은 Security Group의 영향을 받지 않음
설정 위치에 따른 범위
- VPC : VPC 하위의 모든 ENI(EC2, ELB, RDS 등)
- Subnet : Subnet 하위의 모든 ENI(EC2, ELB, RDS 등)
- EC2 : ENI에 대한 개별 설정
2.VPC Flow Logs 설정
1)Flow Logs에 사용할 IAM Policy 생성 후, Role 생성
*Flow Logs를 Cloudwatch에 저장하려면 IAM Role 권한 필요
*아래 Policy 생성하여 Role 생성
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
2) VPC Flow Logs 생성
VPC -> Flow Logs를 설정할 VPC 선택
작업 -> 플로우 로그 생성
- 필터 : 모든 트래픽에 대하여 Log 적용, Allow(적용) or Deny(거부)로 설정 가능
- 대상 : 로그를 CloudWatch 또는 S3로 저장 가능
- 대상 로그 그룹 : 해당 설정 리전에 존재하는 로그 그룹으로 저장하거나 새로운 로그 그룹으로 저장 가능
- IAM Role : 미리 생성해 둔 Role 선택
3) Flow Logs 생성 완료
Flow Logs 생성 후 약 15분 뒤부터 CloudWatch에 Logs가 쌓이기 시작
4) CloudWatch Logs 확인
VPC Flow Logs 항목 설명
Column 명 | Contents |
---|---|
version | VPC Flow Log Version |
vpc-id | 소스 ENI를 포함하는 VPC의 ID |
subnet-id | 소스 ENI를 포함하는 Subnet의 ID |
instance-id | 소스 인터페이스와 연관된 인스턴스의 ID |
interface-id | 소스 ENI의 ID |
account-id | 소스 ENI를 포함하는 AWS 계정의 Account Number |
type | 트래픽 유형(IPv4, IPv6) |
srcaddr | 소스 IP |
dstaddr | 목적지 IP |
srcport | 소스 포트 |
dstport | 목적지 포트 |
pkt-srcaddr | 소스의 패킷 수준의 IP 주소, NAT 게이트웨이와 같이 트래픽이 통과하는 중간 레이어의 IP 주소를 구분 |
pkt-dstaddr | 패킷 수준의 IP 주소, pkt-srcaddr 필드와 유사하지만 대상 IP 주소에 대한 필드 |
protocol | 패킷에 대한 Protocol Number |
bytes | 캡처 기간 중 전송된 바이트 수 |
packets | 캡처 기간 중 전송된 패킷 수 |
start | 캡처 기간의 시작 시간 (단위 : Unix 초) |
end | 캡처 기간의 종료 시간 (단위 : Unix 초) |
action | ACCEPT : Security Group 또는 NACL에서 허용한 트래픽 REJECT : Security Group 또는 NACL에서 허용하지 않은 트래픽 |
tcp-flags | TCP Flag는 캡처 기간 동안 OR 처리됨SYN : 2 SYN-ACK : 18 FIN : 1 RST : 4 |
log-status | Flow Log의 로깅 상태 OK : 데이터가 선택된 대상에 정상적으로 로깅 NODATA : 캡처 기간 중 ENI에서 전송하거나 수신된 네트워크 트래픽이 없을 경우 SKIPDATA : 캡처 기간 중 일부 Flow Log 레코드를 건너뜀. 내부 용량 제한 또는 내부 오류 원인 가능 |
*참고
https://docs.aws.amazon.com/ko_kr/vpc/latest/mirroring/what-is-traffic-mirroring.html
https://aws.amazon.com/ko/blogs/korea/vpc-flow-logs-log-and-view-network-traffic-flows/
https://docs.aws.amazon.com/ko_kr/vpc/latest/mirroring/traffic-mirroring-considerations.html
https://aws.amazon.com/ko/blogs/korea/learn-from-your-vpc-flow-logs-with-additional-meta-data/
https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html