使用 Amazon Athena 查询流日志 - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 Amazon Athena 查询流日志

Amazon Athena 是一种交互式查询服务,让您能够使用标准 SQL 分析 Amazon S3 中的数据,例如流日志。您可以将 Athena 与 VPC 流日志结合使用,以快速获得有关流经 VPC 的流量的切实可行的见解。例如,您可以识别虚拟私有云 (VPC) 中的哪些资源是最大流量生成者,或识别拒绝的 TCP 连接最多的 IP 地址。

您可以通过生成 CloudFormation 模板来简化和自动完成 VPC 流日志与 Athena 的集成,该模板可创建所需的Amazon资源和预定义查询,您可以运行它们以获取有关流经 VPC 的流量的见解。

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

  • 您必须选择支持 Amazon Lambda 和 Amazon Athena 的区域。

  • Amazon S3 存储桶必须位于所选区域中。

Pricing

运行查询时,您需要承担标准 Amazon Athena 收费。对于按循环计划加载新分区(当您指定分区加载频率但未指定开始和结束日期时)的 Lambda 函数,您需要承担标准 Amazon Lambda 收费

使用控制台生成 CloudFormation 模板

在将第一个流日志传送到 S3 存储桶后,您可以通过生成 CloudFormation 模板并使用该模板创建堆栈,与 Athena 进行集成。

使用控制台生成模板

  1. 请执行下列操作之一:

    • 打开 Amazon VPC 控制台。在导航窗格中,选择 Your VPCs(您的 VPC),然后选择自己的 VPC。

    • 打开 Amazon VPC 控制台。在导航窗格中,选择 Subnets(子网),然后选择您的子网。

    • 打开 Amazon EC2 控制台。在导航窗格中,选择 Network Interfaces(网络接口),然后选择您的网络接口。

  2. Flow logs(流日志)选项卡上,选择发布到 Amazon S3 的流日志,然后依次选择 Actions(操作)、Generate Athena integration(生成 Athena 集成)。

  3. 指定分区加载频率。如果选择 None(无),则必须使用已过去的日期指定分区的开始日期和结束日期。如果选择Daily(每日)、Weekly(每周)或 Monthly(每月),则分区的开始日期和结束日期是可选设置。如果不指定开始日期和结束日期,CloudFormation 模板创建的 Lambda 函数可以按循环计划加载新分区。

  4. 为生成的模板选择或创建 S3 存储桶,为查询结果选择或创建 S3 存储桶。

  5. 选择 Generate Athena integration(生成 Athena 集成)。

  6. (可选)在成功消息中,选择链接以导航到您为 CloudFormation 模板指定的存储桶,然后自定义该模板。

  7. 在成功消息中,选择 Create CloudFormation stack (创建 CloudFormation 堆栈),以在 Amazon CloudFormation 控制台中打开 Create Stack (创建堆栈) 向导。生成的 CloudFormation 模板的 URL 在 Template(模板)部分中指定。完成向导以创建模板中指定的资源。

使用 Amazon 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 模板提供了一组预定义查询,您可以运行这些查询,以快速获取有关Amazon网络中的流量的有意义见解。创建堆栈并验证所有资源都创建正确后,您可以运行其中一个预定义查询。

使用控制台运行预定义查询

  1. 打开 Athena 控制台。在 Workgroups(工作组)面板中,选择由 CloudFormation 模板创建的工作组。

  2. 选择其中一个预定义查询,根据需要修改参数,然后运行查询。

  3. 打开 Amazon S3 控制台。导航到您为查询结果指定的存储桶,然后查看查询的结果。

预定义查询

下面是生成的 CloudFormation 模板提供的 Athena 命名查询:

  • VpcFlowLogsAcceptedTraffic — 根据您的安全组和网络 ACL 允许的 TCP 连接。

  • VpcFlowLogsAdminPortTraffic — 管理 Web 应用程序端口上记录的流量。

  • VpcFlowLogsIPv4Traffic — 记录的 IPv4 流量的总字节数。

  • VpcFlowLogsIPv6Traffic — 记录的 IPv6 流量的总字节数。

  • VpcFlowLogsRejectedTCPTraffic — 根据您的安全组或网络 ACL 拒绝的 TCP 连接。

  • VpcFlowLogsRejectedTraffic — 根据您的安全组或网络 ACL 拒绝的流量。

  • VpcFlowLogsSshRdpTraffic — SSH 和 RDP 流量。

  • VpcFlowLogsTopTalkers — 记录的流量最多的 50 个 IP 地址。

  • VpcFlowLogsTopTalkersPacketLevel — 记录的流量最多的 50 个数据包级别 IP 地址。

  • VpcFlowLogsTopTalkingInstances — 记录的流量最多的 50 个实例的 ID。

  • VpcFlowLogsTopTalkingSubnets — 记录的流量最多的 50 个子网的 ID。

  • VpcFlowLogsTopTCPTraffic — 为源 IP 地址记录的所有 TCP 流量。

  • VpcFlowLogsTotalBytesTransferred — 记录的字节数最多的 50 对源和目标 IP 地址。

  • VpcFlowLogsTotalBytesTransferredPacketLevel — 记录的字节数最多的 50 对数据包级别的源和目标 IP 地址。

  • VpcFlowLogsTrafficFrmSrcAddr — 针对特定源 IP 地址记录的流量。

  • VpcFlowLogsTrafficToDstAddr — 针对特定目标 IP 地址记录的流量。