如何指定 AWS CloudFront 访问日志保留多长时间?

How to specify how long AWS CloudFront Access Logs are kept?

我们正在使用 AWS CDK(AWS 云开发工具包)来创建我们的 Cloudfront Distribution。我们正在创建启用访问日志记录的 CloudFront 分发并指定 Amazon S3 存储桶来存储访问日志。

访问日志默认保存多长时间?如何指定它们保存多长时间? 我感觉它与管理日志的存储生命周期有关。

我看过的一部分文档(虽然我可能漏掉了一些东西):

另请参阅 https://docs.aws.amazon.com/AmazonS3/latest/userguide/delete-objects.html,其中显示“您可以设置生命周期规则以自动删除日志文件等对象。”

        var staticContentCFDistribution = new cloudfront.Distribution(this, `IDSTRINGWASHERE`, {
            defaultBehavior: { 
                origin: new S3Origin(staticContentBucket),
                cachePolicy: CachePolicy.CACHING_OPTIMIZED,
                allowedMethods: AllowedMethods.ALLOW_GET_HEAD,
                cachedMethods: AllowedMethods.ALLOW_GET_HEAD,
                viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
                compress: true
            },
            domainNames: [ domainName ],
            comment: `CHANGEDTHISFORTHISPOST`,
            enableLogging: true,
            logBucket: logBucket,
            webAclId: webAclId,
<CLIP>

我用谷歌搜索了许多不同的东西,例如:

我将 运行 保留在 CloudWatch 文档中,而不是 CloudFront 访问日志文档中,我可以在其中指定保留访问日志的时间。

日志的生命周期是 S3 的 属性,而不是 CloudFront。因此,如果您将访问日志存储在 s3 中,则可以按照 Managing your storage lifecycle.

中的说明在 S3 中设置它们的生命周期

同理还有retention rules for CloudWatch Logs.

在这两种情况下,这些设置都与 cloudfront.Distribution 无关。它们是 S3 和 CloudWatch 的属性。

默认情况下,日志将无限期地保存在 S3 中,或者按照您的建议,可以使用生命周期规则进行管理。

在下面的示例中,您可以创建一个 S3 存储桶并将其用作 CloudFront 分配的一部分(或导入现有存储桶),然后在 30 天后自动删除日志。您可能希望在删除之前将文件向下移动到可用的 S3 存储层,但这是个人偏好。

const logBucket = new s3.Bucket(this, `${id}-log-bucket`)

logBucket.addLifecycleRule({
  enabled: true,
  expiration: Duration.days(30),
  id: 'rule',
});

new cloudfront.Distribution(this, `${id}-cf-distribution`, {
  logBucket,
  …
  etc
})