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

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

将流日志发布到 Amazon S3

流日志可以将流日志数据发布到 Amazon S3。

在发布到 Amazon S3 时,流日志数据将发布到您指定的现有 Amazon S3 存储桶。所有受监控网络接口的流日志记录将发布到存储桶中存储的一系列日志文件对象。如果流日志捕获 VPC 的数据,流日志将发布选定 VPC 中所有网络接口的流日志记录。

要创建用于流日志的 Amazon S3 存储桶,请参阅《Amazon Simple Storage Service 用户指南》中的Create a bucket(创建存储桶)。

有关多账户日志记录的更多信息,请参阅 Amazon 解决方案库中的集中日志记录

有关 CloudWatch 日志的更多信息,请参阅 Amazon 日志用户指南中的发送到 A mazon S3 的 CloudWatch 日志

定价

将流日志发布到 Amazon S3 时,适用已出售日志的数据引入和存档费用。要了解更多信息,请打开 Amazon P CloudWatch ric ing,选择日志,然后找到销售日志。

流日志文件

VPC 流日志收集流日志记录,将它们合并到日志文件,然后每隔 5 分钟将日志文件发布到 Amazon S3 存储桶。每个日志文件包含在上一个 5 分钟期间内记录的 IP 流量的流日志记录。

日志文件的最大文件大小为 75 MB。如果日志文件在 5 分钟期间内达到文件大小限制,流日志会停止向它添加流日志记录。然后将它发布到 Amazon S3 存储桶,并创建一个新的日志文件。

在 Amazon S3 中,流日志文件的 Last modified(上次修改时间)字段指示文件上传到 Amazon S3 存储桶的日期和时间。此时间要晚于文件名中的时间戳,并且不同于将文件上传到 Amazon S3 存储桶所花费的时间。

日志文件格式

您可为日志文件指定下列格式之一。每个文件都被压缩为单个 Gzip 文件。

  • Text – 纯文本。这是默认格式。

  • Parquet – Apache Pparquet 是一种列式数据格式。与对纯文本数据的查询相比,对 Passic 格式的数据进行查询速度快 10 到 100 倍。使用 Gzip 压缩的 Parquet 格式的数据比 Gzip 压缩的纯文本格式的数据占用的存储空间少 20%。

注意

如果采用 Gzip 压缩的 Parquet 格式的数据在每个聚合周期内小于 100 KB,则由于 Parquet 文件内存要求,以 Parquet 格式存储数据可能比采用 Gzip 压缩的纯文本占用更多的空间。

日志文件选项

您也可以指定以下选项。

  • Hive 兼容的 S3 前缀 – 启用 Hive兼容的前缀,而不是将分区导入 Hive 兼容工具中。请先使用 MSCK REPAIR TABLE 命令,然后再运行查询。

  • 每小时分区 – 如果您有大量日志并且通常将查询定位到特定小时,则可以通过每小时对日志进行分区来获得更快的结果并节省查询成本。

日志文件 S3 存储桶结构

日志文件将保存到指定的 Amazon S3 存储桶,并使用由流日志的 ID、区域、创建日期及目标选项决定的文件夹结构。

默认情况下,文件传送到以下位置。

bucket-and-optional-prefix/AWSLogs/account_id/vpcflowlogs/region/year/month/day/

如果启用 Hive 兼容的 S3 前缀,则文件将传送到以下位置。

bucket-and-optional-prefix/AWSLogs/aws-account-id=account_id/aws-service=vpcflowlogs/aws-region=region/year=year/month=month/day=day/

如果启用每小时分区,则文件将传送到以下位置。

bucket-and-optional-prefix/AWSLogs/account_id/vpcflowlogs/region/year/month/day/hour/

如果启用 Hive 兼容的分区并每小时对流日志进行分区,则文件将传送到以下位置。

bucket-and-optional-prefix/AWSLogs/aws-account-id=account_id/aws-service=vpcflowlogs/aws-region=region/year=year/month=month/day=day/hour=hour/
日志文件名称

日志文件的文件名基于流日志 ID、区域以及创建日期和时间。文件名使用以下格式。

aws_account_id_vpcflowlogs_region_flow_log_id_YYYYMMDDTHHmmZ_hash.log.gz

