

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

# AWS Transit Gateway 流量记录亚马逊 S3 中的记录
<a name="flow-logs-s3"></a>

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

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

当您将流日志发布到 Amazon S3 时，将 Amazon CloudWatch 对出售的日志收取数据摄取和存档费用。有关销售日志 CloudWatch 定价的更多信息，请打开 [Amazon Pric CloudWatch in](https://aws.amazon.com/cloudwatch/pricing/) g，选择**日志**，然后找到**销售日志。**

要创建用于流日志的 Amazon S3 存储桶，请参阅《*Amazon S3 用户指南*》中的[创建桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

有关多账户日志记录的更多信息，请参阅 AWS 解决方案库中的[集中日志记录](https://aws.amazon.com/solutions/implementations/centralized-logging/)。

有关 CloudWatch 日志的更多信息，请参阅 Amazon [日志用户指南中的发送到 A](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-logs-infrastructure-S3) *mazon S3 的 CloudWatch 日志*。

**Topics**
+ [流日志文件](#flow-logs-s3-path)
+ [将流日志发布到 Amazon S3 的 IAM 委托人的 IAM policy](#flow-logs-s3-iam)
+ [针对流日志的 Amazon S3 存储桶权限](#flow-logs-s3-permissions)
+ [与 SSE-KMS 结合使用时必需的密钥策略](#flow-logs-s3-cmk-policy)
+ [Amazon S3 日志文件权限](#flow-logs-file-permissions)
+ [创建源账户角色](flowlog-s3-create-source.md)
+ [创建发布到 Amazon S3 的流日志](flowlog-s3-create.md)
+ [查看流日志记录](view-flow-log-records-s3.md)
+ [亚马逊 S3 AWS 中已处理的 Transit Gateway 流量日志记录](#process-records-s3)

## 流日志文件
<a name="flow-logs-s3-path"></a>

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％。

**日志文件选项**

您也可以指定以下选项。
+ **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
```

## 将流日志发布到 Amazon S3 的 IAM 委托人的 IAM policy
<a name="flow-logs-s3-iam"></a>

创建流日志的 IAM 委托人必须具有以下权限，才能将流日志发布到目标 Amazon S3 存储桶。

------
#### [ JSON ]

****  

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

------

## 针对流日志的 Amazon S3 存储桶权限
<a name="flow-logs-s3-permissions"></a>

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

如果创建流日志的用户拥有存储桶并且对它具有 `PutBucketPolicy` 和 `GetBucketPolicy` 权限，则我们会自动将以下策略附加到存储桶。该自动生成的新策略将附加到原始策略中。

否则，存储桶拥有者必须将此策略添加到存储桶中，以指定流日志创建者的 AWS 账户 ID，否则流日志创建失败。有关更多信息，请参阅*《Amazon Simple Storage Service 用户指南》*中的[存储桶策略](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)。

------
#### [ JSON ]

****  

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

------

您指定的 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:SourceAccount` 和 `aws:SourceArn` 条件键来防止出现[混淆代理人问题](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)。源账户是流日志的所有者，并且源 ARN 是日志服务的通配符（\$1） ARN。

## 与 SSE-KMS 结合使用时必需的密钥策略
<a name="flow-logs-s3-cmk-policy"></a>

您可以通过启用 Amazon S3 托管式密钥的服务器端加密 (SSE-S3) 或 KMS 密钥的服务器端加密 (SSE-KMS) 来保护 Amazon S3 存储桶中的数据。有关详情，请参阅《Amazon S3 用户指南》中的[使用服务器端加密保护数据](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

使用 SSE-KMS，您可以使用 AWS 托管密钥或客户托管密钥。使用 AWS 托管密钥，您就无法使用跨账户交付。流日志是从日志传输账户传输的，因此您必须授予跨账户传输的访问权限。要授予对 S3 存储桶的跨账户访问权限，请在启用存储桶加密时使用客户托管式密钥并指定客户托管式密钥的 Amazon Resource Name（ARN）。有关详情，请参阅《Amazon S3 用户指南》中的[使用 AWS KMS指定服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)。

当您将 SSE-KMS 与客户托管式密钥结合使用时，必须将以下内容添加到密钥的密钥策略（不是 S3 存储桶的存储桶策略）中，以便 VPC 流日志可以写入 S3 存储桶。

**注意**  
使用 S3 存储桶密钥可通过使用存储桶级密钥将请求减少到 AWS KMS 加密 GenerateDataKey、和解密操作，从而节省 AWS Key Management Service (AWS KMS) 请求成本。根据设计，利用此存储桶级密钥的后续请求不会导致 AWS KMS API 请求或根据密钥策略验证访问权限。 AWS KMS 

```
{
    "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 日志文件权限
<a name="flow-logs-file-permissions"></a>

除了所需的存储桶策略外，Amazon S3 还使用访问控制列表 (ACLs) 来管理对由流日志创建的日志文件的访问权限。默认情况下，存储桶拥有者对每个日志文件具有 `FULL_CONTROL` 权限。如果日志传输拥有者与存储桶拥有者不同，则没有权限。日志传输账户具有 `READ` 和 `WRITE` 权限。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》** 中的[访问控制列表（ACL）概述](https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html)。

# 为 Amazon S3 创建 AWS Transit Gateway Flow Logs 源账户角色
<a name="flowlog-s3-create-source"></a>

从源账户中，在 AWS Identity and Access Management 控制台中创建源角色。

**创建源账户角色**

1. 登录 AWS 管理控制台 并打开 IAM 控制台，网址为[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

1. 在导航窗格中，选择**策略**。

1. 选择**创建策略**。

1. 在创建策略页面上，执行以下操作：

   1. 选择 **JSON**。

   1. 将此窗口的内容替换为此部分开头的权限策略。

   1. 选择 **Next: Tags**（下一步：标签）和 **Next: Review**（下一步：审核）。

   1. 输入您策略的名称和可选描述，然后选择 **Create policy**（创建策略）。

1. 在导航窗格中，选择**角色**。

1. 选择**创建角色**。

1. 对于 **Trusted entity type**（可信实体类型），选择 **Custom trust policy**（自定义信任策略）。对于 **Custom trust policy**（自定义信任策略），将 `"Principal": {},` 替换为以下内容，以指定日志传输服务。选择**下一步**。

   ```
   "Principal": {
      "Service": "delivery.logs.amazonaws.com"
   },
   ```

1. 在 **Add permissions**（添加权限）页面上，选中您在此过程中先前创建的策略复选框，然后选择 **Next**（下一步）。

1. 输入您的角色的名称，并且可以选择提供描述。

1. 选择**Create role（创建角色）**。

# 创建发布到 Amazon S3 的 T AWS ransit Gateway 流日志记录
<a name="flowlog-s3-create"></a>

在您创建和配置 Amazon S3 存储桶后，您可以为中转网关创建流日志。您可以使用 Amazon VPC 控制台或 AWS CLI 创建 Amazon S3 流日志。

**使用命令行工具创建发布到 Amazon S3 的中转网关流日志**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

1. 在导航窗格中，选择 **Transit gateways**（中转网关）或 **Transit gateway attachments**（中转网关连接）。

1. 选中一个或多个中转网关或中转网关连接复选框。

1. 选择 **Actions**（操作）、**Create flow log**（创建流日志）。

1. 配置流日志设置。有关更多信息，请参阅[配置流日志设置](#configure-flow-log)。<a name="configure-flow-log"></a>

**使用控制台配置流日志设置**

1. 对于 **Destination（目的地）**，选择 **Send to an S3 bucket（发送到 S3 存储桶）**。

1. 对于 **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 存储桶权限](flow-logs-s3.md#flow-logs-s3-permissions)。

1. 对于 **Log record format（日志记录格式）**，选定流日志记录的格式。
   + 要使用默认流日志记录格式，请选择 **AWS default format（亚马逊云科技默认格式）**。
   + 要创建自定义格式，请选择**Custom format**（自定义格式）。对于**Log format**（日志行格式），选择要包括在流日志记录中的字段。

1. 对于 **Log file format（日志文件格式）**，指定日志文件的格式。
   + **Text** – 纯文本。这是默认格式。
   + **Parquet** – Apache Pparquet 是一种列式数据格式。与对纯文本数据的查询相比，对 Passic 格式的数据进行查询速度快 10 到 100 倍。使用 Gzip 压缩的 Parquet 格式的数据比 Gzip 压缩的纯文本格式的数据占用的存储空间少 20％。

1. （可选）要使用 Hive 兼容的 S3 前缀，请选择 **Hive-compatible S3 prefix（Hive 兼容的 S3 前缀）**、**Enable（启用）**。

1. （可选）要每小时对流日志进行分区，请选择 **Every 1 hour（60 mins）（每 1 小时（60 分钟））**。

1. （可选）要向流日志添加标签，请选择 **Add new tag（添加新标签）**并指定标签键和值。

1. 选择 **Create flow log（创建流日志）**。

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

使用以下命令之一。
+ [create-flow-logs](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-flow-logs.html) (AWS CLI)
+ [New-EC2FlowLog](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2FlowLog.html) (AWS Tools for Windows PowerShell)

以下 AWS CLI 示例创建了一个流日志，用于捕获 VPC 的所有中转网关流量，`tgw-00112233344556677`并将流日志传送到名为的 Amazon S3 存储桶`flow-log-bucket`。`--log-format` 参数指定流日志记录的自定义格式。

```
aws ec2 create-flow-logs --resource-type TransitGateway --resource-ids tgw-00112233344556677 --log-destination-type s3 --log-destination arn:aws:s3:::flow-log-bucket/my-custom-flow-logs/'
```

# 查看 Amazon S3 中的 T AWS ransit Gateway 流量日志记录
<a name="view-flow-log-records-s3"></a>

**查看发布到 Amazon S3 的流日志记录**

1. 打开 Amazon S3 控制台，网址为 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 对于 **Bucket name（存储桶名称）**，选择流日志发布到的存储桶。

1. 对于 **Name（名称）**，选中日志文件旁边的复选框。在对象概述面板上，选择 **Download（下载）**。

## 亚马逊 S3 AWS 中已处理的 Transit Gateway 流量日志记录
<a name="process-records-s3"></a>

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