Skip to main content

VPC Flow Log

Flow Log (흐름 로그)

  • VPC의 네트워크 인터페이스에서 전송되고 수신되는 IP 트래픽에 대한 정보를 수집할 수 있는 기능
  • 데이터는 Amazon CloudWatch Logs 또는 Amazon S3에 저장 가능
  • VPC, Subnet, EC2 인스턴스 레벨에 Flow Log 활성화 가능
  • 트래픽을 실시간으로 캡처하지 않으며 기본 최대 집계간격이 10분 (1분으로 지정 가능)
  • Flow Log 레코드는 허용(Accept), 거부(Reject), 모든 트래픽(All Traffic)을 캡처
Flow Log에서 캡쳐 되지 않는 트래픽 유형
  • 인스턴스가 AWS DNS 서버에 연결할 때 생성한 트래픽
  • AWS Windows 라이선스 인증을 위해 Windows 인스턴스에서 생성한 트래픽
  • 인스턴스 메타데이터를 위해 169.254.169.254와 주고받는 트래픽
  • AWS Time Sync Service를 위해 169.254.169.123과 주고받는 트래픽
  • DHCP 트래픽
  • 기본(Default) VPC 라우터의 예약된 IP 주소로 보내는 트래픽
  • 엔드포인트 네트워크 인터페이스와 Network Load Balancer 네트워크 인터페이스 간의 트래픽

AWS Time Sync Service

2017년 12월 17일부터 시작된 각 리전에서 멀티 위성 연결 및 원자 시계 플릿을 사용하여 매우 정확한 기준 시계를 제공하고 NTP(Network Time Protocol)를 통해 제공되는 시간 동기화 서비스인 Amazon Time Sync Service를 시작합니다. 이 서비스는 추가 비용 없이 제공되며 모든 퍼블릭 AWS 리전에서 VPC에서 실행 중인 모든 인스턴스에 즉시 사용할 수 있습니다.

로컬 169.254.169.123 IP 주소 링크를 통해 서비스에 액세스할 수 있으며, 이것은 외부 인터넷 엑세스를 구성할 필요 없이 프라이빗 서브넷 내에서 서비스에 안전하게 액세스할 수 있습니다.

설정 방법

Chrony는 ntpd에서 사용되는 것과 다른 NTP 구현이며 ntpd보다 더 빠르고 정확하게 시스템 시계를 동기화할 수 있습니다. 따라서 ntpd를 사용해야 할 특별한 이유가 없다면 Chrony를 사용하는 것이 좋습니다.

Amazon Linux에서 Chrony를 설치 및 구성하는 방법은 아래와 같습니다.

sudo sudo yum erase ntp*
sudo yum -y install chrony
sudo service chronyd start

또는 다음 줄을 추가하여 기존 NTP config를 수정하면 됩니다.

server 169.254.169.123 prefer iburst.

net stop w32time
w32tm /config /syncfromflags:manual /manualpeerlist:"169.254.169.123"
w32tm /config /reliable:yess
net start w32time

윤초 설정

시간은 엄격하며 과학과 사회 분야에서 ICRF(International Celestial Reference Frame)를 기준으로 시간을 측정합니다. ICRF는 멀리 떨어져 있는 퀘이사의 장기선 간섭법, GPS 위성 퀘도, 달의 레이저 거리 측정법 등을 이용하여 계산됩니다. 지구의 회전 속도가 불규칙하여 UTC 시간이 ICRF와 차이 나게 됩니다. 이 시계 오차를 해결하기 위해 IERS(International Earth Rotation and Reference Systems)에서는 실제 시간의 0.9초 이내에서 유지되는 윤초를 UTC에 도입했습니다.

윤초로 인해 애플리케이션 오류가 발생하는 것으로 알려져 있으며, 대부분의 고지식한 개발자와 시스템 관리자에게 이는 문제가 될 수 있습니다. 이 169.254.169.123 시계에서 일정 시간 동안 윤초를 제거하려(일반적으로 윤초 스미어링(leap smearing)이라고 함) 애플리케이션에서 윤초를 쉽게 처리할 수 있도록 합니다.

