Amazon Athena를 사용하여 흐름 로그 쿼리 - Amazon Virtual Private Cloud

Amazon Athena를 사용하여 흐름 로그 쿼리

Amazon Athena는 표준 SQL을 사용하여 흐름 로그와 같은 Amazon S3의 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. Athena를 VPC 흐름 로그와 함께 사용하여 VPC를 통해 흐르는 트래픽에 대해 유용한 인사이트를 빠르게 얻을 수 있습니다. 예를 들어 Virtual Private Cloud(VPC)의 어떤 리소스가 상위 대화자인지 식별하거나 TCP 연결이 가장 많이 거부된 IP 주소를 식별할 수 있습니다.

VPC를 통해 흐르는 트래픽에 대한 인사이트를 얻기 위해 실행할 수 있는 필수 AWS 리소스와 사전 정의된 쿼리를 생성하는 CloudFormation 템플릿을 생성하여 VPC 흐름 로그와 Athena의 통합을 간소화하고 자동화할 수 있습니다.

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 역할입니다.

Requirements

  • AWS Lambda 및 Amazon Athena를 지원하는 리전을 선택해야 합니다.

  • 선택한 리전에 Amazon S3 버킷이 있어야 합니다.

Pricing

쿼리 실행에 대해 표준 Amazon Athena 요금이 발생합니다 . 반복 일정에 따라 새 파티션을 로드하는 Lambda 함수에 대해 표준 AWS Lambda 요금이 발생합니다(파티션 로드 빈도를 지정하고 시작 날짜와 종료 날짜는 지정하지 않은 경우).

콘솔을 사용하여 CloudFormation 템플릿 생성

첫 번째 흐름 로그가 S3 버킷으로 전송된 후 CloudFormation 템플릿을 생성하고 해당 템플릿을 사용하여 스택을 생성함으로써 Athena와 통합할 수 있습니다.

콘솔을 사용하여 템플릿을 생성하려면

  1. 다음 중 하나를 수행하십시오.

    • Amazon VPC 콘솔을 엽니다. 탐색 창에서 [VPC(Your VPCs)]를 선택한 후 해당 VPC를 선택합니다.

    • Amazon VPC 콘솔을 엽니다. 탐색 창에서 [서브넷(Subnets)]을 선택한 후 해당 서브넷을 선택합니다.

    • Amazon EC2 콘솔을 엽니다. 탐색 창에서 [네트워크 인터페이스(Network Interfaces)]를 선택한 후 해당 네트워크 인터페이스를 선택합니다.

  2. [흐름 로그(Flow logs)] 탭에서 Amazon S3에 게시하는 흐름 로그를 선택한 후 [작업(Actions)], [Athena 통합 생성(Generate Athena integration)]을 차례로 선택합니다.

  3. 파티션 로드 빈도를 지정합니다. [없음(None)]을 선택하는 경우 과거 날짜를 사용하여 파티션 시작 및 종료 날짜를 지정해야 합니다. [매일(Daily)], [매주(Weekly)] 또는 [매월(Monthly)]을 선택하는 경우 파티션 시작 및 종료 날짜는 선택 사항입니다. 시작 날짜와 종료 날짜를 지정하지 않으면 CloudFormation 템플릿은 반복 일정에 따라 새 파티션을 로드하는 Lambda 함수를 생성합니다.

  4. 생성된 템플릿을 저장할 S3 버킷을 선택하고, 쿼리 결과를 저장할 S3 버킷을 선택하거나 생성합니다.

  5. [Athena 통합 생성(Generate Athena integration)]을 선택합니다.

  6. (선택 사항) 성공 메시지에서 링크를 선택하여 CloudFormation 템플릿용으로 지정한 버킷으로 이동하고, 템플릿을 사용자 지정합니다.

  7. 성공 메시지에서 [CloudFormation 스택 생성(Create CloudFormation stac)]을 선택하여 AWS CloudFormation 콘솔에서 [스택 생성(Create Stack)] 마법사를 엽니다. 생성된 CloudFormation 템플릿의 URL은 템플릿(Template) 섹션에 명시되어 있습니다. 마법사를 완료하여 템플릿에 지정된 리소스를 생성합니다.

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 네트워크의 트래픽에 대한 의미 있는 인사이트를 빠르게 얻기 위해 실행할 수 있는 사전 정의된 쿼리 세트를 제공합니다. 스택을 생성하고 모든 리소스가 올바르게 생성되었는지 확인한 후 사전 정의된 쿼리 중 하나를 실행할 수 있습니다.

콘솔을 사용하여 사전 정의된 쿼리를 실행하려면

  1. Athena 콘솔을 엽니다. [작업 그룹(Workgroups)] 패널에서 CloudFormation 템플릿으로 생성한 작업 그룹을 선택합니다.

  2. 사전 정의된 쿼리 중 하나를 선택하고 필요에 따라 파라미터를 수정한 후 쿼리를 실행합니다.

  3. Amazon S3 콘솔을 엽니다. 쿼리 결과를 저장하도록 지정한 버킷으로 이동하여 쿼리 결과를 봅니다.

사전 정의된 쿼리

생성된 CloudFormation 템플릿에서 제공하는 Athena 명명된 쿼리는 다음과 같습니다.

  • VpcFlowLogsAcceptedTraffic - 보안 그룹 및 네트워크 ACL에 따라 허용된 TCP 연결입니다.

  • VpcFlowLogsAdminPortTraffic - 관리 웹 앱 포트에 기록된 트래픽입니다.

  • VpcFlowLogsIPv4Traffic - 기록된 IPv4 트래픽의 총 바이트 수입니다.

  • VpcFlowLogsIPv6Traffic - 기록된 IPv6 트래픽의 총 바이트 수입니다.

  • VpcFlowLogsRejectedTCPTraffic - 보안 그룹 또는 네트워크 ACL에 따라 거부된 TCP 연결입니다.

  • VpcFlowLogsRejectedTraffic - 보안 그룹 또는 네트워크 ACL에 따라 거부된 트래픽입니다.

  • VpcFlowLogsSshRdpTraffic - SSH 및 RDP 트래픽입니다.

  • VpcFlowLogsTopTalkers - 기록된 트래픽이 가장 많은 IP 주소입니다.

  • VpcFlowLogsTopTalkersPacketLevel - 기록된 트래픽이 가장 많은 50개의 패킷 수준 IP 주소입니다.

  • VpcFlowLogsTopTalkingInstances - 기록된 트래픽이 가장 많은 50개 인스턴스의 ID입니다.

  • VpcFlowLogsTopTalkingSubnets - 기록된 트래픽이 가장 많은 50개 서브넷의 ID입니다.

  • VpcFlowLogsTopTCPTraffic - 특정 소스 IP 주소에 대해 기록된 모든 TCP 트래픽입니다.

  • VpcFlowLogsTopTCPTraffic - 기록된 바이트 수가 가장 많은 50쌍의 소스 및 대상 IP 주소입니다.

  • VpcFlowLogsTotalBytesTransferredPacketLevel - 기록된 바이트 수가 가장 많은 50쌍의 패킷 수준 소스 및 대상 IP 주소입니다.

  • VpcFlowLogsTrafficFrmSrcAddr - 특정 소스 IP 주소에 대해 기록된 트래픽입니다.

  • VpcFlowLogsTrafficToDstAddr - 특정 대상 IP 주소에 대해 기록된 트래픽입니다.