본문 바로가기
카테고리 없음

[AWS] VPC flow log란?

by 알 수 없는 사용자 2022. 4. 17.

 

안녕하세요. DragonCastle입니다. 오늘은 VPC의 기능 중 하나인 VPC flow log에 대해서 포스팅하려고 합니다.

VPC flow log는 VPC의 네트워크 인터페이스에서 전송되고 수신되는 IP 트래픽에 대한 정보를 수집할 수 있는 기능으로 VPC 설정에서 생성할 수 있습니다. 생성되는 플로우 로그 데이터는 Amazon CloudWatch Logs 또는 Amazon S3에 저장할 수 있습니다. 플로우 로그를 생성한 다음 선택된 대상의 데이터를 가져와 확인할 수 있습니다.

VPC flow log는 다음과 같은 상황에서 쓰입니다.

  • 지나치게 제한적인 보안 그룹 규칙 진단
  • 인스턴스에 도달하는 트래픽 모니터링
  • 네트워크 인터페이스를 오가는 트래픽 방향 결정

VPC flow log 데이터는 네트워크 트래픽 경로 외부에서 수집되므로 네트워크 처리량이나 지연 시간에 영향을 주지 않습니다. 네트워크 성능에 영향을 주지 않고 흐름 로그를 생성하거나 삭제할 수 있습니다.

VPC flow log 기본 사항

VPC, 서브넷 또는 네트워크 인터페이스에 대한 VPC flow log를 생성할 수 있습니다. 서브넷이나 VPC에 대한 흐름 로그를 생성할 경우, VPC 또는 서브넷의 각 네트워크 인터페이스가 모니터링됩니다.

모니터링된 네트워크 인터페이스를 위한 VPC flow log는 트래픽 흐름을 설명하는 필드로 구성된 로그 이벤트인 VPC flow log 레코드로서 기록됩니다.

VPC flow log를 생성하려면 다음을 지정합니다.

  • 흐름 로그를 생성할 리소스
  • 캡처할 트래픽 유형(허용된 트래픽, 거부된 트래픽 또는 모든 트래픽)
  • 흐름 로그 데이터를 게시할 대상

다음 예에서는 인스턴스 A1의 네트워크 인터페이스에 대해 허용된 트래픽을 캡처하고 플로우 로그 레코드를 Amazon S3 버킷에 게시하는 플로우 로그(fl-aaa)를 생성합니다. 서브넷 B의 모든 트래픽을 캡처하고 플로우 로그 레코드를 Amazon CloudWatch Logs에 게시하는 두 번째 플로우 로그를 생성합니다. 흐름 로그(fl-bbb)는 서브넷 B의 모든 네트워크 인터페이스에 대한 트래픽을 캡처합니다. 인스턴스 A2의 네트워크 인터페이스에 대한 트래픽을 캡처하는 흐름 로그는 없습니다.

VPC flow log를 생성한 후에는, 데이터를 수집하여 선택된 대상에 게시하는 데 몇 분의 시간이 소요될 수 있습니다. VPC flow log는 네트워크 인터페이스에 대한 로그 스트림을 실시간으로 캡처하지 않습니다.

서브넷이나 VPC에 대한 플로우 로그를 생성한 후 서브넷에서 하나의 인스턴스를 시작할 경우, 해당 네트워크 인터페이스에 대한 네트워크 트래픽이 생기는 즉시 새로운 네트워크 인터페이스에 대한 (CloudWatch Logs용) 로그 스트림 또는 (Amazon S3용) 로그 파일 객체가 생성됩니다.

다음과 같은 다른 AWS 서비스에서 생성한 네트워크 인터페이스에 대한 흐름 로그를 생성할 수 있습니다.

  • Elastic Load Balancing
  • Amazon RDS
  • Amazon ElastiCache
  • Amazon Redshift
  • Amazon WorkSpaces
  • NAT 게이트웨이
  • 전송 게이트웨이

네트워크 인터페이스 유형에 관계없이 Amazon EC2 콘솔 또는 Amazon EC2 API를 사용하여 네트워크 인터페이스에 대한 VPC flow log를 작성해야 합니다.

VPC flow log에 태그를 적용할 수 있습니다. 각 태그는 사용자가 정의하는 키와 선택적 값으로 구성됩니다. 태그는 흐름 로그를 용도나 소유자별로 구성하는 데 도움이 될 수 있습니다.

VPC flow log 레코드

VPC flow log 레코드는 VPC에 네트워크 흐름을 나타냅니다. 기본적으로 각 레코드는 캡처 기간이라고도 하는 집계 간격 내에 발생하는 네트워크 인터넷 프로토콜(IP) 트래픽 흐름(네트워크 인터페이스별로 5튜플을 특징으로 함)을 캡처합니다.

