cloudfrontでコンテンツ配信をする際、Terraformであれば次のようにlogging_config
を指定することでアクセスログを残すことができる。
resource "aws_cloudfront_distribution" "example" { ... logging_config { bucket = aws_s3_bucket.cloudfront_log.bucket_domain_name prefix = "log/" } ... } resource "aws_s3_bucket" "cloudfront_log" { bucket = "cloudfront-log" versioning { enabled = true } }
ただし、このままではバケットにログが送信されて来なかった。
原因はアクセス権限不足。ドキュメントにある通り、awslogsdelivery
アカウントのACLアクセス許可が必要だった。
ログバケットでは次のように指定する。
resource "aws_s3_bucket" "cloudfront_log" { bucket = "cloudfront-log" versioning { enabled = true } grant { // awslogsdeliveryのアカウントID // https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/AccessLogs.html id = "c4c1ede66af53448b93c283ce9448c4ba468c9432aa01d700d3878632f77d2d0" permissions = [ "FULL_CONTROL", ] type = "CanonicalUser" } }