본문으로 바로가기

[AWS] VPC flow log란? (생성 방법)

category IT/AWS 2022. 4. 14. 01:23
반응형

VPC Flow log란?

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

ENI(Elastic Network Interface) 확인 하기

ENI는 EC2를 선택하고 왼쪽 카테고리 Netwrok Interfaces 에서 현재 생성되어있는 모든 ENI를 확인이 가능합니다. ENI는 사용자가 직접 생성하지 않아도 자동으로 생성되는 리소스들이 있기 때문에 사용자가 모르게 생성되어있는 것들이 있을 수 있습니다. (대표적인게 ELB, VPC Endpoint 같은 것들이 있죠)

VPC Flow Log를 통해 확인할 수 있는 29가지 정보

VPC Flow log를 통해 확인이 가능한 정보는 29가지가 있습니다. 각각의 파라미터에 대한 상세 설명은 AWS 문서에 아주 잘 설명이 되어있으므로 생략하겠습니다. (https://docs.aws.amazon.com/vpc/latest/userguide/flow-logs.html)

  • version
  • account-id
  • interface-id
  • srcaddr
  • dstaddr
  • srcport
  • dstport
  • protocol
  • packets
  • bytes
  • start
  • end
  • action
  • log-status
  • vpc-id
  • subnet-id
  • instance-id
  • tcp-flags
  • type
  • pkt-srcaddr
  • pkt-dstaddr
  • region
  • az-id
  • sublocation-type
  • sublocation-id
  • pkt-src-aws-service
  • pkt-dst-aws-service
  • flow-direction
  • traffic-path

그 중 가장 중요하다고 생각되는 한가지 파라미터인 tcp-flags를 언급하자면 TCP가 핸드쉐이킹 하는 단계를 확인할 수 있는데, 각 단계에 대한 flag 값을 다음과 같습니다.

SYN: 2
ACK 16
SYN-ACK: 18
FIN: 1
SYN-ACK + FIN : 19
RST: 4

VPC Flow 생성 방법

AWS관리 콘솔에서 VPC를 검색하면 왼쪽 카테고리에 “your VPCs” 가 있습니다.

생성하고자 하는 VPC를 선택하면 하단에 Flow logs 탭이 있고 Create flow log를 선택하여 생성할 수 있습니다.

하지만 역시 AWS가 호락호락 하지 않죠. AWS리소스를 생성할때 항상 막히는 부분이 IAM Role인데요. vpc flow log가 필요한 권한이 들어간 IAM Role을 생성해 주어야합니다. (예전에는 자동으로 만들어줬는데 바뀌었네요)

AWS관리 콘솔에서 IAM을 선택하여 Role을 적절한 이름으로 아래 권한을 추가하여 생성합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams"
            ],
            "Resource": "*"
        }
    ]
}

생성한 IAM Role로 VPC Flow log를 생성하면 됩니다만 여기서 선택해야할 것이 또 2가지가 있습니다.

첫째, VPC flow log를 저장하는 위치

VPC flow log는 S3 또는 Cloudwatch logs에 저장할 수 있습니다. 비용적인 측면으로 보면 s3가 더 저렴하지만 로그 파일 형태로 일일히 다운로드 받아야하며 원하는 데이터를 필터링하기가 어렵습니다.

Cloudwatch logs를 사용하게되면 AWS관리 콘솔에서 대시보드 형태로 제공이되며 필터를 걸어서 검색하기도 수월하고, 데이터 보관주기도 쉽게 설정할 수 있습니다.

둘째, VPC flow log 포맷

위에서 설명드린바와 같이 VPC flow log로 확인할 수 있는 정보는 총 29개 정보 입니다. 하지만 default 설정으로 아래와 같이 14가지가 설정이 되어있습니다.

default 포맷으로 위 14가지를 확인할 것인지, 필요한 것만 커스텀 할 것인지를 선택할 수 있습니다. AWS에서 제시해준 커스텀 포맷은 15가지 조합 이며 아래와 같습니다. (개인적으로 default 포맷에 ${flow-direction} 가 없는게 이상하네요)

${account-id} ${instance-id} ${interface-id} ${flow-direction} ${srcaddr} ${dstaddr} ${pkt-srcaddr} ${pkt-dstaddr} ${srcport} ${dstport} ${protocol} ${tcp-flags} ${packets} ${bytes} ${action}

커스텀 VPC Flow log 확인

만약 VPC Flow log를 s3에 저장하겠다고 선택하였으면, 설정한 s3위치에서 확인할 수 있으며 Cloudwatch logs 를 선택하였다면 아래와 같이 Cloudwatch log groups에서 확인이 가능합니다. 또한 저장 주기를 설정할 수 있는데요 default가 Never expire 이기 때문에 요금 폭탄을 맞을 수 있으므로 반드시 저장 주기를 설정하는 것을 권장드립니다.

위에서 AWS에서 제시해준 15가지 조합으로 로그를 받아보면 아래와 같습니다.

반응형