본문 바로가기
IT/하려고 하는 클라우드

[AWSA] Athena를 이용한 VPC Flow Log 조회

by Work_Asalia 2021. 8. 21.

<Athena를 이용한 VPC Flow Log 조회>

AWS에서 VPC를 구성하고 EC2를 구성하면 인스턴스 또는 내·외부에서 발생된 트래픽에 대해서 확인해야 하는 경우가 다수 있습니다. 그럴 경우 AWS에서는 Flow Log를 통해서 확인을 할 수 있도록 제공하고 있지만, 단순 Flow Log 만으로는 한눈에 확인하기 어렵기 때문에 Athena를 구성하면 인/아웃에 대한 트래픽을 쉽게 확인할 수 있습니다.

전체적인 쿼리 조회를 위한 진행하는 단계는 다음과 같습니다.

  • VPC Flow Log 활성화
  • Athena 설정
  • 결과 조회

<VPC Flow Log 활성화>

우선 수집할 VPC 의 플로우 로그를 활성화시켜야 합니다.

VPC Flow Log
VPC Flow Log

플로우 로그를 활성화 할 VPC 선택

VPC Flow Log
VPC Flow Log

플로우 로그 탭 선택

VPC Flow Log
VPC Flow Log


플로우 로그를 생성할깨 생성되는 로그의 시간 및 대상을 로그가 저장될 대상을 전성할 수 있으며, 여기서는 Athena를 통해서 로그를 조회하는 방법을 설명할 예정이니 S3 버킷을 생성하여 지정합니다.
플로우 로그 생성을 완료하면 지정한 VPC의 하단에서 생성된 결과를 확인할 수 있습니다.

VPC Flow Log
VPC Flow Log

S3 버킷에 로그가 수집되면 다음은 Athena로 이동하여 수집하는 로그에 대해서 쿼리 할 수 있는 DB와 Table를 생성하여야 합니다.

Athena 서비스로 이동합니다.

VPC Flow Log
VPC Flow Log

처음에는 아무것도 설정되어 있지 않으므로 Workgroup과 DB, Table을 생성해 줘야 합니다.
Workgroup은 기본적으로 primary가 설정되어 있으며, 변경하지 않아도 무방하지만 여기서는 새로운 Workgroup을 생성하여 진행해 보겠습니다.

VPC Flow Log
VPC Flow Log

Workgroup을 생성하고 해당 영역에서 진행하는 쿼리에 대해서 저장할 S3 버킷을 지정하고 저장되는 데이터에 대해서 암호화할지의 여부 및 CloudWatch로 보여줄지 등을 지정할 수 있습니다.
Workgroup을 생성하여 해당 영역에서 쿼리를 진행하려면 생성한 Workgroup을 선택한 후 'Switch Workgorup'을 선택해야 합니다.

 



이제 Workgroup도 생성하였고 본격적으로 쿼리를 할 수 있는 DB 및 Table을 생성하겠습니다.
New query 에서 "Create database DB명"입력하면 별도의 DB가 생성되며 왼쪽 Database 메뉴에서 생성한 DB를 선택할 수 있습니다.

VPC Flow Log
VPC Flow Log


이제 DBe도 만들었으니 Table을 생성해 보겠습니다. 해당 내용에 대해서는 aws 설명서에 자세히 나와 있으며, 구글링으로도 쉽게 찾을 수 있습니다. (https://docs.aws.amazon.com/ko_kr/athena/latest/ug/vpc-flow-logs.html)

CREATE EXTERNAL TABLE IF NOT EXISTS vpclog( 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 (`yyyymmdd` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' LOCATION 's3://vpcflowlogcollector/AWSLogs/00000000/vpcflowlogs/ap-northeast-2' TBLPROPERTIES ("skip.header.line.count"="1"); 



여기서 AWS에서 안내해준 점과 다른 점은 위에서 파티셔닝을 하는 data 부분이 다르며, 저는 KST 기준으로 파티셔닝을 하고 쿼리 한 결과 값에 대해서 보기 편하기 위해서 변경해 주었습니다. 그리고 Location 부분을 위에서 지정한 S3 버킷으로 변경하여야 합니다.

VPC Flow Log
VPC Flow Log


Table을 생성하면 위 화면과 같이 Table이 생성이 되며, 한국 시간을 볼수 있도록 view table 생성 및 파티셔닝까지 진행만 하면 됩니다.
아래 쿼리는 AWS 기본 UTC 에서 KST로 변경하여 쿼리 할 수 있는 wiew table을 생성하는 쿼리입니다.

CREATE OR REPLACE VIEW vpclog_utc9 AS SELECT "version" , "account" , "interfaceid" , "sourceaddress" , "destinationaddress" , "sourceport" , "destinationport" , "protocol" , "numpackets" , "numbytes" , ("from_unixtime"("starttime") + INTERVAL '9' HOUR) "starttime" , ("from_unixtime"("endtime") + INTERVAL '9' HOUR) "endtime" , "action" , "logstatus" , "yyyymmdd" FROM vpcflowlog_db.vpclog 


여기서 변경해야 할 부분은 위해서 From 부분의 DB와 Table을 변경해 주어야 합니다.
이제 마지막 날짜에 대한 파티셔닝만 진행하면 됩니다.
다음과 같이 파티셔닝을 진행해야 vpc에서 생성한 log를 쿼리 형태로 변환하여 Athena에서 조회가 가능합니다.

ALTER TABLE vpclog ADD PARTITION (`yyyymmdd`='20200809') location 's3://vpcflowlogcollector/AWSLogs/00000000/vpcflowlogs/ap-northeast-2/2020/08/09'

위와 같이 진행하면 Success가 되면서 쿼리를 정상적으로 수행할 수 있고 테스트로 정상적으로 쿼리가 진행이 되는지 확인할 수 있습니다.

VPC Flow Log
VPC Flow Log

쿼리 결과를 위와 같이 확인 가능하며, view table의 점을 선택하여 Preview를 선택하면 테스트로 마지막으로 발생된 쿼리 10건에 대해서 조회가 가능합니다.

VPC Flow Log
VPC Flow Log

UTC9를 적용한 view를 생성하여 쿼리 하면 위와 같이 현재 시간을 기준으로 쿼리 하여 조회한 사용자가 좀 더 편하게 결과를 확인할 수 있으며 vpc flow log를 통하여 현재 내가 생성한 vpc 내에서 발생하는 log를 간단하게 조회할 수 있습니다.

다음은 AWS에서 제공하는 예제 쿼리 링크이며, https://docs.aws.amazon.com/ko_kr/athena/latest/ug/vpc-flow-logs.html#query-examples-vpc-logs해당 링크가 아니더라도 기본적인 sql 구문을 활용하려 쿼리 하여 결과를 확인할 수 있습니다.

AWS 상에서 서비스를 운영하면서 SG를 관리하고 필요한 서비스 이외에는 허용하지 않을 경우 어느 영역에서 차단이 되고 있으며, 차단되고 있는 영역이 AWS 인지 레거시 인지 등을 판단할 수 있는 근거로 활용 할 수 있습니다.

다른 사람들이 흥미롭게 읽은 포스팅

728x90

'IT > 하려고 하는 클라우드' 카테고리의 다른 글

Docker 기초 명령어  (0) 2021.08.21
[AWS] 자동 Partitioning 구성  (0) 2021.08.21
[AWS ] AWS Root 사용자  (0) 2021.08.21
[AWS ] AWS 보안_IAM 사용  (0) 2021.08.21
[AWS] AWS EC2 레파지토리 활성화  (0) 2021.08.21

댓글