Как прикрепить сертификат ACM из другого региона (us-east1) к балансировщику нагрузки приложения в другом регионе с помощью terraform

Моя инфраструктура AWS настроена в ap-southeast-1 с использованием terraform, однако я хочу связать свой сертификат ACM, созданный в us-east1, с моим балансировщиком нагрузки, используя ресурс aws_alb_listener.


resource "aws_alb_listener" "https" {
  load_balancer_arn = aws_lb.main.id
  port              = 443
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = var.acm_certificate_arn
  depends_on        = [aws_alb_target_group.main]

  default_action {
    target_group_arn = aws_alb_target_group.main.arn
    type             = "forward"
  }
}

Когда я применяю terraform, возникает ошибка.

Можно ли прикрепить сертификат ACM к alb из другого региона с помощью terraform?

В моем случае этот сертификат также будет использоваться в AWS CloudFront в качестве CDN.


person channa ly    schedule 15.02.2021    source источник
comment
Вам нужно создать сертификат в обоих регионах.   -  person ydaetskcoR    schedule 15.02.2021
comment
CloudFront требует, чтобы сертификат ACM находился в us-east-1 регионе. ALB требует, чтобы сертификат находился в том же регионе, что и ALB. Вам нужно будет создать сертификат ACM в каждом регионе. Поскольку они бесплатны, это не проблема.   -  person Mark B    schedule 15.02.2021


Ответы (2)


Можно ли прикрепить сертификат ACM к alb из другого региона с помощью terraform?

К сожалению, это невозможно. Сертификаты ACM могут использоваться только в тех регионах, где они созданы, не считая глобальных ресурсов, таких как CloudFront.

Для вашего ALB вам необходимо создать новый ACM в регионе ALB и зарегистрировать его в том же домене. Из блога AWS:

Сертификаты ACM необходимо запрашивать или импортировать в том же регионе AWS, что и ваш балансировщик нагрузки. Дистрибутивы Amazon CloudFront должны запрашивать сертификат в регионе Восток США (Северная Вирджиния).

person Marcin    schedule 15.02.2021
comment
Я думаю, что это позволяет добавлять сертификаты из других регионов в ALB с помощью консоли управления AWS. Я не уверен, что это может работать с Cloudfront. - person channa ly; 15.02.2021
comment
@channaly Единственный способ использовать тот же сертификат - получить его от третьей стороны, например. letsencrypt и его импорт в обоих регионах. К сожалению, ALB не разрешает использовать сертификат ACM из другого региона. - person Marcin; 15.02.2021

Вы можете создать еще один сертификат в другом регионе с тем же доменным именем.

Например, если у вас есть aws_acm_certificate с именем default

# Your default certificate in ap-southeast-1
resource "aws_acm_certificate" "default" {
  domain_name       = aws_route53_record.default.fqdn
  validation_method = "DNS"

  lifecycle {
    create_before_destroy = true
  }

  tags = {
    Environment = var.environment
  }
}

Сертификат по умолчанию использует поставщика по умолчанию, поэтому давайте создадим другого поставщика aws с псевдонимом

provider "aws" {
  alias  = "us_east"
  region = "us-east-1"
}

Теперь мы можем создать такой же сертификат в другом регионе, используя этот провайдер.

resource "aws_acm_certificate" "us" {
  domain_name       = aws_route53_record.default.fqdn
  validation_method = "DNS"

  lifecycle {
    create_before_destroy = true
  }

  provider = aws.us_east

  tags = {
    Environment = var.environment
  }
}

Теперь ваш слушатель может использовать этот новый сертификат в us-east-1

resource "aws_alb_listener" "https" {
  load_balancer_arn = aws_lb.main.id
  port              = 443
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = aws_acm_certificate.us.arn
  depends_on        = [aws_alb_target_group.main]

  default_action {
    target_group_arn = aws_alb_target_group.main.arn
    type             = "forward"
  }
}
person Duke    schedule 11.05.2021