Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

256
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!