Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

257
Visualizações
Problema de permisos de Terraform ELB S3

Tengo un problema al usar Terraform (v0.9.2) al agregar servicios a un ELB (estoy usando: https://github.com/segmentio/stack/blob/master/s3-logs/main.tf ).

Cuando ejecuto terraform apply me sale este error:

 * 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

Mi servicio se ve así:

 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}" }

Mi depósito de s3-logs se ve así:

 module "s3_logs" { source = "github.com/segmentio/stack/s3-logs" name = "${var.prefix}" environment = "${terraform.env}" account_id = "123456789876" }

Revisé S3 y la política del depósito se ve así:

 { "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/*" } ] }

Por lo que puedo ver, ELB debería tener acceso al depósito S3 para almacenar los registros (se está ejecutando en la misma cuenta de AWS).

El cubo y el ELB están todos en eu-west-2 .

Cualquier idea sobre cuál podría ser el problema sería muy apreciada.

about 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Los documentos para los registros de acceso de ELB dicen que desea permitir que una cuenta de Amazon específica pueda escribir en S3, no en su cuenta.

Como tal, quieres algo como:

 { "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" ] } } ] }

En Terraform, puede utilizar la fuente de datos aws_elb_service_account para obtener automáticamente el ID de cuenta utilizado para escribir registros, como se puede ver en el ejemplo de los documentos:

 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" } }
about 4 years ago · Santiago Trujillo Relatório

0

Incluso cuando tenía todo por los documentos, seguía recibiendo el error "Acceso denegado para el depósito". Quitar el cifrado del cubo funcionó para mí.

about 4 years ago · Santiago Trujillo Relatório

0

En la política de depósitos, el número de cuenta NO debe ser el suyo. En cambio, pertenece a AWS y, para cada región, los números de cuenta que debe usar en su política de depósito se enumeran en: https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/enable-access-logs.html #adjuntar-política-de-depósito

Por ejemplo, para la región us-east-1 , el número de cuenta es 127311923021 .

Aunque la pregunta es sobre Terraform, publico un fragmento de CloudFormation que creó un depósito para que el acceso de ELB registre su política de depósito:

 MyAccessLogsBucket: Type: AWS::S3::Bucket DeletionPolicy: Retain MyAllowELBAccessBucketPolicy: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref MyAccessLogsBucket PolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: AWS: "arn:aws:iam::127311923021:root" Action: - "s3:PutObject" Resource: !Sub "arn:aws:s3:::${MyAccessLogsBucket}/AWSLogs/*"

En principio, se usa 127311923021 ya que este es el número de cuenta de AWS que debe usarse para el número de cuenta en us-east-1 .

about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda