Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
如何将 CloudFront 日志从一个账户发送到另一个账户中的 Amazon S3 存储桶?
我希望我的 Amazon CloudFront 分配将日志从一个 AWS 账户发送到另一个账户中的 Amazon Simple Storage Service (Amazon S3) 存储桶。但是,当我尝试配置跨账户日志记录目标时,我收到了 Access Denied (403) 错误消息。
简短描述
要解决"Access Denied"错误并正确配置跨账户日志记录,您必须授予 CloudFront 将日志写入您的 S3 存储桶的权限。
**重要事项:**如果您在同一个账户中使用 S3 存储桶,则无需设置跨账户日志记录。CloudFront 会自动创建所需的 S3 存储桶策略。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
在以下解决方法中,账户 A 是您的 CloudFront 分配所在的账户。账户 B 是您的 S3 存储桶所在的目标账户。
要设置跨账户日志记录并授予 CloudFront 将日志写入您的 S3 存储桶的权限,请完成以下步骤:
- 在账户 A 中,设置标准日志记录 (v2)。
**注意:**最佳做法是使用标准日志记录 (v2) 而不是传统的标准日志记录 (v1)。 - 在账户 A 中,运行以下 put-delivery-source AWS CLI 命令,使用您的 CloudFront 分配创建交付源:
**注意:**将 DELIVERY_SOURCE_NAME、SOURCE_ACCOUNT_ID、DISTRIBUTION_ID 和 ACCESS_LOGS 替换为您的值。aws logs put-delivery-source \ --name DELIVERY_SOURCE_NAME \ --resource-arn arn:aws:cloudfront::SOURCE_ACCOUNT_ID:distribution/DISTRIBUTION_ID \ --log-type ACCESS_LOGS \ --region us-east-1 - 在账户 B 中,将以下存储桶策略添加到 S3 存储桶,以允许 delivery.logs.amazonaws.com 服务主体上传日志:
**注意:**将 BUCKET_NAME、PREFIX、SOURCE_ACCOUNT_ID 和 DELIVERY_SOURCE_NAME 替换为您的值。{ "Version": "2012-10-17", "Statement": [ { "Sid": "AWSLogsDeliveryWrite", "Effect": "Allow", "Principal": { "Service": "delivery.logs.amazonaws.com" }, "Action": "s3:PutObject", "Resource": "arn:aws:s3:::BUCKET_NAME/PREFIX/*", "Condition": { "StringEquals": { "aws:SourceAccount": "SOURCE_ACCOUNT_ID", "s3:x-amz-acl": "bucket-owner-full-control" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:us-east-1:SOURCE_ACCOUNT_ID:delivery-source:DELIVERY_SOURCE_NAME" } } } ] } - 在账户 B 中,运行以下 put-delivery-destination 命令来创建传输目标:
**注意:**将 DELIVERY_DESTINATION_NAME、BUCKET_NAME 和 PREFIX 替换为您的值。账户 B 会在您的新传输目标中创建传输目标策略。该策略授予账户 A 创建日志传输的权限。aws logs put-delivery-destination \ --name DELIVERY_DESTINATION_NAME \ --delivery-destination-configuration destinationResourceArn=arn:aws:s3:::BUCKET_NAME/PREFIX \ --region us-east-1 - 使用您的首选 JSON 编辑器创建以下目标策略:
**注意:**将 SOURCE_ACCOUNT_ID、DESTINATION_ACCOUNT_ID 和 DELIVERY_DESTINATION_NAME 替换为您的值。{ "Version": "2012-10-17", "Statement": [{ "Sid": "AllowCreateDelivery", "Effect": "Allow", "Principal": { "AWS": "SOURCE_ACCOUNT_ID" }, "Action": [ "logs:CreateDelivery" ], "Resource": "arn:aws:logs:us-east-1:DESTINATION_ACCOUNT_ID:delivery-destination:DELIVERY_DESTINATION_NAME" }] } - 命名策略 destination-policy-s3.json,然后将文件保存到本地计算机。
- 在账户 B 中,运行以下 put-delivery-destination-policy 命令将 destination-policy-s3.json 策略添加到传输目标中:
**注意:**将 DELIVERY_DESTINATION_NAME 替换为您的值。aws logs put-delivery-destination-policy \ --delivery-destination-name DELIVERY_DESTINATION_NAME \ --delivery-destination-policy file://destination-policy-s3.json \ --region us-east-1 - 在账户 A 中,运行以下 create-delivery 命令将账户 A 中的传输源连接到账户 B 中的传输目标:
**注意:**将 DESTINATION_ACCOUNT_ID 和 DELIVERY_DESTINATION_NAME 替换为您的值。aws logs create-delivery \ --delivery-source-name S3-delivery \ --delivery-destination-arn arn:aws:logs:us-east-1:DESTINATION_ACCOUNT_ID:delivery-destination:DELIVERY_DESTINATION_NAME \ --region us-east-1 - 在账户 A 中,对您的 CloudFront 分配执行操作,以验证您的分配是否已将日志传输到账户 B 中的 S3 存储桶。
**注意:**日志可能需要几分钟才能显示在存储桶中。
相关信息
- 语言
- 中文 (简体)
