

# 配置标准日志记录（旧版）
<a name="standard-logging-legacy-s3"></a>

**备注**  
本主题适用于标准日志记录的之前版本。有关最新版本，请参阅[配置标准日志记录（v2）](standard-logging.md)。
如果您已经启用了标准日志记录（旧版），并且想要启用在 Amazon S3 中进行标准日志记录（v2），我们建议您指定*不同*的 Amazon S3 存储桶，或在同一存储桶中使用*单独的路径*（例如，使用日志前缀或分区）。这可以帮助您跟踪哪些日志文件与哪个分配相关联，并防止日志文件相互覆盖。

要开始使用标准日志记录（旧版），请完成以下步骤：

1. 选择用于接收您的日志的 Amazon S3 存储桶，并添加所需的权限。

1. 使用 CloudFront 控制台或 CloudFront API 配置标准日志记录（旧版）。您只能选择 Amazon S3 存储桶来接收日志。

1. 查看您的访问日志。

## 为标准日志选择 Amazon S3 存储桶
<a name="access-logs-choosing-s3-bucket"></a>

当您对分配启用日志记录时，需要指定您希望 CloudFront 将日志文件存储到其中的 Amazon S3 存储桶。如果您使用 Amazon S3 作为源，建议您对日志文件使用*单独的*存储桶。

指定您希望 CloudFront 用于存储访问日志的 Amazon S3 存储桶，例如 `amzn-s3-demo-bucket.s3.amazonaws.com`。

可将多个分配的日志文件存储在同一存储桶中。当您启用日志记录时，可为文件名指定一个可选前缀，以便您可以跟踪哪些日志文件与哪些分配相关联。

