amazon-web-services - Terraform ELB S3 权限问题

标签 amazon-web-services amazon-s3 terraform elastic-load-balancer

我在使用 Terraform (v0.9.2) 向 ELB 添加服务时遇到问题(我正在使用:https://github.com/segmentio/stack/blob/master/s3-logs/main.tf)。

当我运行 terraform apply 时,我收到此错误:

* module.solr.module.elb.aws_elb.main: 1 error(s) occurred:

* aws_elb.main: Failure configuring ELB attributes: 
    InvalidConfigurationRequest: Access Denied for bucket: my-service-
    logs. Please check S3bucket permission
    status code: 409, request id: xxxxxxxxxx-xxxx-xxxx-xxxxxxxxx

我的服务如下所示:
module "solr" {
  source = "github.com/segmentio/stack/service"
  name = "${var.prefix}-${terraform.env}-solr"
  environment = "${terraform.env}"
  image = "123456789876.dkr.ecr.eu-west-2.amazonaws.com/my-docker-image"
  subnet_ids = "${element(split(",", module.vpc_subnets.private_subnets_id), 3)}"
  security_groups = "${module.security.apache_solr_group}"
  port = "8983"
  cluster = "${module.ecs-cluster.name}"
  log_bucket = "${module.s3_logs.id}"

  iam_role = "${aws_iam_instance_profile.ecs.id}"
  dns_name = ""
  zone_id = "${var.route53_zone_id}"
}

我的 s3-logs 存储桶如下所示:
module "s3_logs" {
  source = "github.com/segmentio/stack/s3-logs"
  name = "${var.prefix}"
  environment = "${terraform.env}"
  account_id = "123456789876"
}

我 checkin 了 S3,存储桶策略如下所示:
{
  "Version": "2012-10-17",
  "Id": "log-bucket-policy",
  "Statement": [
  {
  "Sid": "log-bucket-policy",
  "Effect": "Allow",
  "Principal": {
  "AWS": "arn:aws:iam::123456789876:root"
  },
  "Action": "s3:PutObject",
  "Resource": "arn:aws:s3:::my-service-logs/*"
  }
  ]
}

据我所知,ELB 应该可以访问 S3 存储桶来存储日志(它在同一个 AWS 账户中运行)。

桶和 ELB 都在 eu-west-2 中。

任何关于问题可能是什么的想法都将不胜感激。

最佳答案

ELB 访问日志的 docs 表示您希望允许特定的 Amazon 帐户能够写入 S3,而不是您的帐户。

因此,您想要类似的东西:

{
  "Id": "Policy1429136655940",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1429136633762",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-loadbalancer-logs/my-app/AWSLogs/123456789012/*",
      "Principal": {
        "AWS": [
          "652711504416"
        ]
      }
    }
  ]
}

在 Terraform 中,您可以使用 aws_elb_service_account data source 自动获取用于写入日志的帐户 ID,如文档中的示例所示:
data "aws_elb_service_account" "main" {}

resource "aws_s3_bucket" "elb_logs" {
  bucket = "my-elb-tf-test-bucket"
  acl    = "private"

  policy = <<POLICY
{
  "Id": "Policy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::my-elb-tf-test-bucket/AWSLogs/*",
      "Principal": {
        "AWS": [
          "${data.aws_elb_service_account.main.arn}"
        ]
      }
    }
  ]
}
POLICY
}

resource "aws_elb" "bar" {
  name               = "my-foobar-terraform-elb"
  availability_zones = ["us-west-2a"]

  access_logs {
    bucket   = "${aws_s3_bucket.elb_logs.bucket}"
    interval = 5
  }

  listener {
    instance_port     = 8000
    instance_protocol = "http"
    lb_port           = 80
    lb_protocol       = "http"
  }
}

关于amazon-web-services - Terraform ELB S3 权限问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43366038/

相关文章:

amazon-web-services - AWS Fargate 503 服务暂时不可用

amazon-web-services - 适用于 5 个用户的 Amazon AWS EC2 或 WorkSpaces?

javascript - TypeError AWS.KinesisVideo 不是构造函数

amazon-web-services - 与 Redshift 一起使用时,将数据存储在 DynamoDB 中与 S3 中相比有何优势?

Python-无法将文件上传到AWS S3存储桶中定义的文件夹

amazon-web-services - 如何使用 spinnaker 实现 AWS 自动缩放策略?

java - s3 上的文件上传失败,出现 com.amazonaws.AmazonClientException 异常

azure - 授予对另一个 Azure 租户中的服务主体的访问权限

Terraform:代码 ="LinkedInvalidPropertyId"消息 ="Property id ' ' 在路径 'properties.hostingEnvironmentProfile.id' 处无效

azure - Terraform代码如何将本地计算机下载的war文件部署到Azure应用程序服务上