Amazon Virtual Private Cloud
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

将流日志发布到 Amazon S3

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

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

流日志文件

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

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

日志文件将保存到指定的 Amazon S3 存储桶,并使用由流日志的 ID、区域及其创建日期决定的文件夹结构。存储桶文件夹结构使用以下格式:

bucket_ARN/optional_folder/AWSLogs/aws_account_id/vpcflowlogs/region/year/month/day/log_file_name.log.gz

同样,流日志的文件名由流日志的 ID、区域及其创建日期和时间决定。文件名使用以下格式:

aws_account_id_vpcflowlogs_region_flow_log_id_timestamp_hash.log.gz

注意

时间戳使用 YYYYMMDDTHHmmZ 格式。

例如,下面显示了一个流日志的日志文件的文件夹结构和文件名,该流日志是由 AWS 账户 123456789012 创建的,用于 us-east-1 区域中的资源,创建时间为 June 20, 201816:20 UTC,其中包含 16:15:01 到 16:20:00 的流日志记录:

arn:aws:s3:::my-flow-log-bucket/AWSLogs/123456789012/vpcflowlogs/us-east-1/2018/06/20/123456789012_vpcflowlogs_us-east-1_fl-1234abcd_20180620T1620Z_fe123456.log.gz

处理流日志记录

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

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

用于将流日志发布到 Amazon S3 的 IAM 角色

IAM 委托人(例如,IAM 用户)必须具有足够的权限才能将流日志发布到 Amazon S3 存储桶。IAM 策略必须包含以下权限:

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

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

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

如果创建流日志的用户拥有存储桶,我们会自动向存储桶附加以下策略,以授予流日志将日志发布到存储桶的权限。

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

如果创建流日志的用户不拥有存储桶,也没有存储桶的 GetBucketPolicyPutBucketPolicy 权限,流日志创建操作会失败。在这种情况下,存储桶拥有者必须手动将上述策略添加到存储桶,并指定流日志创建者的 AWS 账户 ID。有关更多信息,请参阅如何添加 S3 存储桶策略? (在 Amazon Simple Storage Service 控制台用户指南 中)。如果存储桶从多个账户接收流日志,则将 Resource 元素条目添加到每个账户的 AWSLogDeliveryWrite 策略声明。例如,以下存储桶策略允许 AWS 账户 123123123123456456456456 将流日志发布到名为 log-bucket 的存储桶中名为 flow-logs 的文件夹。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::log-bucket/flow-logs/AWSLogs/123123123123/*", "arn:aws:s3:::log-bucket/flow-logs/AWSLogs/456456456456/*" ], "Condition": {"StringEquals": {"s3:x-amz-acl": "bucket-owner-full-control"}} }, { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": {"Service": "delivery.logs.amazonaws.com"}, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::log-bucket" } ] }

注意

我们建议您向 AWSLogDeliveryAclCheck 和 AWSLogDeliveryWrite 权限授予日志传输 服务委托人,而不是单个 AWS 账户 ARN。

Amazon S3 日志文件权限

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