각 레코드는 필드가 공백으로 구분되어 있는 문자열입니다. 레코드에는 소스, 대상, 프로토콜 등 IP 흐름의 다양한 구성 요소에 대한 값이 포함됩니다.

VPC flow log를 생성할 때 흐름 로그 레코드의 기본 형식을 사용하거나 사용자 지정 형식을 지정할 수 있습니다.

집계 간격

집계 간격은 특정 흐름이 캡처되어 흐름 로그 레코드로 집계되는 기간입니다. 기본적으로 최대 집계 간격은 10분입니다. 흐름 로그를 만들 때 선택적으로 최대 집계 간격을 1분으로 지정할 수 있습니다. 최대 집계 간격이 1분인 흐름 로그는 최대 집계 간격이 10분인 흐름 로그보다 더 많은 양의 흐름 로그 레코드를 생성합니다.

네트워크 인터페이스가 NITRO 기반 인스턴스에 연결된 경우 집계 간격은 지정된 최대 집계 간격에 관계없이 항상 1분 이하입니다.

집계 간격 내에서 데이터를 캡처한 후에는 데이터를 처리하고 CloudWatch Logs 또는 Amazon S3에 게시하느라 추가 시간이 걸립니다. 흐름 로그 서비스는 일반적으로 로그를 약 5분 만에 CloudWatch Logs로 전송하고 약 10분 만에 Amazon S3로 전송합니다. 그러나 로그 전달에 최선의 노력을 기울이고 로그가 일반적인 전달 시간을 초과하여 지연될 수 있습니다.

기본 형식

기본 형식의 흐름 로그 레코드에는 사용 가능한 필드 테이블에 표시되는 순서대로 버전 2 필드가 포함됩니다. 기본 형식을 사용자 정의하거나 변경할 수 없습니다. 추가 필드 또는 다른 필드 하위 세트를 캡처하려면 사용자 지정 형식을 지정합니다.

사용자 지정 형식

사용자 지정 형식을 사용하면 흐름 로그 레코드에 포함되는 필드와 그 순서를 지정할 수 있습니다. 이를 통해 요구 사항에 맞는 흐름 로그를 만들고 관련이 없는 필드를 생략할 수 있습니다. 사용자 지정 형식을 사용하면 게시된 흐름 로그에서 특정 정보를 추출하기 위해 별도의 프로세스가 필요하지 않습니다. 사용 가능한 흐름 로그 필드를 얼마든지 지정할 수 있지만 하나 이상을 지정해야 합니다.

사용 가능한 필드

다음 표는 흐름 로그 레코드에 사용 가능한 모든 필드를 설명합니다. 버전(Version) 열은 해당 필드를 도입한 VPC 흐름 로그의 버전을 나타냅니다. 기본 형식에는 모든 버전 2 필드가 테이블에 표시되는 순서와 동일하게 포함됩니다.

Amazon S3 흐름 로그 데이터를 게시할 때 필드의 데이터 유형은 흐름 로그 형식에 따라 다릅니다. 형식이 일반 텍스트인 경우 모든 필드는 STRING 유형입니다. 형식이 Parquet 인 경우 필드 데이터 유형에 대한 표를 참조하십시오.

필드를 적용할 수 없거나 특정 레코드에 대해 계산할 수 없는 경우 레코드는 해당 항목에 대해 '-' 기호를 표시합니다. 패킷 헤더에서 직접 제공되지 않는 메타데이터 필드는 최선의 작업 수준 근사값이며 해당 값이 누락되거나 정확하지 않을 수 있습니다.

