VPC에서 아웃바운드로 향하는 모든포트를 확인해야하는 일이 생겼다.

그래서 이전 포스팅에서 먼저 과거의 방법을 이용해서 확인했고 이번에는 S3로 전송하여 보려한다.

아래는 이전의 방법으로 확인한 포스팅이다.

https://linuxer.name/2020/06/aws-vpc-flowlog-kinesis-athena/

현재에는 이런 방법을 사용하지 않는다.

위에 작성한 방법은 ETL 과정을 거치는건데 사실 이렇게 할필요가 전혀없다.

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

그냥 이거 따라하면 된다.

VPC-Flowlog 활성화 -S3 -athena

이렇게 간소화 되었다.

S3로 보내도록 로그를 생성한다.

S3 버킷 생성하는 부분은 생략한다.

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://your_log_bucket/prefix/AWSLogs/{subscribe_account_id}/vpcflowlogs/{region_code}/’ TBLPROPERTIES (“skip.header.line.count”=“1”);

명령어가 정상적으로 실행되면 위와같이 테이블을 확인할수있다

ALTER TABLE vpc_flow_logs ADD PARTITION (date=‘2020-06-04’) location ‘s3://linuxer-blog-log/AWSLogs/328345415633/vpcflowlogs/ap-northeast-2/’;

두줄을 적용하면 테이블이 등록된다. 유의할점이 지정한 날에 대한 단일 파티션만 생성된다.

이제 목적한 쿼리를 날려보자.

여기까지 테스트한이유는 아웃바운드의 모든 포트를 확인하기 위함이었다. 이제 쿼리를 해보자.

SELECT sourceport, count(*) cnt FROM vpc_flow_logs WHERE sourceaddress LIKE ‘10.0%’ GROUP BY sourceport ORDER BY cnt desc LIMIT 10;

이렇게 확인할수 있었다.

구 방법 부터 현재 권장하는 방법까지 테스트를 해보았고 같은결과를 확인하였다.

여기까지 읽어주셔서 감사하다!

-추가 쿼리

SELECT day_of_week(date) AS day, date, interfaceid, sourceaddress, action, protocol, destinationaddress, destinationport FROM vpc_flow_logs_proc_20200702 WHERE action = ‘REJECT’ AND sourceaddress = ‘10.0.1.150’ LIMIT 1000;