Amazon Athena를 사용해 VPC 흐름 로그를 분석하려면 어떻게 해야 하나요?
Amazon Athena를 사용해 Amazon Virtual Private Cloud(Amazon VPC) 흐름 로그를 분석하고 싶습니다.
간략한 설명
Amazon VPC 흐름 로그를 사용해 네트워크 트래픽 패턴을 분석하고 Amazon VPC 네트워크 전반의 위협과 위험을 파악할 수 있습니다.
해결 방법
Athena를 사용해 Amazon VPC 흐름 로그를 분석합니다.
Athena를 사용해 Amazon VPC 흐름 로그를 분석하려면 다음 단계를 따르세요.
-
Amazon Athena 콘솔 쿼리 편집기를 사용해 다음 명령을 실행하여 데이터베이스를 생성합니다. test_db_vpclogs를 데이터베이스 이름으로 바꾸세요.
CREATE DATABASE test_db_vpclogs;
**중요:**흐름 로그를 저장하는 Amazon Simple Storage Service(Amazon S3) 버킷과 동일한 AWS 리전에 데이터베이스를 생성하는 것이 좋습니다.
-
데이터베이스에서 다음 명령을 실행해 VPC 흐름 로그 테이블을 생성합니다. test_table_vpclogs를 내 테이블 이름으로 바꾸세요. 또 LOCATION 파라미터가 로그 데이터가 포함된 Amazon S3 버킷을 가리키도록 수정하세요.
CREATE EXTERNAL TABLE `test_table_vpclogs`( `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, `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 ( `region` string, `day` string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://awsexamplebucket/awsexampleprefix/awsexamplelogs/1111222233334444/vpcflowlogs/' TBLPROPERTIES ( 'projection.day.format'='yyyy/MM/dd', 'projection.day.range'='2021/01/01,NOW', 'projection.day.type'='date', 'projection.enabled'='true', 'projection.region.type'='enum', 'projection.region.values'='us-east-1,us-west-2,ap-south-1,eu-west-1', 'skip.header.line.count'='1', 'storage.location.template'='s3://awsexamplebucket/awsexampleprefix/awsexamplelogs/1111222233334444/vpcflowlogs/${region}/${day}' )
**참고:**위 명령은 파티션 프로젝션을 사용하여 테이블을 생성하고, 테이블을 파티셔닝하고, 파티션을 자동으로 채웁니다. Amazon S3에 프로젝션된 파티션이 없어도 Athena은 파티션 프로젝션을 진행합니다. 쿼리에서 분할된 속성을 사용하는 것이 좋습니다.
-
Amazon Athena 콘솔 쿼리 편집기를 사용해 테이블에서 SQL 문을 실행합니다. 쿼리를 저장하거나, 이전 쿼리를 보거나, 쿼리 결과를 CSV 파일 형식으로 다운로드할 수 있습니다.
예시 쿼리
참고:****test_table_vpclogs를 테이블 이름으로 바꾸세요. 쿼리에 맞게 열 값과 기타 변수를 수정합니다.
특정 기간의 첫 흐름 로그 100개 항목을 시간순으로 보려면 다음과 같은 쿼리를 실행하세요.
SELECT * FROM test_table_vpclogs WHERE day >= '2021/02/01' AND day < '2021/02/28' ORDER BY day ASC LIMIT 100;
특정 기간의 상위 10개 HTTP 패킷을 수신한 서버를 보려면 다음과 같은 쿼리를 실행하세요.
SELECT SUM(packets) AS packetcount, dstaddr FROM test_table_vpclogs WHERE dstport = 443 AND day >= '2021/03/01' AND day < '2021/03/31' GROUP BY dstaddr ORDER BY packetcount DESC LIMIT 10;
위 쿼리는 HTTPS 포트 443에서 수신한 패킷 수를 계산하고 대상 IP 주소별로 그룹화합니다. 그리고 이전 주 상위 10개 항목을 반환합니다.
특정 기간에 생성된 로그를 확인하려면 다음과 같은 쿼리를 실행하세요.
SELECT interface_id, srcaddr, action, protocol, to_iso8601(from_unixtime(start)) AS start_time, to_iso8601(from_unixtime("end")) AS end_time FROM test_table_vpclogs WHERE DAY >= '2021/04/01' AND DAY < '2021/04/30';
특정 기간에 지정한 소스 IP 주소의 흐름 로그를 보려면 다음과 같은 쿼리를 실행하세요.
SELECT * FROM test_table_vpclogs WHERE srcaddr = '10.117.1.22' AND day >= '2021/02/01' AND day < '2021/02/28';
특정 기간에 거부된 TCP 연결 목록을 보려면 다음과 같은 쿼리를 실행하세요.
SELECT day, interface_id, srcaddr, action, protocol FROM test_table_vpclogs WHERE action = 'REJECT' AND protocol = 6 AND day >= '2021/02/01' AND day < '2021/02/28' LIMIT 10;
'10.117'로 시작하는 IP 주소 범위의 흐름 로그를 보려면 다음과 같은 쿼리를 실행하세요.
SELECT * FROM test_table_vpclogs WHERE split_part(srcaddr,'.', 1)='10' AND split_part(srcaddr,'.', 2) ='117'
특정 기간에 지정한 대상 IP 주소의 흐름 로그를 보려면 다음과 같은 쿼리를 실행하세요.
SELECT * FROM test_table_vpclogs WHERE dstaddr = '10.0.1.14' AND day >= '2021/01/01' AND day < '2021/01/31'
관련 정보
관련 콘텐츠
- 질문됨 4달 전lg...
- 질문됨 10달 전lg...
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 2년 전