Amazon Athena를 활용하여 Amazon S3에 저장된 VPC Flow Logs를 출력해 봤습니다.

Amazon Athena를 활용하여 Amazon S3에 저장된 VPC Flow Logs를 출력해 봤습니다.

Amazon Athena를 활용하여 Amazon S3에 저장된 VPC Flow Logs를 출력해 봤습니다.
Clock Icon2025.02.17

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 Amazon Athena를 활용하여 Amazon S3에 저장된 VPC Flow Logs를 출력해 봤습니다.

하고 싶은 것

jw-athena-blg-1

이번 블로그에서 하고자 하는 것은 Amazon S3에 VPC Flow Logs의 로그를 저장한 다음, Athena를 이용하여 출력하는 것입니다.

VPC Flow Logs를 생성하는 방법에 대해서는 아래 블로그를 참고해 주세요.

https://dev.classmethod.jp/articles/jw-how-to-check-the-traffic-information-sent-and-received-by-a-vpc-with-vpc-flow-logs/

Amazon Athena 설정

VPC Flow Logs 설정이 끝났다면 Amazon Athena에서 쿼리를 실행할 준비를 합시다.

jw-athena-blg-2

먼저 쿼리를 실행하기에 앞서, 실행한 쿼리를 저장할 Amazon S3를 선택해야 합니다.

jw-athena-blg-3

[Location of query result] 항목에 쿼리 결과를 저장할 Amazon S3 경로를 설정합니다. 이번 블로그에서는 VPC Flow Logs와 같은 버킷 내에 Athenatest 라는 폴더를 만들어 저장하겠습니다.

jw-athena-blg-4

쿼리를 저장할 장소를 설정했다면, 이제 데이터베이스를 만듭니다.

CREATE DATABASE VPCFlowLogs;

[VPCFlowLogs]라는 이름의 데이터베이스를 만들고 왼쪽 [데이터베이스] 항목에서 생성한 데이터베이스를 선택할 수 있습니다.

테이블 생성 및 쿼리 실행

이제 사전 설정이 다 끝났다면, 데이터베이스에서 테이블을 생성합니다.

CREATE EXTERNAL TABLE IF NOT EXISTS `vpc_flow_logs_parquet` (
  version int,
  account_id string,
  interface_id string,
  srcaddr string,
  dstaddr string,
  srcport int,
  dstport int,
  protocol bigint,
  packets bigint,
  bytes bigint,
  start bigint,
  `end` bigint,
  action string,
  log_status string,
  vpc_id string,
  subnet_id string,
  instance_id string,
  tcp_flags int,
  type string,
  pkt_srcaddr string,
  pkt_dstaddr string,
  region string,
  az_id string,
  sublocation_type string,
  sublocation_id string,
  pkt_src_aws_service string,
  pkt_dst_aws_service string,
  flow_direction string,
  traffic_path int
)
PARTITIONED BY (`date` date)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://{S3 버킷 명}/AWSLogs/{AWS Account}/vpcflowlogs/{Region}/'
TBLPROPERTIES ("skip.header.line.count"="1");

VPC Flow Logs의 로그 항목들이 포함되어 있는 테이블입니다.

해당 테이블 생성문은 아래 AWS 공식 문서에서 확인할 수 있습니다.

https://docs.aws.amazon.com/ko_kr/athena/latest/ug/vpc-flow-logs-parquet.html

jw-athena-blg-5

테이블을 생성했다면, 왼쪽에 테이블이 추가된 것을 확인할 수 있습니다.

ALTER TABLE vpc_flow_logs_parquet
ADD PARTITION (`date`='{year}-{Month}-{Day}')
LOCATION 's3://{S3 버킷 명}/AWSLogs/{AWS Account}/vpcflowlogs/{Region}/Year/Month/Day';

{year}-{Month}-{Day}를 포함하여 VPC Flow Logs의 로그를 갱신할 날짜와 버킷 위치를 입력합니다.

SELECT * 
FROM vpc_flow_logs_parquet
WHERE date = DATE('{year}-{Month}-{Day}') 
LIMIT 100;

마지막으로 쿼리 결과를 출력해 봅시다.

jw-athena-blg-6

성공적으로 쿼리되는 것을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 [email protected]로 보내주시면 감사하겠습니다.

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.