내용으로 건너뛰기

Athena를 사용하여 Amazon VPC 플로우 로그를 어떻게 분석합니까?

4분 분량
0

Amazon Athena를 사용하여 Amazon Virtual Private Cloud(Amazon VPC) 플로우 로그를 분석하려고 합니다.

해결 방법

Athena 콘솔 쿼리 편집기를 사용하여 데이터베이스를 만들고, VPC 플로우 로그에 대한 테이블을 만들고, 예제 쿼리를 실행할 수 있습니다. 그런 다음 플로우 로그를 사용하여 네트워크 트래픽 패턴을 분석하고 Amazon VPC 네트워크 전반의 위협과 위험을 파악합니다.

Athena 콘솔 쿼리 편집기로 데이터베이스 만들기

Athena 콘솔 쿼리 편집기를 연 후 다음 명령을 실행합니다.

CREATE DATABASE test_db_vpclogs;

참고: test_db_vpclogs를 데이터베이스에 사용할 이름으로 바꾸십시오.

중요: 플로우 로그를 저장하는 Amazon Simple Storage Service(Amazon S3) 버킷과 동일한 AWS 리전에 데이터베이스를 만드는 것이 모범 사례입니다.

데이터베이스에 플로우 로그에 대한 테이블 만들기

Athena 콘솔을 엽니다. 그런 다음 탐색 창에서 Query editor(쿼리 편집기)를 선택합니다. Athena 콘솔 쿼리 편집기에서 다음 예와 비슷한 명령을 실행합니다.

CREATE EXTERNAL TABLE IF NOT EXISTS 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, date string, hour string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix/AWSLogs/{account_id}/vpcflowlogs/'
TBLPROPERTIES (
"EXTERNAL"="true",
"skip.header.line.count" = "1",
"projection.enabled" = "true",
"projection.region.type" = "enum",
"projection.region.values" = "us-east-1,us-west-2,ap-south-1,eu-west-1",
"projection.date.type" = "date",
"projection.date.range" = "2021/01/01,NOW",
"projection.date.format" = "yyyy/MM/dd",
"projection.hour.type" = "integer",
"projection.hour.range" = "00,23",
"projection.hour.digits" = "2",
"storage.location.template" = "s3://amzn-s3-demo-bucket/prefix/AWSLogs/${account_id}/vpcflowlogs/${region}/${date}/${hour}"
)

참고: test_table_vpclogs를 테이블에 사용할 이름으로 바꾸십시오.

로그 데이터가 포함된 Amazon S3 버킷을 가리키도록 LOCATION 파라미터를 수정해야 합니다. projection.region.values를 VPC 플로우 로그가 있는 AWS 리전으로 업데이트하십시오. projection.date.range 값을 데이터에서 사용 가능한 가장 빠른 로그로 설정합니다. 예를 들어 로그가 2021년 1월 1일에 시작되는 경우 projection.date.range를 **'2021/01/01,NOW'**로 설정하십시오. 정확한 데이터 예측을 위해 로그의 실제 시작 날짜에 따라 값을 수정하십시오. 위 명령은 파티션 예측을 사용하여 테이블을 만들고, 테이블을 파티셔닝하고, 파티션을 자동으로 채웁니다. Amazon S3에 예상 파티션이 없어도 Athena는 파티션을 예측합니다. 쿼리에서 파티셔닝된 속성을 사용하는 것이 좋습니다.

플로우 로그의 테이블에서 SQL 문 실행

Athena 콘솔을 엽니다. 그런 다음 탐색 창에서 Query editor(쿼리 편집기)를 선택합니다. 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;

지정된 기간 동안 가장 많은 HTTPS 패킷을 수신한 상위 10개의 대상 서버를 보려면 다음 쿼리를 실행합니다.

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;

지정된 시간 범위에 대해 생성된 로그를 확인하려면 다음 쿼리를 실행하십시오.

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'

관련 정보

플로우 로그를 사용하여 VPC의 트래픽을 어떻게 모니터링합니까?

Amazon Athena와 Amazon QuickSight를 사용한 VPC Flow Logs 분석

AWS 공식업데이트됨 7달 전