我设置了 Amazon Simple Storage Service (Amazon S3) 服务器访问日志记录。但是,Amazon S3 没有将服务器访问日志传送到 Amazon S3 目标存储桶。
简短描述
当您首次启用服务器访问日志记录或更改日志的目标存储桶时,更改需要一段时间才能实现。在启用日志记录后的第一个小时内,Amazon S3 可能不会记录传输请求。此外,在更改目标存储桶后的第一个小时内,Amazon S3 可能会将日志传送到之前的目标存储桶。
在更改日志记录配置后,请至少等待 1 小时再验证日志。有关详细信息,请参阅最大努力服务器日志传输。
确保源存储桶和目标存储桶位于同一个 AWS 区域,且这些存储桶由同一个 AWS 账户所拥有。此外,如果您为目标存储桶启用了申请方付款,请将其关闭。
**注意:**Amazon S3 仅为通用存储桶提供服务器访问日志记录功能。目录存储桶和 S3 Express One Zone 目录存储桶不支持此功能。
如果您在目标存储桶中仍然看不到日志,请使用以下故障排除方法来解决问题。
解决方法
检查日志传输组是否有权访问目标存储桶
Amazon S3 使用日志传输组将服务器访问日志传送到目标存储桶。要接收服务器访问日志,您必须向日志记录服务主体授予对目标存储桶的访问权限。
要授予对目标存储桶的访问权限,请创建 S3 存储桶策略。您可以使用访问控制列表 (ACL) 来授予对目标存储桶的访问权限。但是,最佳做法是仅在必须单独控制每个对象的访问权限时才使用 ACL。如果必须使用 ACL,请不要将 Object Ownership(对象所有权)设置为 Bucket owner enforced(强制存储桶拥有者)。
通过存储桶策略授予访问权限
更新存储桶策略,以向日志记录服务主体授予 s3:PutObject 权限。
策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "S3ServerAccessLogsPolicy",
"Effect": "Allow",
"Principal": {
"Service": "logging.s3.amazonaws.com"
},
"Action": [
"s3:PutObject"
],
"Resource": "arn:aws:s3:::DOC-EXAMPLE-DESTINATION-BUCKET/EXAMPLE-LOGGING-PREFIX*",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:s3:::DOC-EXAMPLE-SOURCE-BUCKET"
},
"StringEquals": {
"aws:SourceAccount": "SOURCE-ACCOUNT-ID"
}
}
}
]
}
通过存储桶 ACL 授予访问权限
向存储桶 ACL 添加一个授权条目,以向 S3 日志传输组授予写入权限。
要修改目标存储桶的 ACL,请完成以下步骤:
- 打开 Amazon S3 控制台。
- 在导航窗格中,选择 Buckets(存储桶),然后选择目标通用存储桶。
- 选择 Permissions(权限)选项卡。
- 在 Access control list (ACL)(访问控制列表(ACL))部分中,选择 Edit(编辑)。
- 在 S3 log delivery group(S3 日志传输组)下,选择 Objects - Write(对象 - 写入)和 Bucket ACL - Write(存储桶 ACL - 写入)。
- 选择 Save changes(保存更改)。
确认目标存储桶的策略不会拒绝对日志的访问
检查目标存储桶的策略中是否存在包含 "Effect": "Deny" 的语句。如果策略中存在拒绝语句,请确认这些拒绝语句不会阻止对存储桶的写入访问。
注意:最佳做法是使用单独的存储桶来存储服务器访问日志。默认情况下,存储桶是私有的,因此您无需在存储桶策略中使用拒绝语句来防止对存储桶的未经授权访问。
确认您已关闭目标存储桶的 Amazon S3 对象锁定
确保您已关闭目标存储桶的对象锁定。当您启用对象锁定时,Amazon S3 无法传送服务器访问日志。
检查您是否选择了 SSE-S3 作为加密密钥
如果您在目标存储桶上使用默认加密,请确认您已选择使用 Amazon S3 托管式密钥 (SSE-S3) 的服务器端加密来进行加密。服务器日志传输不支持使用 AWS Key Management Service (AWS KMS) 密钥的服务器端加密。要配置默认加密,请参阅配置默认加密。
相关信息
启用 Amazon S3 服务器访问日志记录