블로그를 참고하여 아래와 같은 다이어그램을 구현해 보았다.
우선 사용자 지정 vpc를 생성해준다.
VPC Link!: https://console.aws.amazon.com/vpc
기본 VPC를 생성하고 기본 라우팅 테이블에 서브넷을 전부다 연결해준다.
이후 사진과 같이 보안그룹을 생성하고 t2.micro 인스턴스 하나를 생성한다.
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
cloudwatch에서 로그 스트림을 확인해본다.
CloudWatch Link!: https://console.aws.amazon.com/cloudwatch
CloudWatch > 로그 그룹 > VPC_Flow_Logs
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
이제 대상을 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에 들어가서 확인해본다.
이제 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