中转网关流日志 Amazon S3 中的记录 - Amazon VPC

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

中转网关流日志 Amazon S3 中的记录

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

在发布到 Amazon S3 时,流日志数据将发布到您指定的现有 Amazon S3 存储桶。所有受监控的中转网关的流日志记录将发布到在存储桶中存储的一系列日志文件对象。

当您将流日志发布到 Amazon S3 时,将 Amazon CloudWatch 对出售的日志收取数据摄取和存档费用。有关销售日志 CloudWatch 定价的更多信息,请打开 Amazon Pric CloudWatch in g,选择日志,然后找到销售日志。

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

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

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

流日志文件

VPCFlow Logs 是一项功能,可收集流日志记录,将其合并到日志文件中,然后每隔 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%。

日志文件选项

您也可以指定以下选项。

  • 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/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/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

下面显示了一个流日志的日志文件的示例,该流日志由 AWS 账户 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

IAM适用于向 Amazon IAM S3 发布流日志的委托人的政策

创建流日志的IAM委托人必须具有以下权限,这些权限是将流日志发布到目标 Amazon S3 存储桶所必需的。

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

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

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

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

否则,存储桶拥有者必须将此策略添加到存储桶中,以指定流日志创建者的 AWS 账户 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": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": account_id }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:region:account_id:*" } } }, { "Sid": "AWSLogDeliveryCheck", "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:*" } } } ] }

你ARN为之指定的 my-s3-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/*

作为最佳实践,我们建议您将这些权限授予日志传输服务委托人而不是个人 AWS 账户 ARNs。此外,最好是使用 aws:SourceAccountaws:SourceArn 条件键来防止出现混淆代理人问题。源账户是流日志的所有者,源账户ARN是日志服务的通配符 (*) ARN。

与 SSE-一起使用的必需密钥策略 KMS

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

使用 SSE-KMS,您可以使用 AWS 托管密钥或客户托管密钥。使用 AWS 托管密钥,您就无法使用跨账户交付。流日志是从日志传输账户传输的,因此您必须授予跨账户传输的访问权限。要授予对您的 S3 存储桶的跨账户访问权限,请在启用存储桶加密时使用客户托管密钥并指定客户托管密钥的 Amazon 资源名称 (ARN)。有关详情,请参阅《Amazon S3 用户指南》中的使用 AWS KMS指定服务器端加密

将 SSE-KMS 与客户托管密钥一起使用时,必须将以下内容添加到密钥的密钥策略(而不是您的 S3 存储桶的存储桶策略)中,这样 VPC Flow Logs 才能写入您的 S3 存储桶。

{ "Sid": "Allow Transit Gateway 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 还使用访问控制列表 (ACLs) 来管理对由流日志创建的日志文件的访问权限。默认情况下,存储桶拥有者对每个日志文件具有 FULL_CONTROL 权限。如果日志传输拥有者与存储桶拥有者不同,则没有权限。日志传输账户具有 READWRITE 权限。有关更多信息,请参阅 Amazon 简单存储服务用户指南中的访问控制列表 (ACL) 概述

已处理 Amazon S3 中的流日志记录

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