LoginSignup
5
1

More than 1 year has passed since last update.

【Terraform】ALBアクセスログ用S3バケットポリシー

Last updated at Posted at 2021-07-18

はじめに

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編もお楽しみに。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1