配置标准日志记录(旧版)
备注
-
本主题适用于标准日志记录的之前版本。有关最新版本,请参阅配置标准日志记录(v2)。
-
如果您已经启用了标准日志记录(旧版),并且想要启用在 Amazon S3 中进行标准日志记录(v2),我们建议您指定不同的 Amazon S3 存储桶,或在同一存储桶中使用单独的路径(例如,使用日志前缀或分区)。这可以帮助您跟踪哪些日志文件与哪个分配相关联,并防止日志文件相互覆盖。
要开始使用标准日志记录(旧版),请完成以下步骤:
-
选择用于接收您的日志的 Amazon S3 存储桶,并添加所需的权限。
-
使用 CloudFront 控制台或 CloudFront API 配置标准日志记录(旧版)。您只能选择 Amazon S3 存储桶来接收日志。
-
查看您的访问日志。
为标准日志选择 Amazon S3 存储桶
当您对分配启用日志记录时,需要指定您希望 CloudFront 将日志文件存储到其中的 Amazon S3 存储桶。如果您使用 Amazon S3 作为源,建议您对日志文件使用单独的存储桶。
指定您希望 CloudFront 用于存储访问日志的 Amazon S3 存储桶,例如 amzn-s3-demo-bucket.s3.amazonaws.com
。
可将多个分配的日志文件存储在同一存储桶中。当您启用日志记录时,可为文件名指定一个可选前缀,以便您可以跟踪哪些日志文件与哪些分配相关联。
关于选择 S3 存储桶
-
您的存储桶必须启用访问控制列表 (ACL)。如果从 CloudFront 控制台选择了未启用 ACL 的存储桶,则会出现一条错误消息。请参阅 权限。
-
不要选择 S3 对象所有权设置为强制桶拥有者的 Amazon S3 存储桶。该设置对存储桶以及其中的对象禁用 ACL,这会阻止 CloudFront 将日志文件传输到存储桶。
请勿选择以下 Amazon Web Services 区域中的 Amazon S3 存储桶。CloudFront 不会向这些区域中的存储桶提供标准日志:
-
非洲(开普敦)
-
亚太地区(香港)
-
亚太地区(海得拉巴)
-
亚太地区(雅加达)
-
亚太地区(墨尔本)
-
加拿大西部(卡尔加里)
-
欧洲地区(米兰)
-
欧洲(西班牙)
-
欧洲(苏黎世)
-
以色列(特拉维夫)
-
中东(巴林)
-
中东(阿联酋)
-
权限
重要
从 2023 年 4 月开始,您必须为用于 CloudFront 标准日志的新 S3 存储桶启用 S3 ACL。您可以在创建存储桶时启用 ACL,也可以为现有存储桶启用 ACL。
有关这些更改的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的新 S3 桶的原定设置常见问题解答和《Amazon 新闻博客》中的提醒:Amazon S3 安全更改将于 2023 年 4 月发布
您的 Amazon Web Services 账户必须对您为日志文件指定的存储桶拥有以下权限:
-
存储桶的 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 中对您的分配禁用日志记录,然后再次启用它。有关更多信息,请参阅 标准日志记录。
-
通过在 Amazon S3 控制台中导航到 S3 存储桶并添加权限,手动为
awslogsdelivery
添加 ACL 权限。要为awslogsdelivery
添加 ACL,您必须提供账户的规范 ID,如下所示:a52cb28745c0c06e84ec548334e44bfa7fc2a85c54af20cd59e4969344b7af56
有关将 ACL 添加到 S3 存储桶的更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的配置 ACL。
-
- 每个日志文件的 ACL
-
除了存储桶上的 ACL 之外,每个日志文件上还有一个 ACL。存储桶拥有者对每个日志文件均具有
FULL_CONTROL
权限,分配所有者(如果与存储桶拥有者不同)没有权限,而awslogsdelivery
账户具有读取和写入权限。 - 禁用日志记录
-
如果您禁用日志记录,则 CloudFront 并不会删除存储桶或日志文件的 ACL。如果需要,您可以删除 ACL。
SSE-KMS 存储桶的必需密钥策略
如果标准日志的 S3 存储桶通过客户自主管理型密钥使用具有 Amazon KMS keys的服务器端加密(SSE-KMS),您必须向客户自主管理型密钥的密钥策略添加以下语句。这样一来,CloudFront 可以将日志文件写入存储桶中。您无法将 SSE-KMS 与 Amazon 托管式密钥结合使用,因为 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 存储桶密钥结合使用,您还需要将 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 用户指南》中的借助 Amazon KMS keys(SSE-KMS)指定服务器端加密。
启用标准日志记录(旧版)
要启用标准日志记录,您可以使用 CloudFront 控制台或 CloudFront API。
启用标准日志记录(旧版)(CloudFront 控制台)
为 CloudFront 分配启用标准日志(控制台)
-
对于标准日志记录部分的日志传输,选择开启。
-
(可选)对于 Cookie 日志记录,如果您希望在日志中包含 Cookie,请选择开启。有关更多信息,请参阅 Cookie 日志记录。
提示
Cookie 日志记录是一项全局设置,应用到您的分配的所有标准日志。您不能为单独的传输目标覆盖此设置。
-
对于交付至部分,指定 Amazon S3(旧版)。
-
指定您的 Amazon S3 存储桶。如果您还没有存储桶,可以选择创建,或者查看文档来创建存储桶。
-
(可选)对于日志前缀,指定您希望 CloudFront 作为此分配的访问日志文件名前缀的字符串(如有),例如
exampleprefix/
。尾随斜杠 (/) 是可选的,但建议简化浏览您的日志文件。有关更多信息,请参阅 日志前缀。 -
完成更新或创建分配的步骤。
-
在日志页面中,验证分配旁边的标准日志状态是否为已启用。
有关标准日志传输和日志字段的更多信息,请参阅标准日志记录引用。
启用标准日志记录(旧版)(CloudFront API)
您还可以使用 CloudFront API 来为分配启用标准日志记录。
为分配启用标准日志(CloudFront API)
-
使用 CreateDistribution 或 UpdateDistribution API 操作,配置 LoggingConfig 对象。
编辑标准日志记录设置
您可通过使用 CloudFront 控制台
有关更多信息,请参阅以下主题:
-
要使用 CloudFront 控制台更新分配,请参阅更新分配。
-
要使用 CloudFront API 更新分配,请参阅 Amazon CloudFront API 参考中的 UpdateDistribution。
将日志发送到 Amazon S3
当您向 Amazon S3 发送日志时,日志将显示为以下格式。
文件名格式
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 压缩日志文件。
标准日志文件格式
日志文件中的每个条目分别提供有关单个查看器请求的详细信息。日志文件具有以下特征:
-
使用 W3C 扩展日志文件格式
。 -
包含制表符分隔的值。
-
包含不一定按时间顺序排列的记录。
-
包含两个标题行:一个具有文件格式版本,另一个列出了包含在每个记录中的 W3C 字段。
-
包含字段值中的空格和某些其他字符的 URL 编码等效值。
URL 编码的等效值用于以下字符:
-
ASCII 字符代码 0 到 32(含这两个值)
-
ASCII 字符代码 127 及更大值
-
下表中的所有字符
URL 编码标准在 RFC 1738
中定义。 -
URL 编码值 |
字符 |
---|---|
%3C |
< |
%3E |
> |
%22 |
" |
%23 |
# |
%25 |
% |
%7B |
{ |
%7D |
} |
%7C |
| |
%5C |
\ |
%5E |
^ |
%7E |
~ |
%5B |
[ |
%5D |
] |
%60 |
` |
%27 |
' |
%20 |
空格 |
删除日志文件
CloudFront 不会自动从您的 Amazon S3 存储桶中删除日志文件。有关从 Amazon S3 存储桶中删除日志文件的信息,请参阅《Amazon Simple Storage Service 控制台用户指南》中的删除对象。
定价
标准日志记录是 CloudFront 的一个可选功能。对于启用标准日志,CloudFront 不收取任何费用。但是,在 Amazon S3 上存储和访问文件会产生常规的 Amazon S3 费用。不过您可以随时删除这些文件。
有关 Amazon S3 定价的更多信息,请参阅 Amazon S3 定价
有关 CloudFront 定价的更多信息,请参阅 CloudFront 定价