Terraform: настройка ведения журнала от AWS LoadBalancer до S3 bucket - PullRequest
0 голосов
/ 25 июня 2019

У меня есть aws_lb, который я хочу записать в корзину S3.

То, что я безуспешно пытался сделать:

data "aws_elb_service_account" "main" {}

data "aws_iam_policy_document" "bucket_policy" {
  statement {
    sid       = ""
    actions   = ["s3:PutObject"]
    resources = ["arn:aws:s3:::my-bucket/*"]

    principals {
      type        = "AWS"
      identifiers = ["${data.aws_elb_service_account.main.arn}"]
    }
  }
}

Я тоже пробовал это:

resource "aws_iam_role" "lb-logs-role" {
  name = "lb-logs-role"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "elasticloadbalancing.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF

  tags = {
    Name = "lb-logs-role"
    Environment  = terraform.workspace
    Management   = "Managed by Terraform"
  }
}

resource "aws_iam_role_policy" "s3-logs-access" {
  name = "s3-logs-access"
  role = aws_iam_role.lb-logs-role.id

  policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-bucket/*"
    }
  ]
}
EOF
}

Это ошибка, которую я вижу:

Error: Failure configuring LB attributes: InvalidConfigurationRequest: Access Denied for bucket: my-bucket. Please check S3bucket permission
        status code: 400, request id: 5b629210-9738-11e9-bcc6-6f3b4f22bf28

  on modules/tableau-linux/lb.tf line 1, in resource "aws_lb" "main":
   1: resource "aws_lb" "main" {

Есть идеи?

1 Ответ

0 голосов
/ 26 июня 2019

Кажется, проблема в вашей политике, но вы можете попробовать мой код, используя aws_lb. Вот полная конфигурация для запуска на LB в VPC по умолчанию и создания корзины с именем test-bucket-1-unique-name, политики и LB с именем test-http-lb.Вместе с записью SG и Route53, которая комментируется.

# Creating Load Balancer
resource "aws_lb" "httplb" {
  name                       = "test-http-lb"
  internal                   = false
  load_balancer_type         = "application"
  security_groups            = ["${aws_security_group.lbsg.id}"]
  subnets                       = ["subnet-99fdf8e0", "subnet-902b0ddb"]
  enable_deletion_protection = false
  access_logs {
    bucket  = "${aws_s3_bucket.bucket.bucket}"
    prefix  = "http-lb"
    enabled = true
  }
  tags = {
    Environment = "test-http"
  }
}


# Creating Security Groups for Load Balancer
resource "aws_security_group" "lbsg" {
  name        = "test-loadbalancer-sg"
  description = "test-Allow LB traffic"
  tags = {
    Name = "test-SG-Balancer"
  }

  ingress {
    from_port   = 80
    to_port     = 80
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
    description = "HTTP"
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}










#uncomment this if you want to add route53 record
# resource "aws_route53_record" "web" {
#   zone_id = "${data.aws_route53_zone.primary.zone_id}"
#   name    = "${var.env_prefix_name}.ironman.co
#   type    = "A"

#   alias {
#     name                   = "${aws_lb.httplb.dns_name}"
#     zone_id                = "${aws_lb.httplb.zone_id}"
#     evaluate_target_health = true
#   }
# }




data "aws_elb_service_account" "main" {}

# Creating policy on S3, for lb to write
resource "aws_s3_bucket_policy" "lb-bucket-policy" {
  bucket = "${aws_s3_bucket.bucket.id}"

  policy = <<POLICY
{
  "Id": "testPolicy1561031527701",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "testStmt1561031516716",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::test-bucket-1-for-lb-logs/http-lb/*",
      "Principal": {
        "AWS": [
           "${data.aws_elb_service_account.main.arn}"
        ]
      }
    }
  ]
}
POLICY
}

resource "aws_s3_bucket" "bucket" {
  bucket = "test-bucket-1-for-lb-logs"
  acl    = "private"
  region = "us-west-2"

  versioning {
    enabled = false
  }
  force_destroy = true


}

Затем перейдите в корзину S3 и проверьте TestFile.enter image description here Вот журналы от terraform

enter image description here

...