TerraformでALBのログをS3に指定したら権限エラーになったので対応等記録しておきます。
エラーメッセージ
Error: Failure configuring LB attributes: InvalidConfigurationRequest: Access Denied for bucket: hoge-xxx-log. Please check S3bucket permission
status code: 400, request id: xxx
対応
S3の権限は他と比べると特殊な点があります。
アカウントがS3にアクセスするポリシーは、他のリソース同様でIAMに設定しますが、S3にはバケット毎のバケットポリシーがあります。
このバケットポリシーにALBからのアクセスを許可しておく必要があります。
バケットポリシー参考
arn:aws:s3:::my-loadbalancer-logs/my-app/AWSLogs/123456789012/*
このAWSLogsというところは固定の為、全部小文字や大文字に出来ません。今回全部小文字にした事によるエラーだったようです。
TerraformによるALB
https://www.terraform.io/docs/providers/aws/r/lb.html
resource "aws_lb" "test" {
name = "test-lb-tf"
internal = false
load_balancer_type = "application"
security_groups = ["${aws_security_group.lb_sg.id}"]
subnets = ["${aws_subnet.public.*.id}"]
enable_deletion_protection = true
access_logs {
bucket = "${aws_s3_bucket.lb_logs.bucket}"
prefix = "test-lb"
enabled = true
}
tags = {
Environment = "production"
}
}

