为什么我的 Amazon S3 服务器访问日志没有被传输?

上次更新时间:2019 年 11 月 19 日

我启用了 Amazon Simple Storage Service (Amazon S3) 服务器访问日志记录。日志本应该被传输至存储桶,但却没有对存储桶进行填充。我应该如何解决这个问题?

简短描述

请检查以下事项:

  • 日志传输组(传输账户)可以访问目标存储桶。
  • 目标存储桶的存储桶策略不得拒绝访问日志。
  • 不得在目标存储桶上启用 Amazon S3 对象锁定。
  • 如果在目标存储桶上启用默认加密,必须选择 AES256 (SSE-S3) 作为加密密钥。
  • 等待一段时间,以便最近的日志记录配置更改生效。

解决方法

日志传输组可以访问目标存储桶

服务器访问日志会通过名为日志传输组的传输账户被传输到目标存储桶(日志会传输到该存储桶)。要接收服务器访问日志,日志传输组必须有写入目标存储桶的权限。查看目标存储桶的访问控制列表 (ACL) 以验证日志传输组拥有写入权限。

按照以下步骤使用 Amazon S3 控制台对目标存储桶的 ACL 进行检查和修改:

  1. 打开 Amazon S3 控制台
  2. 从存储列表选择服务器访问日志应该发送的目标存储桶。
  3. 选择权限选项卡。
  4. 选择访问控制列表
  5. S3 日志传输组的下方,检查该组是否有写入对象的权限。如果该组没有写入对象的权限,执行下一步操作。
  6. 选择日志传输组
  7. LogDelivery 对话框的访问对象下方,选择写入对象
  8. 选择保存

目标存储桶的存储桶策略不得拒绝访问日志

检查目标存储桶的查看存储桶策略。在存储桶策略中搜索任何包含 “Effect”: “Deny” 的语句。然后,验证拒绝语句不会阻止访问日志被写入存储桶。

最好的做法是,为服务器访问日志使用单独的存储桶。在默认情况下,S3 存储桶为私有,因此您无需在存储桶策略中使用拒绝语句来杜绝对该存储桶的未授权访问。如果 AWS Identity and Access Management (IAM) 用户或角色和存储桶不在相同的 AWS 账户内,而且 IAM 身份对其 IAM 策略内的存储桶有相关的权限,则该用户或角色可以访问存储桶。

不得在目标存储桶上启用 Amazon S3 对象锁定

检查目标存储桶是否已启用对象锁定。对象锁定会阻止服务器访问日志的传输,因此您必须在想要发送日志的目标存储桶上禁用对象锁定。

如果在目标存储桶上启用默认加密,必须选择 AES256 (SSE-S3)

如果您在目标存储桶上使用默认加密,确认选择 AES-256 (SSE-S3) 作为加密密钥。不支持使用 AWS-KMS (SSE-KMS) 进行加密。如需关于如何通过 Amazon S3 控制台配置默认加密的说明,见如何为 Amazon S3 存储桶启用默认加密?

等待一段时间,以便最近的日志记录配置更改生效

第一次启用服务器访问日志记录,或者更改日志的目标存储桶可能需要点时间才能完全实现。在您启用日志记录后的一个小时内,部分请求可能不会被记录。在您更改目标存储桶后的一个小时内,部分日志可能依然会被传输至上一个存储桶。在您更改日志记录配置以后,确保等待一个小时左右再对日志进行验证。如需更多信息,见最大努力服务器日志传输


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助吗?