背景

ホスティングとして、S3に格納しているファイルをhttpsで配信したいです。そんなとき、CloudFrontを使用します。

で、どんなアクセスがあったかを知るためにアクセスログを取得したいわけですが、CloudFrontもALBと同じようにS3バケットを作成してそこにログを書き出します。

なのですが、ACLのエラーが出るのです。

あるあるっぽいのですが、記録に残します。

事象

以下のようにS3バケット作って、CloudFrontのログ定義に入れます。

resource "aws_s3_bucket" "CloudFront_log" {
  bucket        = local.log_bucket_name
  force_destroy = true
}

resource "aws_cloudfront_distribution" "doc_cfront" {
~~~省略~~~

  logging_config {
    bucket          = aws_s3_bucket.CloudFront_log.bucket_domain_name
    prefix          = "cloudfront-logs/"
    include_cookies = false
  }
~~~省略~~~
}

applyすると、以下のメッセージが出力されます。「CloudFrontのログに指定したS3バケットがACLアクセスを有効にしていない」という意味です。

│ Error: creating CloudFront Distribution: InvalidArgument: The S3 bucket that you specified for CloudFront logs does not enable ACL access: documents-cloud-front-log.s3.amazonaws.com
│ 	status code: 400, request id: 0bf2109e-5795-45d9-8ce5-7f5e95fb1c95
│
│   with aws_cloudfront_distribution._doc_cfront,
│   on main.tf line 69, in resource “aws_cloudfront_distribution” “ars_doc_cfront”:
│   69: resource “aws_cloudfront_distribution” “doc_cfront” {

対処方法

AWS公式をみると、アクセスログを設定してね。とあります。

標準ログ (アクセスログ) の設定および使用 - Amazon CloudFront

publicにするよう必要はないので、privateで設定。

terraformのドキュメントをほぼコピペします。

aws_s3_bucket_acl | Resources | hashicorp/aws | Terraform | Terraform Registry

結果として、以下を追加しました。

resource "aws_s3_bucket_ownership_controls" "CloudFront_log" {
  bucket = aws_s3_bucket.CloudFront_log.id
  rule {
    object_ownership = "BucketOwnerPreferred"
  }
}

resource "aws_s3_bucket_acl" "CloudFront_log" {
  depends_on = [aws_s3_bucket_ownership_controls.CloudFront_log]

  bucket = aws_s3_bucket.CloudFront_log.id
  acl    = "private"
}

s3を確認すると、以下のように出力されているのが確認できます。gzファイルを解凍して確認すると、期待したとおりのログが入ってました。

$ aws --profile xxx s3 ls s3://cloud-front-log/cloudfront-logs/
2024-07-27 21:22:20       3195 ELGI4X5XXXXK.2024-07-27-12.10086366.gz
2024-07-27 21:42:20       2224 ELGI4X5XXXXK.2024-07-27-12.a60f052e.gz
2024-07-27 21:07:20      12400 ELGI4X5XXXXK.2024-07-27-12.ac5df982.gz
2024-07-27 21:47:20       1568 ELGI4X5XXXXK.2024-07-27-12.ca9f6635.gz
2024-07-27 22:27:20        593 ELGI4X5XXXXK.2024-07-27-13.060aeea4.gz
2024-07-27 22:42:21       3509 ELGI4X5XXXXK.2024-07-27-13.20977b26.gz
2024-07-27 22:32:20       3403 ELGI4X5XXXXK.2024-07-27-13.33c2aa9f.gz
2024-07-27 22:22:21       3402 ELGI4X5XXXXK.2024-07-27-13.559055fc.gz
2024-07-27 22:12:21       1590 ELGI4X5XXXXK.2024-07-27-13.60d0d01c.gz
2024-07-27 22:47:21       2044 ELGI4X5XXXXK.2024-07-27-13.9670f633.gz
2024-07-27 22:17:21       5846 ELGI4X5XXXXK.2024-07-27-13.c315ff4e.gz
2024-07-28 06:48:28        599 ELGI4X5XXXXK.2024-07-27-21.2be44196.gz
2024-07-28 06:38:28       1597 ELGI4X5XXXXK.2024-07-27-21.9f14b772.gz
2024-07-28 13:18:29       1667 ELGI4X5XXXXK.2024-07-28-04.2872c2dc.gz