发送到 Amazon S3 的日志 - Amazon CloudWatch 日志
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

发送到 Amazon S3 的日志

将日志设置为发送到 Amazon S3 时,如果需要,可以 Amazon 创建或更改与接收日志的 S3 存储桶关联的资源策略。

直接发布到 Amazon S3 的日志将发布到您指定的现有存储桶。每 5 分钟将在指定的存储桶中创建一个或多个日志文件。

当您首次将日志发送到 Amazon S3 存储桶时,发送日志的服务会记录存储桶的拥有者,以确保日志仅发送到属于该账户的存储桶。因此,要更改 Amazon S3 存储桶拥有者,您必须在原始服务中重新创建或更新日志订阅。

注意

CloudFront 使用的权限模型与其他向 S3 发送已售日志的服务不同。有关更多信息,请参阅配置标准日志记录和访问日志文件所需的权限

此外,如果您对 CloudFront 访问日志使用相同的 S3 存储桶和另一个日志源,则在存储桶上启用 ACL CloudFront 也会向使用此存储桶的所有其他日志源授予权限。

重要

如果您要将日志发送到 Amazon S3 存储桶,并且存储桶策略包含 NotActionNotPrincipal 元素,则自动向存储桶添加日志传输权限和创建日志订阅将会失败。为了成功创建日志订阅,您需要手动将日志传输权限添加到存储桶策略,然后创建日志订阅。有关更多信息,请参阅本节中的说明。

如果存储桶使用客户托管密 Amazon KMS 钥进行服务器端加密,则您还必须为客户托管密钥添加密钥策略。有关更多信息,请参阅 Amazon S3

如果目标存储桶启用了 SSE-KMS 并启用了存储桶密钥,则附加的客户托管 KMS 密钥策略将不再按预期适用于所有请求。有关更多信息,请参阅使用 Amazon S3 存储桶密钥降低 SSE-KMS 的成本

如果您使用的是带有客户托管 Amazon KMS 密钥的销售日志和 S3 加密,则在配置存储桶时必须使用完全限定的密 Amazon KMS 钥 ARN 而不是密钥 ID。有关更多信息,请参阅 put-bucket-encryption

用户权限

若要能够设置首次将这些类型日志中的任一种日志发送到 Amazon S3,您必须登录具有以下权限的账户。

  • logs:CreateLogDelivery

  • S3:GetBucketPolicy

  • S3:PutBucketPolicy

如果其中任何一种类型的日志已被发送到 Amazon S3 存储桶,要设置将其中另一种日志也发送到同一存储桶,您只需要 logs:CreateLogDelivery 权限。

S3 存储桶资源策略

接收日志的 S3 存储桶必须具有包含特定权限的资源策略。如果存储桶当前没有资源策略,而且设置日志记录的用户对存储桶具有 S3:GetBucketPolicyS3:PutBucketPolicy 权限,那么当您开始将日志发送到 Amazon S3 时, Amazon 会自动为其创建以下策略。

JSON
{ "Version":"2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "Sid": "AWSLogDeliveryAclCheck", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:GetBucketAcl", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": { "StringEquals": { "aws:SourceAccount": [ "0123456789" ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:us-east-1:111122223333:*" ] } } }, { "Sid": "AWSLogDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/AWSLogs/account-ID/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": [ "0123456789" ] }, "ArnLike": { "aws:SourceArn": [ "arn:aws:logs:us-east-1:111122223333:*" ] } } } ] }

在之前的策略中,对于 aws:SourceAccount,请指定将日志传送到此存储桶的账户 ID 列表。对于aws:SourceArn,在表单中指定生成日志的资源列表arn:aws:logs:source-region:source-account-id:*。 ARNs

如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicyS3:PutBucketPolicy 权限,则该语句将附加到存储桶的资源策略中。

注意

在某些情况下, Amazon CloudTrail 如果未授予s3:ListBucket权限,则可能会在中看到AccessDenied错误delivery.logs.amazonaws.com。为避免 CloudTrail日志中出现这些错误,您必须向授予s3:ListBucket权限,delivery.logs.amazonaws.com并且必须包含在前面的存储桶策略中设置的s3:GetBucketAcl权限中显示的Condition参数。为方便起见,可以直接将 AWSLogDeliveryAclCheck 更新为 “Action”: [“s3:GetBucketAcl”, “s3:ListBucket”],而不是创建一个新的 Statement

Amazon S3 存储桶服务器端加密

您可以通过使用 Amazon S3 托管密钥启用服务器端加密 (SSE-S3) 或使用存储在 (SSE-KMS) 中的密钥启用服务器端加密 (SSE-KMS) 来保护 Amazon S3 存储桶中的 Amazon Key Management Service 数据。 Amazon KMS 有关更多信息,请参阅使用服务器端加密保护数据

如果选择 SSE-S3,则不需要额外的配置。Amazon S3 处理加密密钥。

警告

如果您选择 SSE-KMS,则必须使用客户托管密钥,因为这种情况不支持使用 Amazon 托管密钥。如果您使用 Amazon 托管密钥设置加密,则日志将以不可读的格式传送。

当您使用客户托管 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。

如果选择 SSE-KMS,则必须使用客户托管式密钥,因为此场景不支持使用 Amazon 托管式密钥。当您使用客户托管 Amazon KMS 密钥时,您可以在启用存储桶加密时指定客户托管密钥的 Amazon 资源名称 (ARN)。您必须将以下内容添加到客户托管式密钥的密钥策略(不是 S3 存储桶的存储桶策略)中,以便日志传输账户可以写入 S3 存储桶。

{ "Sid": "Allow Logs Delivery to use the key", "Effect": "Allow", "Principal": { "Service": [ "delivery.logs.amazonaws.com" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "aws:SourceAccount": ["0123456789"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:0123456789:*"] } } }

对于 aws:SourceAccount,请指定将日志传送到此存储桶的账户 ID 列表。对于aws:SourceArn,在表单中指定生成日志的资源列表arn:aws:logs:source-region:source-account-id:*。 ARNs