TerraformでCloudFrontを構築時に、S3ログ出力設定でACL有効化が抜けていてエラーになったこと

2023.12.06

こんにちは、ゲームソリューション部のsoraです。
今回は、TerraformでCloudFrontを構築時に、S3ログ出力設定でACL有効化が抜けていてエラーになったことについて書いていきます。

発生したエラー

TerraformでCloudFrontのログをS3に出力するように設定しようとしたときに以下エラーが出ました。

Error: creating CloudFront Distribution: InvalidArgument: The S3 bucket that you specified for CloudFront logs does not enable ACL access: …
│       status code: 400, request id: …

S3バケットポリシーにてCloudFrontからのアクセスを許可していましたが、権限が足りてないっぽいです。

CloudFrontのS3へのログ出力

調べてみると、説明されているブログがありました。

CloudFrotnのログについては、アクセス制御はACLで行いACLの有効化が必要なため、Terraformのコードを修正していきます。

# バケット作成
resource aws_s3_bucket logs {
    bucket = "cf-logs-xxxxxxxx"
}
### 以下追加箇所 ###
# バケットポリシーではなく、ACLにて制御する
# オブジェクト所有者の設定
resource aws_s3_bucket_ownership_controls logs {
    bucket = aws_s3_bucket.logs.id
    rule {
        object_ownership = "BucketOwnerPreferred"
    }
}
# ACLを設定
resource aws_s3_bucket_acl logs {
    bucket = aws_s3_bucket.logs.id
    acl    = "private"
    depends_on = [ aws_s3_bucket_ownership_controls.logs ]
}

上記の設定を入れることで、CloudFrontのログをS3に出力できました。

最後に

今回は、TerraformでCloudFrontを構築時に、S3ログ出力設定でACL有効化が抜けていてエラーになったことを記事にしました。
どなたかの参考になると幸いです。