答案1
(已更新以供将来参考)
假设您的 CloudFront 分配位于账户 123456789012 中,并且日志记录配置到your-logging-bucket
另一个账户中的存储桶中。
创建一个S3 存储桶策略这授予 CloudFront 账户 123456789012 执行
s3:GetBucketAcl
和s3:PutBucketAcl
的权限your-logging-bucket
。这是必需的桶策略:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" << the CloudFront account }, "Action": [ "s3:GetBucketAcl", "s3:PutBucketAcl" ], "Resource": "arn:aws:s3:::your-logging-bucket" } ] }
接着就,随即S3 存储桶策略在账户 1223456789012 中创建一个新的 CloudFront 分配,并在创建向导启用日志记录
your-logging-bucket
。借助上述存储桶策略,它将为您创建适当的 ACL。c4c1ede66af...8632f77d2d0
您可以通过查看 S3 -> your-logging-bucket -> Permissions -> ACL来检查官方 CloudFront 帐户是否 已被授予访问权限在 123... 帐户中配置所有其他 CF 发行版以登录
your-logging-bucket
- 它现在也适用于所有预先存在的 CF 发行版。
希望有帮助:)
答案2
先前的答案不起作用,因为你们没有为 AWS 日志传送服务的规范 ID 设置访问控制。
CDK 中 TypeScript 的代码片段可创建正确配置的 Org 范围日志存储桶:
const cloudFrontLogAggregatorBucket = new Bucket(this, 'CloudFrontLogs', {
bucketName: props.cloudFrontLogAggregatorBucketName,
accessControl: BucketAccessControl.LOG_DELIVERY_WRITE,
encryption: BucketEncryption.S3_MANAGED,
})
const cloudFrontAclPolicy = new PolicyStatement({
principals: [new StarPrincipal()],
actions: ['s3:GetBucketAcl', 's3:PutBucketAcl'],
resources: [cloudFrontLogAggregatorBucket.bucketArn],
conditions: {
'ForAnyValue:StringLike': { 'aws:PrincipalOrgPaths': 'o-4hvri4xxxx/r-zzzr/*' },
},
})
cloudFrontLogAggregatorBucket.addToResourcePolicy(cloudFrontAclPolicy)
希望它能对某人有所帮助。