필드설명버전
version VPC 흐름 로그 버전. 기본 형식을 사용하는 경우, 버전은 2입니다. 사용자 지정 형식을 사용하는 경우, 버전은 지정된 필드 중에서 가장 높은 버전입니다. 예를 들어 버전 2의 필드만 지정한다면 버전은 2가 됩니다. 버전 2, 3 및 4의 필드를 혼합하여 지정한다면 버전은 4가 됩니다.
Parquet 데이터 유형: INT_32
2
account-id 트래픽이 기록되는 소스 네트워크 인터페이스 소유자의 AWS 계정 ID입니다. 네트워크 인터페이스가 AWS 서비스에 의해 생성된 경우, 예를 들어 VPC 엔드포인트 또는 Network Load Balancer 생성 시 이 필드의 레코드에 unknown이 표시될 수도 있습니다.
Parquet 데이터 유형: 문자열
2
interface-id 트래픽이 기록되는 네트워크 인터페이스 ID.
Parquet 데이터 유형: 문자열
2
srcaddr 들어오는 트래픽의 소스 주소 또는 네트워크 인터페이스의 나가는 트래픽의 네트워크 인터페이스의 IPv4 또는 IPv6 주소. 네트워크 인터페이스의 IPv4 주소는 항상 해당 프라이빗 IPv4 주소입니다. 또한 pkt-srcaddr 단원도 참조하십시오.
Parquet 데이터 유형: 문자열
2
dstaddr 나가는 트래픽의 대상 주소 또는 네트워크 인터페이스의 들어오는 트래픽의 네트워크 인터페이스의 IPv4 또는 IPv6 주소. 네트워크 인터페이스의 IPv4 주소는 항상 해당 프라이빗 IPv4 주소입니다. 또한 pkt-dstaddr 단원도 참조하십시오.
Parquet 데이터 유형: 문자열
2
srcport 트래픽의 소스 포트
Parquet 데이터 유형: INT_32
2
dstport 트래픽의 대상 포트
Parquet 데이터 유형: INT_32
2
protocol 트래픽의 IANA 프로토콜 번호. 자세한 정보는 지정된 인터넷 프로토콜 번호 단원을 참조하십시오.
Parquet 데이터 유형: INT_32
2
packets 흐름 중 전송된 패킷 수.
Parquet 데이터 유형: INT_64
2
bytes 흐름 중 전송된 바이트 수.
Parquet 데이터 유형: INT_64
2
start 흐름의 첫 번째 패킷이 집계 간격 내에서 수신된 시간(단위: Unix 초)입니다. 이 시간은 패킷이 네트워크 인터페이스에서 전송되거나 수신된 후 최대 60초가 될 수 있습니다.
Parquet 데이터 유형: INT_64
2
end 집계 간격 내에서 흐름의 마지막 패킷을 수신한 시간(단위: Unix 초)입니다. 이 시간은 패킷이 네트워크 인터페이스에서 전송되거나 수신된 후 최대 60초가 될 수 있습니다.
Parquet 데이터 유형: INT_64
2
action 트래픽과 연결된 작업
  • ACCEPT — 보안 그룹 및 네트워크 ACL에서 허용한 기록된 트래픽입니다.
  • REJECT — 보안 그룹 또는 네트워크 ACL에서 허용하지 않은 트래픽입니다.
Parquet 데이터 유형: 문자열
2
log-status 흐름 로그의 로깅 상태:
  • OK — 선택된 대상에 정상적으로 로깅됩니다.
  • NODATA — 집계 간격 중 네트워크 인터페이스에서 전송하거나 수신된 네트워크 트래픽이 없었습니다.
  • SKIPDATA — 집계 간격 중 일부 흐름 로그 레코드를 건너뛰었습니다. 내부 용량 제한 또는 내부 오류가 원인일 수 있습니다.
Parquet 데이터 유형: 문자열
2
vpc-id 트래픽이 기록되는 네트워크 인터페이스를 포함하는 VPC의 ID.
Parquet 데이터 유형: 문자열
3
subnet-id 트래픽이 기록되는 네트워크 인터페이스를 포함하는 서브넷의 ID.
Parquet 데이터 유형: 문자열
3
instance-id 인스턴스를 소유한 경우 트래픽이 기록되는 네트워크 인터페이스와 연결된 인스턴스의 ID입니다. NAT 게이트웨이의 네트워크 인터페이스 같은 요청자 관리 네트워크 인터페이스에는 '-' 기호를 반환합니다.
Parquet 데이터 유형: 문자열
3
tcp-flags 다음 TCP 플래그의 비트 마스크 값:
  • SYN — 2
  • SYN-ACK — 18
  • FIN — 1
  • RST — 4
