1
0

ELB(ALB)のアクセスログをTerraformで有効化する

Posted at

ログ用のS3バケットを作成して、ALBのアクセスログを有効化しようとしたところ、S3の権限不十分でエラーが発生しました。

│ Error: modifying ELBv2 Load Balancer (arn:aws:elasticloadbalancing:ap-northeast-1:************:loadbalancer/app/alb-prod/fbbd3f2304ff9285) attributes: InvalidConfigurationRequest: Access Denied for bucket: logs-prod. Please check S3bucket permission

公式ドキュメントをみたら、普通にバケットポリシーの設定が漏れていました。

以下のTerraformコードでエラーを解消したので、参考になれば幸いです。

S3

バケット名logs-prodとプレフィックスalb/alb-prodを使用します。582318560864は東京リージョンのELBのAWSアカウントIDです。<account-id>を自身のAWSアカウントIDに置き換えて使用してください。

resource "aws_s3_bucket" "logs_prod" {
  bucket = "logs-prod"

  tags = {
    Environment = "prod"
  }
}

resource "aws_s3_bucket_policy" "logs_prod_policy" {
  bucket = aws_s3_bucket.logs_prod.id

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::582318560864:root"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::logs-prod/alb/alb-prod/AWSLogs/<account-id>/*"
    }
  ]
}
POLICY
}

ALB

access_logsブロックを追加して、有効化可否(enabled)、バケット名(bucket)、プレフィックス(prefix)を設定します。

resource "aws_lb" "alb_prod" {
  name                       = "alb-prod"
  internal                   = false
  load_balancer_type         = "application"
  security_groups            = [var.security_group_elb_sg_id]
  subnets                    = [var.subnet_public_1a_id, var.subnet_public_1c_id]
  enable_deletion_protection = true
  preserve_host_header       = true

  access_logs {
    enabled  = true
    bucket  = "logs-prod"
    prefix  = "alb/alb-prod"
  }

  tags = {
    Environment = "prod"
  }
}

この設定を適用することで、ALBからS3バケットへのログの書き込みが正しく行われるようになりました。

1
0
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
1
0