이 시간 업데이트는 이전에 외부 시간 동기화 서비스에 의존했던 모든 사람에게 즉각적인 이점을 제공합니다.

번외로 시스템에 윤초를 적용하기 위해 매번 복잡한 과정을 거쳐야 했기에 오랫동안 IT 회사의 골칫거리였으며 윤초 설정으로 2012년 미국 온라인 커뮤니티 레딧은 홈페이지가 다운된 적이 있으며 2016년 클라우드플레어에서도 문제가 발생해 심각한 상황에 놓이기도 했습니다.

구글, 메타와 같은 큰 회사들은 윤초 실행으로 인한 시스템 교란이나 정전을 막기 위해 '스미어링'이라는 기술을 사용해왔으며 이 스미어링은 일부러 네트워크에 반영되는 시간을 늦추거나 빠르게 해 윤초로 인해 발생할 수 있는 네트워크 상의 오류를 방지하는 기술입니다.

하지만 이 윤쵸를 2035년까지 폐지됨에 따라 2035년 전후로 지구의 자전 주기를 정교하게 측정한 천문시(UT1)와 세슘 동위원소 진동수를 기준으로 한 '원자시'인 세계협정시(UTC)는 1초 이상 차이가 나게 됩니다.

Flow Log Record

AWS-ANS_vpcflowlog1

  • NACL과 SG 모두 허용했으며 인스턴스에 접속하도록 허용한 요청 ping에 대한 ACCEPT 레코드
Flow Log Example

AWS-ANS_vpcflowlog2

계정 12345678910에서 네트워크 인터페이스 eni에 대한 SSH 트래픽

2 123456789010 eni-1235b8ca123456789 203.0.113.12 172.31.16.139 0 0 1 4 336 1432917027 1432917142 ACCEPT OK

네트워크 ACL이 거부한 응답 ping에 대한 REJECT 레코드

2 123456789010 eni-1235b8ca123456789 172.31.16.139 203.0.113.12 0 0 1 4 336 1432917094 1432917142 REJECT OK

Flow Log Example

프로토콜 넘버

번호키워드프로토콜
1ICMPInternet Control Message
2IGMPInternet Group Management
4IPv4IPv4 encapsulation
6TCPTransmission Control
8EGPExterior Gateway Protocol
17UDPUser Datagram
41IPv6IPv6 encapsulation
143EthernetEthernet

인스턴스 레벨의 Flow Log 생성

  • EC2 인스턴스 - 네트워킹 - ENI - 플로우 로그 - 플로우 로그 생성

서브넷 레벨의 Flow Log 생성

  • VPC - 서브넷 - 플로우 로그 - 플로우 로그 생성
역할 구성하기
  • VPC - 플로우 로그 - 플로우 로그 생성
  • IAM 정책 생성 (CloudWatch Log)
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogGroups",
"logs:DescribeLogStreams"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
  • IAM 역할 생성 - 정책 연결
  • IAM 역할 신뢰 관계 / 신뢰할 수 있는 엔티티
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "vpc-flow-logs.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}

알람 구성

AWS CloudTrail + Lambda + SNS
  • CloudTrail: AWS 사용자 계정에서 이루어진 활동을 모니터링하고 기록
  • Lambda: 코드를 실행할 수 있는 서버리스 컴퓨팅 (이벤트를 트리거할 수 있음)
  • SNS(Simple Notification Service): 푸쉬 알림 서비스
  • 애플리케이션이 외부 시스템에 의해 포트가 검색되는 경우 보안팀에 자동으로 알리는 시스템 구성
Config + Lambda + SNS
  • Config: AWS 리소스 인벤토리, 구성 기록, 구성 변경 알림을 제공
  • AWS CloudFormation 외부에서 변경된 사하엥 대한 경고를 제공하는 시스템 구성
VPC Flow Log + CloudWatch Alarm + SNS
  • Amazon EC2 인스턴스 집합에서 특정 TCP 포트에 액세스하면 네트워크 엔지니어에게 자동으로 알리는 시스템 구성
  • 서버가 승인되지 않는 엔드포인트와의 연결을 열려고 시도할 때마다 알림을 수신하는 시스템 구성