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의 통합을 간소화하고 자동화할 수 있습니다.

  • Athena를 사용하여 고유한 쿼리를 생성할 수 있습니다. 자세한 내용은 Amazon Athena 사용 설명서Amazon Athena를 사용하여 쿼리 실행을 참조하십시오.

요금

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

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

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

요구 사항
  • 선택한 리전은 AWS Lambda 및 Amazon Athena를 지원해야 합니다.

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

  • 흐름 로그의 로그 레코드 형식에는 실행하려는 미리 정의된 특정 쿼리에서 사용하는 필드가 포함되어야 합니다.

콘솔을 사용하여 템플릿을 생성하려면
  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) 섹션에 명시되어 있습니다. 마법사를 완료하여 템플릿에 지정된 리소스를 생성합니다.

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

콘솔을 사용하여 사전 정의된 쿼리를 실행하려면
  1. Athena 콘솔을 엽니다.

  2. 탐색 창에서 쿼리 편집기(Query editor)를 선택합니다. 작업 그룹(Workgroups)에서 CloudFormation 템플릿으로 생성한 작업 그룹을 선택합니다.

  3. 저장된 쿼리(Saved queries)를 선택하고 필요에 따라 파라미터를 수정한 후 쿼리를 실행합니다. 사용 가능한 사전 정의된 쿼리 목록은 사전 정의된 쿼리를 참조하세요.

  4. 쿼리 결과(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 주소에 대해 기록된 트래픽입니다.