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

将流日志发布到 Amazon S3

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

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

要创建 Amazon S3 存储桶供流日志使用,请参阅 Amazon Simple Storage Service 入门指南 中的创建存储桶

流日志文件

流日志收集流日志记录,将它们合并到日志文件,然后每隔五分钟将日志文件发布到 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:0016:19:59 的流日志记录:

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 的 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。有关更多信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的如何添加 S3 存储桶策略?。如果存储桶从多个账户接收流日志,则将 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。

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

如果使用具有客户托管的客户主密钥 (CMK) 的 AWS KMS 托管密钥 (SSE-KMS) 为 Amazon S3 存储桶启用了服务器端加密,则必须将以下内容添加到 CMK 的密钥策略中,以便流日志可以将日志文件写入存储桶。

注意

将这些元素添加到 CMK 的策略中,而不是存储桶的策略中。

{ "Sid": "Allow VPC Flow Logs to use the key", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }

Amazon S3 日志文件权限

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

创建发布到 Amazon S3 的流日志

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

创建网络接口的流日志

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Network Interfaces

  3. 选择一个或多个网络接口,然后选择操作创建流日志

  4. 对于 Filter (筛选条件),指定要记录的 IP 流量数据的类型。选择 All (全部) 将记录接受和拒绝的流量,选择 Rejected (已拒绝) 将仅记录被拒绝的流量,选择 Accepted (已接受) 将仅记录接受的流量。

  5. 对于目的地,选择发送到 Amazon S3 存储桶

  6. 对于 S3 bucket ARN (S3 存储桶 ARN),指定某个现有 Amazon S3 存储桶的 Amazon 资源名称 (ARN)。您可以在存储桶 ARN 中包括子文件夹。存储桶不能使用 AWSLogs 作为子文件夹名称,因为这是保留项。

    例如,要指定名为 my-bucket 的存储桶中名为 my-logs 的子文件夹,请使用以下 ARN:

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

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

  7. 选择 Create

为 VPC 或子网创建流日志

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Your VPCs (您的 VPC)Subnets (子网)

  3. 选择一个或多个 VPC 或子网,然后选择操作创建流日志

  4. 对于 Filter (筛选条件),指定要记录的 IP 流量数据的类型。选择 All (全部) 将记录接受和拒绝的流量,选择 Rejected (已拒绝) 将仅记录被拒绝的流量,选择 Accepted (已接受) 将仅记录接受的流量。

  5. 对于目的地,选择发送到 Amazon S3 存储桶

  6. 对于 S3 bucket ARN (S3 存储桶 ARN),指定某个现有 Amazon S3 存储桶的 Amazon 资源名称 (ARN)。您可以在存储桶 ARN 中包括子文件夹。存储桶不能使用 AWSLogs 作为子文件夹名称,因为这是保留项。

    例如,要指定名为 my-bucket 的存储桶中名为 my-logs 的子文件夹,请使用以下 ARN:

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

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

  7. 选择 Create

处理 Amazon S3 中的流日志记录

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

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