下面显示了一个流日志的日志文件的示例,该流日志由 Amazon 账户 123456789012 创建,用于 us-east-1 区域中的资源,创建时间为 June 20, 2018 16:20 UTC。该文件包含结束时间介于 16:20:00 和 16:24:59 之间的流日志记录。

123456789012_vpcflowlogs_us-east-1_fl-1234abcd_20180620T1620Z_fe123456.log.gz

将流日志发布到 Amazon S3 的 IAM 主体权限

创建流日志的 IAM 主体必须使用具有以下权限的 IAM 角色,才能将流日志发布到目标 Amazon S3 存储桶。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogDelivery", "logs:DeleteLogDelivery" ], "Resource": "*" } ] }

针对流日志的 Amazon S3 存储桶权限

默认情况下,Amazon S3 存储桶以及其中包含的对象都是私有的。只有存储桶拥有者才能访问存储桶和其中存储的对象。不过,存储桶拥有者可以通过编写访问策略来向其他资源和用户授予访问权限。

如果创建流日志的用户拥有存储桶并且对它具有 PutBucketPolicyGetBucketPolicy 权限,则我们会自动将以下策略附加到存储桶。此策略将覆盖附加到存储桶的任何现有策略。

否则,存储桶拥有者必须将此策略添加到存储桶中,以指定流日志创建者的 Amazon 账户 ID,否则流日志创建失败。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的使用存储桶策略

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "my-s3-arn/*", "Condition": { "StringEquals": { "aws:SourceAccount": account_id, "s3:x-amz-acl": "bucket-owner-full-control" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:region:account_id:*" } } }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": [ "s3:GetBucketAcl", "s3:ListBucket" ], "Resource": "arn:aws:s3:::bucket_name", "Condition": { "StringEquals": { "aws:SourceAccount": account_id }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:region:account_id:*" } } } ] }

您为 my-s3-arn 指定的 ARN 取决于您是否使用 Hive 兼容的 S3 前缀。

  • 默认前缀

    arn:aws:s3:::bucket_name/optional_folder/AWSLogs/account_id/*
  • Hive 兼容的 S3 前缀

    arn:aws:s3:::bucket_name/optional_folder/AWSLogs/aws-account-id=account_id/*

最佳做法是将这些权限授予日志传输服务主体,而不是向单个 Amazon Web Services 账户 ARN 授予这些权限。此外,最好是使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。源帐户是流日志的所有者,并且源 ARN 是日志服务的通配符(*) ARN。

与 SSE-KMS 结合使用时必需的密钥策略

您可以通过启用 Amazon S3 托管式密钥的服务器端加密 (SSE-S3) 或 S3 存储桶上 KMS 密钥(SSE-KMS)的服务器端加密 (SSE-KMS) 来保护 Amazon S3 存储桶中的数据。有关详情,请参阅《Amazon S3 用户指南》中的使用服务器端加密保护数据

如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。

如果您选择 SSE-KMS,则必须使用客户自主管理型密钥 ARN。如果您使用密钥 ID,则在创建流日志时可能会遇到 LogDestination 无法送达 错误。此外,您还必须更新客户自主管理型密钥的密钥政策,以确保日志传输账户可以写入您的 S3 存储桶。有关与 SSE-KMS 一起使用的所需密钥策略的更多信息,请参阅《亚马逊 CloudWatch 日志用户指南》中的 Amazon S3 存储桶服务器端加密

Amazon S3 日志文件权限

除了必需的存储桶策略之外,Amazon S3 使用访问控制列表(ACL) 管理对流日志创建的日志文件的访问。默认情况下,存储桶拥有者对每个日志文件具有 FULL_CONTROL 权限。如果日志传输拥有者与存储桶拥有者不同,则没有权限。日志传输账户具有 READWRITE 权限。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的访问控制列表 (ACL) 概述

创建发布到 Amazon S3 的流日志

在您创建和配置 Amazon S3 存储桶后,您可以为网络接口、子网和 VPC 创建流日志。

使用控制台创建流日志
  1. 请执行以下操作之一:

  2. 选择 Actions(操作)、Create flow log(创建流日志)。

  3. 对于 Filter(筛选条件),指定要记录的 IP 流量数据的类型。

    • Accepted(已接受)– 仅记录接受的流量。

    • Rejected(已拒绝)– 仅记录拒绝的流量。

    • All(所有流量)– 记录接受的和拒绝的流量。

  4. 对于 Maximum aggregation interval(最大聚合时间间隔),选择捕获流并聚合到一个流日志记录中的最大时间段。

  5. 对于 Destination(目的地),选择 Send to an S3 bucket(发送到 S3 存储桶)

  6. 对于 S3 bucket ARN(S3 存储桶 ARN),指定某个现有 Amazon S3 存储桶的 Amazon Resource Name(ARN)。您可以选择包含子文件夹。例如,要指定名为 my-logs 的存储桶中名为 my-bucket 的子文件夹,请使用以下 ARN:

    arn:aws:s3:::my-bucket/my-logs/

    存储桶不能使用 AWSLogs 作为子文件夹名称,因为这是保留项。

    如果您拥有该存储桶,我们会自动创建资源策略并将它附加到该存储桶。有关更多信息,请参阅针对流日志的 Amazon S3 存储桶权限

  7. 对于 Log record format(日志记录格式),选定流日志记录的格式。

    • 要使用默认流日志记录格式,请选择 Amazon default format(亚马逊云科技默认格式)

    • 要创建自定义格式,请选择Custom format(自定义格式)。对于Log format(日志行格式),选择要包括在流日志记录中的字段。

  8. 对于 Log file format(日志文件格式),指定日志文件的格式。

    • Text – 纯文本。这是默认格式。

    • Parquet – Apache Pparquet 是一种列式数据格式。与对纯文本数据的查询相比,对 Passic 格式的数据进行查询速度快 10 到 100 倍。使用 Gzip 压缩的 Parquet 格式的数据比 Gzip 压缩的纯文本格式的数据占用的存储空间少 20%。

  9. (可选)要使用 Hive 兼容的 S3 前缀,请选择 Hive-compatible S3 prefix(Hive 兼容的 S3 前缀)Enable(启用)

  10. (可选)要每小时对流日志进行分区,请选择 Every 1 hour(60 mins)(每 1 小时(60 分钟))

  11. (可选)要向流日志添加标签,请选择 Add new tag(添加新标签)并指定标签键和值。

  12. 选择 Create flow log(创建流日志)

使用命令行工具创建发布到 Amazon S3 的流日志

使用以下命令之一:

以下 Amazon CLI 示例创建了一个流日志,用于捕获指定 VPC 的所有流量并将流日志传输到指定的 Amazon S3 存储桶。--log-format 参数指定流日志记录的自定义格式。

aws ec2 create-flow-logs --resource-type VPC --resource-ids vpc-00112233344556677 --traffic-type ALL --log-destination-type s3 --log-destination arn:aws:s3:::flow-log-bucket/custom-flow-logs/ --log-format '${version} ${vpc-id} ${subnet-id} ${instance-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${tcp-flags} ${type} ${pkt-srcaddr} ${pkt-dstaddr}'

查看流日志记录

您可以使用 Amazon S3 控制台查看流日志记录。创建流日志之后,可能需要几分钟才能在控制台中显示。

查看发布到 Amazon S3 的流日志记录
  1. 通过以下网址打开 Amazon S3 控制台:https://console.aws.amazon.com/s3/

  2. 选择存储桶的名称以打开其详细信息页面。

  3. 导航到包含日志文件的文件夹。例如,前缀/AWSLogs/account_id /vpcflowlogs/ region/年/月/日/

  4. 选中文件名旁边的复选框,然后选择 Download(下载)。

处理 Amazon S3 中的流日志记录

日志文件是压缩文件。如果您使用 Amazon S3 控制台打开这些日志文件,则将对其进行解压缩,并且将显示流日志记录。如果您下载这些文件,则必须对其进行解压才能查看流日志记录。

您还可以使用 Amazon Athena 查询日志文件中的流日志记录。Amazon Athena 是一种交互式查询服务,让您能够更轻松地使用标准 SQL 分析 Amazon S3 中的数据。有关更多信息,请参阅 Amazon Athena 用户指南 中的查询 Amazon VPC 流日志