こんにちは、ゲームソリューション部の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有効化が抜けていてエラーになったことを記事にしました。
どなたかの参考になると幸いです。