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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Amazon Athena 查询流日志

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

Options
  • 您可以通过生成模板来创建 Amazon 所需资源和预定义查询,从而简化并自动将 VPC 流日志与 Athen CloudFormation a 集成。您可以运行这些模板来深入了解流经您的 VPC 的流量。

  • 您可以使用 Athena 创建自己的查询。有关更多信息,请参阅 Amazon Athena 用户指南中的使用 Amazon Athena 查询流日志

定价

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

使用控制台生成 CloudFormation 模板

将第一批流日志传送到您的 S3 存储桶后,您可以通过生成模板并使用该模板创建堆栈来与 Athen CloudFormation a 集成。

要求
  • 所选地区必须支持 Amazon Lambda 和亚马逊 Athena。

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

  • 流日志的日志记录格式必须包含您要运行的特定预定义查询所使用的字段。

使用控制台生成模板
  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. 在成功消息中,选择创建 CloudFormation堆栈以在 Amazon CloudFormation 控制台中打开创建堆栈向导。生成的 CloudFormation 模板的 URL 在 “模板” 部分中指定。完成向导以创建模板中指定的资源。

由 CloudFormation 模板创建的资源
  • Athena 数据库。数据库名称是 vpcflowl flow-logs-subscription-idogsathenadatabase< >。

  • Athena 工作组。工作组名称为 < flow-log-subscription-id>< >< 开始日期 >< 结束partition-load-frequency日期 >工作组

  • 与您的流日志记录对应的已分区 Athena 表。表名为 < flow-log-subscription-id>< >< 开始日期 partition-load-frequency>< 结束日期 >。

  • 一组 Athena 命名的查询。有关更多信息,请参阅 预定义查询

  • 一个 Lambda 函数,可按指定的时间表(每日、每周或每月)将新分区加载到表中。

  • 授予运行 Lambda 函数的权限的 IAM 角色。

使用生成 CloudFormation 模板 Amazon CLI

将第一批流日志传送到您的 S3 存储桶后,您可以生成并使用 CloudFormation 模板与 Athena 集成。

使用以下 get-flow-logs-integration-tem plate 命令生成 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 控制台。

  2. 在导航窗格中,选择 Query editor(查询编辑器)。在 “工作组” 下,选择由模板创建的工作组。 CloudFormation

  3. 选择 Saved queries(保存的查询)、选择一个查询、根据需要修改参数,然后运行查询。有关可用预定义查询的列表,请参阅预定义查询

  4. Query results(查询结果)下,查看查询结果。

预定义查询

以下是 Athena 命名查询的完整列表。生成模板时提供的预定义查询取决于流日志的日志记录格式包含的字段。因此,模板可能不会包含所有这些预定义查询。

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

  • VpcFlowLogsAdminPortTraffic— 流量最大的前 10 个 IP 地址,按在管理端口上处理请求的应用程序所记录。

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

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

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

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

  • VpcFlowLogsSshRdpTraffic— SSH 和 RDP 流量。

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

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

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

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

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

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

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

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

  • VpcFlowLogsTrafficToDstAddr— 为特定目的地 IP 地址记录的流量。