View a markdown version of this page

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

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

发送到 Amazon S3 的日志

有关 Amazon CLI 示例,请参阅创建向 Amazon S3 的交付。

用户权限

要启用向 Amazon S3 发送日志,您必须使用以下权限登录。

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "ReadWriteAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:GetDelivery", "logs:GetDeliverySource", "logs:PutDeliveryDestination", "logs:GetDeliveryDestinationPolicy", "logs:DeleteDeliverySource", "logs:PutDeliveryDestinationPolicy", "logs:CreateDelivery", "logs:GetDeliveryDestination", "logs:PutDeliverySource", "logs:DeleteDeliveryDestination", "logs:DeleteDeliveryDestinationPolicy", "logs:DeleteDelivery", "logs:UpdateDeliveryConfiguration" ], "Resource": [ "arn:aws:logs:us-east-1:111122223333:delivery:*", "arn:aws:logs:us-east-1:111122223333:delivery-source:*", "arn:aws:logs:us-east-1:111122223333:delivery-destination:*" ] }, { "Sid": "ListAccessForLogDeliveryActions", "Effect": "Allow", "Action": [ "logs:DescribeDeliveryDestinations", "logs:DescribeDeliverySources", "logs:DescribeDeliveries", "logs:DescribeConfigurationTemplates" ], "Resource": "*" }, { "Sid": "AllowUpdatesToResourcePolicyS3", "Effect": "Allow", "Action": [ "s3:PutBucketPolicy", "s3:GetBucketPolicy" ], "Resource": "arn:aws:s3:::bucket-name" } ] }

Amazon S3 存储桶资源政策

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

JSON
{ "Version":"2012-10-17", "Id": "AWSLogDeliveryWrite20150319", "Statement": [ { "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:delivery-source:*" ] } } } ] }

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

如果存储桶具有资源策略,但该策略不包含上一个策略中所示的语句,并且设置日志记录的用户对存储桶具有 S3:GetBucketPolicy 和 S3: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 存储桶中的数据。您可以使用亚马逊 S3-managed 密钥 (SSE-S3) 或存储在 Amazon Key Management Service (SSE-KMS) 中的 Amazon KMS 密钥。有关更多信息,请参阅使用服务器端加密保护数据。

如果您选择 SSE-S3,则无需进行其他配置。Amazon S3 处理加密密钥。

需要客户管理密钥

如果选择 SSE-KMS,则必须使用客户管理的密钥。你不能使用 Amazon 托管密钥。如果您使用 Amazon 托管密钥配置加密, CloudWatch 日志将以不可读的格式传送日志。

对于 SSE-KMS,在启用存储桶加密时指定密钥的亚马逊资源名称 (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": ["012345678901"] }, "ArnLike": { "aws:SourceArn": ["arn:aws:logs:us-east-1:012345678901:delivery-source:*"] } } }

对于aws:SourceAccount,指定其日志传送到此存储桶的账户 ID。对于aws:SourceArn,请按以下格式指定交付源 ARN:arn:aws:logs:source-region:source-account-id:delivery-source:*。

亚马逊 S3 对象密钥格式

对于使用 V2 权限的交付,Amazon S3 对象密钥由目标前缀、日志类型、交付的后缀路径以及 Hive-compatible 路径是否启用。确切的服务定义路径和支持的后缀变量因日志类型而异。

目的地前缀

调用时附加到存储桶 ARN 的可选路径。 PutDeliveryDestination 例如 arn:aws:s3:::bucket-name/MyLogPrefix。交付的对象以此前缀开头。对于原本使用默认AWSLogs/source-account-id/service-name/路径的日志类型,目标前缀将替换该默认路径。

后缀路径

您可以在其中为单个交付配置的可选路径S3DeliveryConfiguration。后缀可以包含静态文本和变量。要查找日志类型支持的变量,请致电DescribeConfigurationTemplates并检查allowedSuffixPathFields。如果您未指定后缀路径,则在日志类型的默认后缀路径可用时使用该日志类型的默认后缀路径。

Hive-compatible 路径

如果enableHiveCompatiblePath是true,则有效路径中的变量将呈现为key=value。例如,默认账户分段AWSLogs/source-account-id/变为AWSLogs/aws-account-id=source-account-id/。 Hive-compatible 当您省略suffixPath且日志类型使用其默认后缀时,格式也适用。

以下示例显示了账户111122223333中的应用程序负载均衡器访问日志对象密钥的开头。us-east-1除非另有说明,否则这些示例假定没有目的地前缀。

配置 对象键的开头
Hive-compatible 路径禁用,后缀省略 AWSLogs/111122223333/elasticloadbalancing/us-east-1/2026/09/10/
Hive-compatible 路径已启用,后缀省略 AWSLogs/aws-account-id=111122223333/elasticloadbalancing/region=us-east-1/year=2026/month=09/day=10/
Hive-compatible 路径已启用,后缀 myFolder/{yyyy}/{MM}/{dd} AWSLogs/aws-account-id=111122223333/elasticloadbalancing/myFolder/year=2026/month=09/day=10/
目标前缀MyLogPrefix、 Hive-compatible 路径禁用、后缀省略 MyLogPrefix/us-east-1/2026/09/10/
注意

更改目标前缀、后缀路径或 Hive-compatible 设置仅影响新对象。现有对象不会移动。存储桶策略必须允许使用s3:PutObject生成的前缀。当您管理存储桶策略时,请保留 Amazon S3 存储桶策略中显示的aws:SourceAccount和aws:SourceArn条件Amazon S3 存储桶资源政策,并仅授予对所需前缀的访问权限。