ACK는 SYN과 함께 제공될 때만 보고됩니다.
TCP 플래그는 집계 간격 동안 OR일 수 있습니다. 짧은 연결의 경우 SYN-ACK 및 FIN에 대해 19, SYN 및 FIN에 대해 3과 같이 흐름 로그 레코드의 동일한 행에 플래그가 설정될 수 있습니다. 문제 해결 예는 TCP 플래그 시퀀스을(를) 참조하십시오.
Parquet 데이터 유형: INT_32
3
type 트래픽 유형입니다. 가능한 값: IPv4 | IPv6 | EFA. 자세한 내용은 Elastic Fabric Adapter(EFA) 섹션을 참조하십시오.
Parquet 데이터 유형: 문자열
3
pkt-srcaddr 트래픽의 패킷 수준(원본) 소스 IP 주소입니다. 이 필드를 srcaddr 필드와 함께 사용하면 트래픽이 흐르는 중간 계층의 IP 주소와 트래픽의 원래 소스 IP 주소를 구별 할 수 있습니다. 대표적인 경우는 트래픽이 NAT 게이트웨이에 대한 네트워크 인터페이스를 통과하거나 Amazon EKS의 포드 IP 주소가 포드가 실행 중인(VPC 내 통신용) 인스턴스 노드의 네트워크 인터페이스 IP 주소와 다른 경우입니다.
Parquet 데이터 유형: 문자열
3
pkt-dstaddr 트래픽의 패킷 수준(원본) 대상 IP 주소입니다. 이 필드를 dstaddr 필드와 함께 사용하면 트래픽이 흐르는 중간 계층의 IP 주소와 트래픽의 최종 대상 IP 주소를 구별 할 수 있습니다. 대표적인 경우는 트래픽이 NAT 게이트웨이에 대한 네트워크 인터페이스를 통과하거나 Amazon EKS의 포드 IP 주소가 포드가 실행 중인(VPC 내 통신용) 인스턴스 노드의 네트워크 인터페이스 IP 주소와 다른 경우입니다.
Parquet 데이터 유형: 문자열
3
region 트래픽이 기록되는 네트워크 인터페이스가 포함된 리전입니다.
Parquet 데이터 유형: 문자열
4
az-id 트래픽이 기록되는 네트워크 인터페이스가 포함된 가용 영역의 ID입니다. 하위 위치에서 트래픽이 발생한 경우 레코드는 이 필드에 대해 '-' 기호를 표시합니다.
Parquet 데이터 유형: 문자열
4
sublocation-type sublocation-id 필드에 반환되는 하위 위치 유형입니다. 가능한 값: wavelength | outpost | localzone 트래픽이 하위 위치에서 발생하지 않는 경우 레코드는 이 필드에 대해 '-' 기호를 표시합니다.
Parquet 데이터 유형: 문자열
4
sublocation-id 트래픽이 기록되는 네트워크 인터페이스가 포함된 하위 위치의 ID입니다. 트래픽이 하위 위치에서 발생하지 않는 경우 레코드는 이 필드에 대해 '-' 기호를 표시합니다.
Parquet 데이터 유형: 문자열
4
pkt-src-aws-service 소스 IP 주소가 AWS 서비스용인 경우 pkt-srcaddr 필드에 대한 IP 주소 범위의 하위 집합 이름입니다. 가능한 값: AMAZON | AMAZON_APPFLOW | AMAZON_CONNECT | API_GATEWAY | CHIME_MEETINGS | CHIME_VOICECONNECTOR | CLOUD9 | CLOUDFRONT | CODEBUILD | DYNAMODB | EBS | EC2 | EC2_INSTANCE_CONNECT | GLOBALACCELERATOR | KINESIS_VIDEO_STREAMS | ROUTE53 | ROUTE53_HEALTHCHECKS | ROUTE53_HEALTHCHECKS_PUBLISHING | ROUTE53_RESOLVER | S3 | WORKSPACES_GATEWAYS.
Parquet 데이터 유형: 문자열
5
pkt-dst-aws-service 대상 IP 주소가 AWS 서비스용인 경우 pkt-dstaddr 필드에 대한 IP 주소 범위의 하위 집합 이름입니다. 가능한 값 목록은 pkt-src-aws-service 필드를 참조하십시오.
Parquet 데이터 유형: 문자열
5
flow-direction 트래픽이 캡처되는 인터페이스에 대한 흐름 방향입니다. 가능한 값: ingress | egress
Parquet 데이터 유형: 문자열
5
traffic-path 송신 트래픽이 대상으로 이동하는 경로입니다. 트래픽이 송신 트래픽인지 여부를 확인하려면 flow-direction 필드를 확인하십시오. 가능한 값은 다음과 같습니다. 적용되는 값이 없는 경우 필드는 -로 설정됩니다.
  • 1 — 동일한 VPC에 있는 다른 리소스를 통해
  • 2 — 인터넷 게이트웨이 또는 게이트웨이 VPC 엔드포인트를 통해
  • 3 — 가상 프라이빗 게이트웨이를 통해
  • 4 — 리전 내 VPC 피어링 연결을 통해
  • 5 — 리전 간 VPC 피어링 연결을 통해
  • 6 — 로컬 게이트웨이를 통해
  • 7 — 게이트웨이 VPC 엔드포인트를 통해(Nitro 기반 인스턴스에만 해당)
  • 8 — 인터넷 게이트웨이를 통해(Nitro 기반 인스턴스만 해당)
Parquet 데이터 유형: INT_32
5

댓글