はじめに
TerraformでALBバケットポリシー書きたくなった人用の**記載例(もちろん他にも方法はあります)**です。
参考:【AWS公式】Application Load Balancer のアクセスログ
コード部分
s3.tf
resource "aws_s3_bucket_policy" "alb_log" {
# 対象バケットを指定
bucket = aws_s3_bucket.alb_log.id
policy = data.aws_iam_policy_document.alb_log.json
}
data "aws_iam_policy_document" "alb_log" {
statement {
effect = "Allow"
principals {
type = "AWS"
# 指定先に注意
identifiers = ["arn:aws:iam::582318560864:root"]
}
actions = ["s3:PutObject"]
# 対象バケットを指定
resources = ["${aws_s3_bucket.alb_log.arn}/*"]
}
statement {
effect = "Allow"
principals {
type = "Service"
identifiers = ["delivery.logs.amazonaws.com"]
}
actions = ["s3:PutObject"]
# 対象バケットを指定
resources = ["${aws_s3_bucket.alb_log.arn}/*"]
condition {
test = "StringEquals"
variable = "s3:x-amz-acl"
values = ["bucket-owner-full-control"]
}
}
statement {
effect = "Allow"
principals {
type = "Service"
identifiers = ["delivery.logs.amazonaws.com"]
}
actions = ["s3:GetBucketAcl"]
# 対象バケットを指定
resources = [aws_s3_bucket.alb_log.arn]
}
}
注意事項
コード部分の「"arn:aws:iam::582318560864:root"」について解説します。
ALBアクセスログ保管用バケットでは、AWSが管理する特定のアカウントからの"s3:PutObject"を許可する必要があります。
また、リージョンごとに許可するアカウントIDがことなり、場合によって改修してください。(TerraformでMapのLocal,Varableを参照でもいい気がしますがお任せします。)
今回の、「582318560864」は東京リージョンに配置した、ALBを想定して書きました。
アカウントIDについては以下参考の、リスト「Elastic Load Balancing アカウント ID」を参照しました。
参考:【AWS公式】Application Load Balancer のアクセスログ
NLB編もお楽しみに。