CloudWatch Logs Insight 및 Athena를 통해 AWS VPC Flow Logs 분석

영진·2023년 1월 9일
0

AWS

목록 보기
5/17

블로그를 참고하여 아래와 같은 다이어그램을 구현해 보았다.


AWS VPC Flow Logs

AWS VPC flow log는 VPC 트래픽과 관련된 정보를 추적할 수 있다.

1. 소스/목적지 IP address

2. 소스/목적지 Port

3. 프로토콜

4. Bytes

5. Allow/Reject status


출력 대상

AWS VPC flow log는 출력대상이 총 2가지 밖에 없다.( S3, CloudWatch )

S3와 CloudWatch를 활용하여 구현해 볼 것이다.


Steps

  • Step 01. Create a Custom VPC
  • Step 02: Create a VPC Flow Log (Destination = CloudWatch Logs)
  • Step 03: Analyze CloudWatch Logs
  • Step 04: Query CloudWatch Logs via CloudWatch Insights
  • Step 05: Create a VPC Flow Log (Destination = S3 Bucket)
  • Step 06: Run Query via Athena

Step 01: Create a Custom VPC

우선 사용자 지정 vpc를 생성해준다.
VPC Link!: https://console.aws.amazon.com/vpc
기본 VPC를 생성하고 기본 라우팅 테이블에 서브넷을 전부다 연결해준다.

이후 사진과 같이 보안그룹을 생성하고 t2.micro 인스턴스 하나를 생성한다.


Step 02: Create a VPC Flow Log (Destination = CloudWatch Logs)

vpc Flow Log를 생성하는 작업을 진행해준다. 우선 먼저 cloudwatch에 들어가서 로그그룹을 생성해주도록 한다.
CloudWatch Link!: https://console.aws.amazon.com/cloudwatch

로그 그룹 > 로그 그룹생성을 통해 로그그룹을 생성하도록 한다.

vpc console 창에서 flow log를 생성하도록 한다.
IAM 역할
VPC Link!: https://console.aws.amazon.com/vpc


Step 03: Analyze CloudWatch Logs

cloudwatch에서 로그 스트림을 확인해본다.
CloudWatch Link!: https://console.aws.amazon.com/cloudwatch
CloudWatch > 로그 그룹 > VPC_Flow_Logs


Step 04: Query CloudWatch Logs via CloudWatch Insights

cloudwatch에서 쿼리 결과를 확인해 본다.
CloudWatch Link!: https://console.aws.amazon.com/cloudwatch
CloudWatch > Logs Insights

코드는 다음과 같다.

fields @timestamp, interfaceId, srcAddr, dstAddr
| filter interfaceId = 'your-instance-eni'
| sort @timestamp desc
| limit 20

Step 05: Create a VPC Flow Log (Destination = S3 Bucket)

이제 대상을 S3 버킷으로 지정할 것이다. 대상이 S3이니 S3 버킷을 하나 생성한다.
aws S3 console Link!: https://console.aws.amazon.com/s3
Amazon S3 > 버킷 > 버킷 만들기를 통해 버킷을 생성한다.

ARN을 복사하고 https://console.aws.amazon.com/vpc 로 이동해준다.
VPC > VPC > 플로우 로그 생성에 들어가서 flow log를 생성해준다.

S3에 들어가서 확인해본다.


Step 06: Run Query via Athena

이제 athena를 통해 쿼리를 한 번 진행해보도록 할 것이다.
AWSA athena Link!: https://console.aws.amazon.com/athena
다음 명령어를 실행하여 table을 하나 생성해주도록 한다.

CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs (
    version int,
    account string,
    interfaceid string,
    sourceaddress string,
    destinationaddress string,
    sourceport int,
    destinationport int,
    protocol int,
    numpackets int,
    numbytes bigint,
    starttime int,
    endtime int,
    action string,
    logstatus string
    ) PARTITIONED BY (`date` date)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION 's3://1-2-1-2/AWSLogs/AccountID/vpcflowlogs/ap-northeast-2/' TBLPROPERTIES ("skip.header.line.count"="1");

데이터를 읽을 파티션을 하나 생성해준다.
date는 데이터를 생성한 날짜를 기입한다.

ALTER TABLE vpc_flow_logs
ADD PARTITION (`date`='2023-01-09')
location 's3://1-2-1-2/AWSLogs/Your Account ID/vpcflowlogs/ap-northeast-2/2023/01/09/';

다음 쿼리문으로 정상적으로 동작하는 지 확인한다.

select * from vpc_flow_logs


profile
I'm good at cloud computing.

0개의 댓글