Amazon Athena를 사용하여 흐름 로그 쿼리
Amazon Athena는 표준 SQL을 사용하여 흐름 로그와 같은 Amazon S3의 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. Athena를 VPC 흐름 로그와 함께 사용하여 VPC를 통해 흐르는 트래픽에 대해 유용한 인사이트를 빠르게 얻을 수 있습니다. 예를 들어 Virtual Private Cloud(VPC)의 어떤 리소스가 상위 대화자인지 식별하거나 TCP 연결이 가장 많이 거부된 IP 주소를 식별할 수 있습니다.
옵션
-
VPC를 통해 흐르는 트래픽에 대한 인사이트를 얻기 위해 실행할 수 있는 필수 AWS 리소스와 사전 정의된 쿼리를 생성하는 CloudFormation 템플릿을 생성하여 VPC 흐름 로그와 Athena의 통합을 간소화하고 자동화할 수 있습니다.
-
Athena를 사용하여 고유한 쿼리를 생성할 수 있습니다. 자세한 내용은 Amazon Athena 사용 설명서의 Amazon Athena를 사용하여 쿼리 실행을 참조하십시오.
요금
쿼리 실행에 대해 표준 Amazon Athena 요금
콘솔을 사용하여 CloudFormation 템플릿 생성
첫 번째 흐름 로그가 S3 버킷으로 전송된 후 CloudFormation 템플릿을 생성하고 해당 템플릿을 사용하여 스택을 생성함으로써 Athena와 통합할 수 있습니다.
요구 사항
-
선택한 리전은 AWS Lambda 및 Amazon Athena를 지원해야 합니다.
-
선택한 리전에 Amazon S3 버킷이 있어야 합니다.
-
흐름 로그의 로그 레코드 형식에는 실행하려는 미리 정의된 특정 쿼리에서 사용하는 필드가 포함되어야 합니다.
콘솔을 사용하여 템플릿을 생성하려면
-
다음 중 하나를 수행하세요.
-
Amazon VPC 콘솔을 엽니다. 탐색 창에서 [VPC(Your VPCs)]를 선택한 후 해당 VPC를 선택합니다.
-
Amazon VPC 콘솔을 엽니다. 탐색 창에서 [서브넷(Subnets)]을 선택한 후 해당 서브넷을 선택합니다.
-
Amazon EC2 콘솔을 엽니다. 탐색 창에서 [네트워크 인터페이스(Network Interfaces)]를 선택한 후 해당 네트워크 인터페이스를 선택합니다.
-
-
[흐름 로그(Flow logs)] 탭에서 Amazon S3에 게시하는 흐름 로그를 선택한 후 [작업(Actions)], [Athena 통합 생성(Generate Athena integration)]을 차례로 선택합니다.
-
파티션 로드 빈도를 지정합니다. 없음(None)을 선택하는 경우 과거 날짜를 사용하여 파티션 시작 및 종료 날짜를 지정해야 합니다. [매일(Daily)], [매주(Weekly)] 또는 [매월(Monthly)]을 선택하는 경우 파티션 시작 및 종료 날짜는 선택 사항입니다. 시작 날짜와 종료 날짜를 지정하지 않으면 CloudFormation 템플릿은 반복 일정에 따라 새 파티션을 로드하는 Lambda 함수를 생성합니다.
-
생성된 템플릿을 저장할 S3 버킷을 선택하고, 쿼리 결과를 저장할 S3 버킷을 선택하거나 생성합니다.
-
[Athena 통합 생성(Generate Athena integration)]을 선택합니다.
-
(선택 사항) 성공 메시지에서 링크를 선택하여 CloudFormation 템플릿용으로 지정한 버킷으로 이동하고, 템플릿을 사용자 지정합니다.
-
성공 메시지에서 [CloudFormation 스택 생성(Create CloudFormation stac)]을 선택하여 AWS CloudFormation 콘솔에서 [스택 생성(Create Stack)] 마법사를 엽니다. 생성된 CloudFormation 템플릿의 URL은 템플릿(Template) 섹션에 명시되어 있습니다. 마법사를 완료하여 템플릿에 지정된 리소스를 생성합니다.
CloudFormation 템플릿으로 생성된 리소스
-
Athena 데이터베이스. 데이터베이스 이름은 vpcflowlogsathenadatabase<flow-logs-subscription-id>입니다.
-
Athena 작업 그룹. 작업 그룹 이름은 <flow-log-subscription-id><partition-load-frequency><start-date><end-date>workgroup입니다.
-
흐름 로그 레코드에 해당하는 분할된 Athena 테이블. 테이블 이름은 <flow-log-subscription-id><partition-load-frequency><start-date><end-date>입니다.
-
Athena 명명된 쿼리 세트. 자세한 내용은 사전 정의된 쿼리 단원을 참조하십시오.
-
지정된 일정(매일, 매주 또는 매월)에 따라 테이블에 새 파티션을 로드하는 Lambda 함수입니다.
-
Lambda 함수를 실행할 권한을 부여하는 IAM 역할입니다.
AWS CLI를 사용하여 CloudFormation 템플릿 생성
첫 번째 흐름 로그가 S3 버킷으로 전송된 후 CloudFormation 템플릿을 생성하고 해당 템플릿을 사용하여 Athena와 통합할 수 있습니다.
다음 get-flow-logs-integration-template 명령을 사용하여 CloudFormation 템플릿을 생성합니다.
aws ec2 get-flow-logs-integration-template --cli-input-json file://config.json
다음은 config.json
파일의 예입니다.
{ "FlowLogId": "fl-12345678901234567", "ConfigDeliveryS3DestinationArn": "arn:aws:s3:::my-flow-logs-athena-integration/templates/", "IntegrateServices": { "AthenaIntegrations": [ { "IntegrationResultS3DestinationArn": "arn:aws:s3:::my-flow-logs-analysis/athena-query-results/", "PartitionLoadFrequency": "monthly", "PartitionStartDate": "2021-01-01T00:00:00", "PartitionEndDate": "2021-12-31T00:00:00" } ] } }
다음 create-stack 명령을 사용하여 생성된 CloudFormation 템플릿으로 스택을 생성합니다.
aws cloudformation create-stack --stack-name my-vpc-flow-logs --template-body file://my-cloudformation-template.json
사전 정의된 쿼리 실행
생성된 CloudFormation 템플릿은 AWS 네트워크의 트래픽에 대한 의미 있는 인사이트를 빠르게 얻기 위해 실행할 수 있는 사전 정의된 쿼리 세트를 제공합니다. 스택을 생성하고 모든 리소스가 올바르게 생성되었는지 확인한 후 사전 정의된 쿼리 중 하나를 실행할 수 있습니다.
콘솔을 사용하여 사전 정의된 쿼리를 실행하려면
-
Athena 콘솔을 엽니다.
-
탐색 창에서 쿼리 편집기(Query editor)를 선택합니다. 작업 그룹(Workgroups)에서 CloudFormation 템플릿으로 생성한 작업 그룹을 선택합니다.
-
저장된 쿼리(Saved queries)를 선택하고 필요에 따라 파라미터를 수정한 후 쿼리를 실행합니다. 사용 가능한 사전 정의된 쿼리 목록은 사전 정의된 쿼리를 참조하세요.
-
쿼리 결과(Query results)에서 쿼리 결과를 확인합니다.
사전 정의된 쿼리
다음은 Athena 명명된 쿼리의 전체 목록입니다. 템플릿을 생성할 때 제공되는 미리 정의된 쿼리는 흐름 로그에 대한 로그 레코드 형식의 일부인 필드에 따라 달라집니다. 따라서 템플릿에 이러한 미리 정의된 쿼리가 모두 포함되어 있지 않을 수 있습니다.
VpcFlowLogsAcceptedTraffic - 보안 그룹 및 네트워크 ACL에 따라 허용된 TCP 연결입니다.
VpcFlowLogsAdminPortTraffic – 관리 포트에서 요청을 처리하는 애플리케이션에서 기록된 트래픽이 가장 많은 상위 10개의 IP 주소입니다.
VpcFlowLogsIPv4Traffic - 기록된 IPv4 트래픽의 총 바이트 수입니다.
VpcFlowLogsIPv6Traffic - 기록된 IPv6 트래픽의 총 바이트 수입니다.
VpcFlowLogsRejectedTCPTraffic - 보안 그룹 또는 네트워크 ACL에 따라 거부된 TCP 연결입니다.
VpcFlowLogsRejectedTraffic - 보안 그룹 또는 네트워크 ACL에 따라 거부된 트래픽입니다.
VpcFlowLogsSshRdpTraffic - SSH 및 RDP 트래픽입니다.
VpcFlowLogsTopTalkers - 기록된 트래픽이 많은 IP 주소 50개입니다.
VpcFlowLogsTopTalkersPacketLevel - 기록된 트래픽이 가장 많은 50개의 패킷 수준 IP 주소입니다.
VpcFlowLogsTopTalkingInstances - 기록된 트래픽이 가장 많은 50개 인스턴스의 ID입니다.
VpcFlowLogsTopTalkingSubnets - 기록된 트래픽이 가장 많은 50개 서브넷의 ID입니다.
VpcFlowLogsTopTCPTraffic - 특정 소스 IP 주소에 대해 기록된 모든 TCP 트래픽입니다.
VpcFlowLogsTopTCPTraffic - 기록된 바이트 수가 가장 많은 50쌍의 소스 및 대상 IP 주소입니다.
VpcFlowLogsTotalBytesTransferredPacketLevel - 기록된 바이트 수가 가장 많은 50쌍의 패킷 수준 소스 및 대상 IP 주소입니다.
VpcFlowLogsTrafficFrmSrcAddr - 특정 소스 IP 주소에 대해 기록된 트래픽입니다.
VpcFlowLogsTrafficToDstAddr - 특정 대상 IP 주소에 대해 기록된 트래픽입니다.