Amazon VPC 흐름 로그 쿼리 - Amazon Athena

Amazon VPC 흐름 로그 쿼리

Amazon Virtual Private Cloud 흐름 로그는 VPC의 네트워크 인터페이스에서 송수신되는 IP 트래픽에 대한 정보를 수집합니다. 로그를 사용하여 네트워크 트래픽 패턴을 조사하고 VPC 네트워크에서 위협 및 위험을 식별하십시오.

Athena에서 로그 쿼리를 시작하기 전에 VPC 흐름 로그를 활성화하고 Amazon S3 버킷에 저장하도록 구성합니다. 로그를 생성한 후 몇 분 동안 실행하여 일부 데이터를 수집합니다. 로그는 GZIP 압축 형식으로 생성되어 Athena을(를) 이용해 바로 쿼리할 수 있습니다.

VPC 흐름 로그를 생성할 때 기본 형식을 사용하거나 사용자 지정 형식을 지정할 수 있습니다. 사용자 지정 형식은 흐름 로그에서 반환할 필드와 해당 필드가 나타나는 순서를 지정하는 장소입니다. 자세한 내용은 Amazon VPC 사용 설명서흐름 로그 레코드를 참조하십시오.

VPC 흐름 로그의 테이블 생성

다음 절차에서는 기본 형식을 사용하는 VPC 흐름 로그에 대한 Amazon VPC 테이블을 생성합니다. 사용자 지정 형식을 사용하여 흐름 로그를 생성하는 경우 흐름 로그를 생성할 때 지정한 필드와 일치하는 필드가 해당 필드를 지정할 때와 동일한 순서로 포함되는 테이블을 생성해야 합니다.

Amazon VPC 테이블을 만들려면

  1. 다음 DDL 문을 복사하여 Athena 콘솔 쿼리 편집기에 붙여 넣습니다.

    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/{account_id}/vpcflowlogs/{region_code}/' TBLPROPERTIES ("skip.header.line.count"="1");

    다음 사항에 주의하십시오.

    • 이 쿼리는 ROW FORMAT DELIMITED를 지정하며 SerDe 지정은 생략합니다. 즉, 쿼리는 CSV, TSV, 사용자 지정 구분 기호로 구분된 파일에 대한 LazySimpleSerDe을 사용합니다. 이 쿼리에서 필드는 공백으로 끝납니다.

    • PARTITIONED BY 절은 date 유형을 사용합니다. 따라서 쿼리에서 수학 연산자를 사용하여 특정 날짜보다 오래되었거나 최신인 항목을 선택할 수 있습니다.

      참고

      date는 DDL 문에 예약된 키워드이므로 백틱 문자로 이스케이프됩니다. 자세한 내용은 예약어 단원을 참조하십시오.

    • 사용자 지정 형식을 사용하는 VPC 흐름 로그의 경우 흐름 로그를 생성할 때 지정한 필드와 일치하도록 필드를 수정합니다.

  2. 로그 데이터가 포함된 Amazon S3 버킷을 가리키도록 LOCATION 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/'을 수정합니다.

  3. Athena 콘솔에서 쿼리를 실행합니다. 쿼리가 완료된 후 Athena은(는) vpc_flow_logs 테이블을 등록하여 쿼리를 실행할 수 있도록 데이터를 준비합니다.

  4. 다음 샘플 쿼리와 같이 데이터를 읽을 수 있도록 파티션을 생성합니다. 이 쿼리는 지정한 날짜에 대한 단일 파티션을 생성합니다. 필요하다면 날짜와 위치의 자리 표시자를 교체하십시오.

    참고

    이 쿼리는 사용자가 지정한 날짜에 대한 단일 파티션만 생성합니다. 프로세스를 자동화하려면 이 쿼리를 실행하고 year/month/day에 대해 이 방법으로 파티션을 만드는 스크립트를 사용합니다.

    ALTER TABLE vpc_flow_logs ADD PARTITION (`date`='YYYY-MM-dd') location 's3://your_log_bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/{region_code}/YYYY/MM/dd';

Amazon VPC 흐름 로그에 대한 쿼리 예제

다음 예제 쿼리는 지정된 날짜에 대해 최대 100개의 흐름 로그를 나열합니다.

SELECT * FROM vpc_flow_logs WHERE date = DATE('2020-05-04') LIMIT 100;

다음 쿼리는 거절된 모든 TCP 연결을 나열하며 새로 생성한 날짜 파티션 열인 date를 이용해 이러한 이벤트가 발생한 요일을 추출합니다.

SELECT day_of_week(date) AS day, date, interfaceid, sourceaddress, action, protocol FROM vpc_flow_logs WHERE action = 'REJECT' AND protocol = 6 LIMIT 100;

어떤 서버가 가장 많은 수의 HTTPS 요청을 수신하는지 알아보려면 이 쿼리를 사용합니다. 이 쿼리는 지난 주부터 HTTPS 포트 443에서 수신한 패킷 수를 계산하고, 대상 IP 주소별로 그룹화한 다음, 상위 10개를 반환합니다.

SELECT SUM(numpackets) AS packetcount, destinationaddress FROM vpc_flow_logs WHERE destinationport = 443 AND date > current_date - interval '7' day GROUP BY destinationaddress ORDER BY packetcount DESC LIMIT 10;

자세한 내용은 AWS Big Data 블로그 게시물 Analyzing VPC Flow Logs with Amazon Kinesis Firehose, Athena, and Amazon QuickSight를 참조하십시오.