**关于选择 S3 存储桶**  
您的存储桶必须启用访问控制列表 (ACL)。如果从 CloudFront 控制台选择了未启用 ACL 的存储桶，则会出现一条错误消息。请参阅[权限](#AccessLogsBucketAndFileOwnership)。
不要选择 [S3 对象所有权](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)设置为**强制桶拥有者**的 Amazon S3 存储桶。该设置对存储桶以及其中的对象禁用 ACL，这会阻止 CloudFront 将日志文件传输到存储桶。
传统日志记录在选择加入区域中不支持 Amazon S3 存储桶。请选择默认启用的区域，或者使用确实支持选择加入区域和其它功能的[标准日志记录 V2](standard-logging.md)。有关默认区域和选择加入区域的列表，请参阅 [AWS 区域](https://docs.aws.amazon.com/global-infrastructure/latest/regions/aws-regions.html)。

## 权限
<a name="AccessLogsBucketAndFileOwnership"></a>

**重要**  
从 2023 年 4 月开始，您必须为用于 CloudFront 标准日志的新 S3 存储桶启用 S3 ACL。您可以在[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-new-bucket.html)时启用 ACL，也可以为[现有存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-ownership-existing-bucket.html)启用 ACL。  
有关这些更改的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[新 S3 桶的原定设置常见问题解答](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-faq.html)和《AWS 新闻博客》**中的[提醒：Amazon S3 安全更改将于 2023 年 4 月发布](https://aws.amazon.com/blogs/aws/heads-up-amazon-s3-security-changes-are-coming-in-april-of-2023/)。

您的 AWS 账户必须对您为日志文件指定的存储桶拥有以下权限：
+ 存储桶的 ACL 必须向您授予 `FULL_CONTROL` 如果您是存储桶拥有者，则默认情况下，您的账户具有此权限。如果您不是，则存储桶拥有者必须更新存储桶的 ACL。
+ `s3:GetBucketAcl`
+ `s3:PutBucketAcl`

**存储桶的 ACL**  
当您创建或更新分配并启用日志记录时，CloudFront 会使用这些权限更新存储桶的 ACL，以授予 `awslogsdelivery` 账户 `FULL_CONTROL` 权限。`awslogsdelivery` 账户将日志文件写入存储桶。如果您的账户没有更新 ACL 所需的权限，则创建或更新分配将会失败。  
在某些情况下，如果以编程方式提交请求以创建存储桶，但具有指定名称的存储桶已存在，则 S3 将存储桶上的权限重置为默认值。如果您已将 CloudFront 配置为将访问日志保存在 S3 存储桶中，并停止获取该存储桶中的日志，请检查存储桶上的权限，以确保 CloudFront 具有必要的权限。

**恢复存储桶的 ACL**  
如果您删除对 `awslogsdelivery` 账户的权限，则 CloudFront 无法将日志保存到 S3 存储桶。要使 CloudFront 能够再次开始保存您的分配的日志，请通过执行以下操作之一恢复 ACL 权限：  
+ 在 CloudFront 中对您的分配禁用日志记录，然后再次启用它。有关更多信息，请参阅 [标准日志记录](DownloadDistValuesGeneral.md#DownloadDistValuesLoggingOnOff)。
+ 通过在 Amazon S3 控制台中导航到 S3 存储桶并添加权限，手动为 `awslogsdelivery` 添加 ACL 权限。要为 `awslogsdelivery` 添加 ACL，您必须提供账户的规范 ID，如下所示：

  `c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0`

  

  有关将 ACL 添加到 S3 存储桶的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[配置 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/managing-acls.html)。

**每个日志文件的 ACL**  
除了存储桶上的 ACL 之外，每个日志文件上还有一个 ACL。存储桶拥有者对每个日志文件均具有 `FULL_CONTROL` 权限，分配所有者（如果与存储桶拥有者不同）没有权限，而 `awslogsdelivery` 账户具有读取和写入权限。

**禁用日志记录**  
如果您禁用日志记录，则 CloudFront 并不会删除存储桶或日志文件的 ACL。如果需要，您可以删除 ACL。

### SSE-KMS 存储桶的必需密钥策略
<a name="AccessLogsKMSPermissions"></a>

如果标准日志的 S3 存储桶通过客户自主管理型密钥使用具有 AWS KMS keys的服务器端加密（SSE-KMS），您必须向客户自主管理型密钥的密钥策略添加以下语句。这样一来，CloudFront 可以将日志文件写入存储桶中。您无法将 SSE-KMS 与 AWS 托管式密钥结合使用，因为 CloudFront 无法将日志文件写入存储桶。

```
{
    "Sid": "Allow CloudFront to use the key to deliver logs",
    "Effect": "Allow",
    "Principal": {
        "Service": "delivery.logs.amazonaws.com"
    },
    "Action": "kms:GenerateDataKey*",
    "Resource": "*"
}
```

如果标准日志的 S3 存储桶将 SSE-KMS 与 [S3 存储桶密钥](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-key.html)结合使用，您还需要将 `kms:Decrypt` 权限添加到策略语句中。在这种情况下，完整的策略语句如下所示。

```
{
    "Sid": "Allow CloudFront to use the key to deliver logs",
    "Effect": "Allow",
    "Principal": {
        "Service": "delivery.logs.amazonaws.com"
    },
    "Action": [
        "kms:GenerateDataKey*",
        "kms:Decrypt"
    ],
    "Resource": "*"
}
```

**注意**  
当您为 S3 存储桶启用 SSE-KMS 时，请指定客户自主管理型密钥的完整 ARN。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[借助 AWS KMS keys（SSE-KMS）指定服务器端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/specifying-kms-encryption.html)。

## 启用标准日志记录（旧版）
<a name="standard-logs-legacy-enable"></a>

要启用标准日志记录，您可以使用 CloudFront 控制台或 CloudFront API。

**Contents**
+ [启用标准日志记录（旧版）（CloudFront 控制台）](#standard-logs-legacy-enable-console)
+ [启用标准日志记录（旧版）（CloudFront API）](#standard-logs-legacy-enable-api)

### 启用标准日志记录（旧版）（CloudFront 控制台）
<a name="standard-logs-legacy-enable-console"></a>

**为 CloudFront 分配启用标准日志（控制台）**

1. 使用 CloudFront 控制台创建[新分配](distribution-web-creating-console.md)或[更新现有分配](HowToUpdateDistribution.md#HowToUpdateDistributionProcedure)。

1. 对于**标准日志记录**部分的**日志传输**，选择**开启**。

1. （可选）对于 **Cookie 日志记录**，如果您希望在日志中包含 Cookie，请选择**开启**。有关更多信息，请参阅 [Cookie 日志记录](DownloadDistValuesGeneral.md#DownloadDistValuesCookieLogging)。
**提示**  
Cookie 日志记录是一项全局设置，应用到您的分配的*所有*标准日志。您不能为单独的传输目标覆盖此设置。

1. 对于**交付至**部分，指定 **Amazon S3（旧版）**。

1. 指定您的 Amazon S3 存储桶。如果您还没有存储桶，可以选择**创建**，或者查看文档来[创建存储桶](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html)。

1. （可选）对于**日志前缀**，指定您希望 CloudFront 作为此分配的访问日志文件名前缀的字符串（如有），例如 `exampleprefix/`。尾随斜杠 (/) 是可选的，但建议简化浏览您的日志文件。有关更多信息，请参阅 [日志前缀](DownloadDistValuesGeneral.md#DownloadDistValuesLogPrefix)。

1. 完成更新或创建分配的步骤。

1. 在**日志**页面中，验证分配旁边的标准日志状态是否为**已启用**。

   有关标准日志传输和日志字段的更多信息，请参阅[标准日志记录引用](standard-logs-reference.md)。

### 启用标准日志记录（旧版）（CloudFront API）
<a name="standard-logs-legacy-enable-api"></a>

您还可以使用 CloudFront API 来为分配启用标准日志记录。

**为分配启用标准日志（CloudFront API）**
+ 使用 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html) 或 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html) API 操作，配置 [LoggingConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_LoggingConfig.html) 对象。

## 编辑标准日志记录设置
<a name="ChangeSettings"></a>

您可通过使用 [CloudFront 控制台](https://console.aws.amazon.com/cloudfront/v4/home)或 CloudFront API 来启用或禁用日志记录、更改存储日志的 Amazon S3 存储桶以及更改日志文件的前缀。您对日志记录设置的更改将在 12 小时内生效。

有关更多信息，请参阅以下主题：
+ 要使用 CloudFront 控制台更新分配，请参阅[更新分配](HowToUpdateDistribution.md)。
+ 要使用 CloudFront API 更新分配，请参阅 *Amazon CloudFront API 参考*中的 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。

## 将日志发送到 Amazon S3
<a name="standard-logs-in-s3"></a>

当您向 Amazon S3 发送日志时，日志将显示为以下格式。

### 文件名格式
<a name="AccessLogsFileNaming"></a>

CloudFront 保存在您的 Amazon S3 存储桶中的每个日志文件的名称使用以下文件名格式：

`<optional prefix>/<distribution ID>.YYYY-MM-DD-HH.unique-ID.gz`

日期和时间用协调世界时 (UTC) 表示。

例如，如果您使用 `example-prefix` 作为前缀，并且您的分配 ID 为 `EMLARXS9EXAMPLE`，则您的文件名看起来类似于以下内容：

`example-prefix/EMLARXS9EXAMPLE.2019-11-14-20.RT4KCN4SGK9.gz`

当您对分配启用日志记录时，可为文件名指定一个可选前缀，以便您可以跟踪哪些日志文件与哪些分配相关联。如果您包含日志文件前缀的值，并且您的前缀不以正斜杠 (`/`) 结尾，CloudFront 则会自动追加一个。如果您的前缀以正斜杠结尾，则 CloudFront 不会添加另一个斜杠。

文件名末尾的 `.gz` 表示 CloudFront 已使用 gzip 压缩日志文件。

## 标准日志文件格式
<a name="LogFileFormat"></a>

日志文件中的每个条目分别提供有关单个查看器请求的详细信息。日志文件具有以下特征：
+ 使用 [W3C 扩展日志文件格式](https://www.w3.org/TR/WD-logfile.html)。
+ 包含制表符分隔的值。
+ 包含不一定按时间顺序排列的记录。
+ 包含两个标题行：一个具有文件格式版本，另一个列出了包含在每个记录中的 W3C 字段。
+ 包含字段值中的空格和某些其他字符的 URL 编码等效值。

  URL 编码的等效值用于以下字符：
  + ASCII 字符代码 0 到 32（含这两个值）
  + ASCII 字符代码 127 及更大值
  + 下表中的所有字符

  URL 编码标准在 [RFC 1738](https://tools.ietf.org/html/rfc1738.html) 中定义。


|  URL 编码值  |  字符  | 
| --- | --- | 
|  %3C  |  <  | 
|  %3E  |  >  | 
|  %22  |  "  | 
|  %23  |  \$1  | 
|  %25  |  %  | 
|  %7B  |  \$1  | 
|  %7D  |  \$1  | 
|  %7C  |  \$1  | 
|  %5C  |  \$1  | 
|  %5E  |  ^  | 
|  %7E  |  \$1  | 
|  %5B  |  [  | 
|  %5D  |  ]  | 
|  %60  |  `  | 
|  %27  |  '  | 
|  %20  |  空格  | 

## 删除日志文件
<a name="DeletingLogFiles"></a>

CloudFront 不会自动从您的 Amazon S3 存储桶中删除日志文件。有关从 Amazon S3 存储桶中删除日志文件的信息，请参阅《*Amazon Simple Storage Service 控制台用户指南*》中的[删除对象](https://docs.aws.amazon.com/AmazonS3/latest/userguide/DeletingObjects.html)。

## 定价
<a name="AccessLogsCharges"></a>

标准日志记录是 CloudFront 的一个可选功能。对于启用标准日志，CloudFront 不收取任何费用。但是，在 Amazon S3 上存储和访问文件会产生常规的 Amazon S3 费用。不过您可以随时删除这些文件。

有关 Amazon S3 定价的更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

有关 CloudFront 定价的更多信息，请参阅 [CloudFront 定价](https://aws.amazon.com/cloudfront/pricing/)。