【问题标题】:CertificateNotfound error when creating LB Listener创建 LB 侦听器时出现 CertificateNotfound 错误
【发布时间】:2018-12-18 15:11:26
【问题描述】:

我在向我的 LB 侦听器添加证书时遇到问题。这是用于执行此操作的代码(注意这是一段 sn-ps 代码):

global/main.tf

  resource "aws_acm_certificate" "demo_cert_east" {
  provider          = "aws.east"
  domain_name       = "*.mydomain.com"
  validation_method = "DNS"

  tags {
    Name        = "demo certificate"
    Environment = "demo"
  }

  lifecycle {
    create_before_destroy = true
  }
}

stage/main.tf

data "aws_acm_certificate" "demo_cert" {
  domain   = "*.mydomain.com"
  statuses = ["ISSUED", "PENDING_VALIDATION"]
}

resource "aws_lb_listener" "wfe_demo_ssl" {
  load_balancer_arn = "${aws_lb.wfe_demo.arn}"
  port              = "443"
  protocol          = "HTTPS"
  ssl_policy        = "ELBSecurityPolicy-2016-08"
  certificate_arn   = "${data.aws_acm_certificate.demo_cert.arn}"

  default_action {
    target_group_arn = "${aws_lb_target_group.wfe_demo.arn}"
    type             = "forward"
  }
}

我已确保这两个资源都位于 aws-east 区域。我收到错误消息:

创建 LB 侦听器时出错:CertificateNotFound:找不到证书“arn:aws:acm:us-east-1:078395932517:certificate/b83ba534-ef9d-4a07-ae13-832695dc8b5a”。

因此数据源正在正确检索证书,但侦听器似乎找不到它。

【问题讨论】:

  • 您为什么要使用数据源以及资源来实际创建它?我也很困惑,如果您在这里使用美国东部 1,为什么您在 aws_acm_certificate 上有 provider = "aws.east" 行?
  • 对不起,我应该澄清一下,这是我的代码的 sn-p,这是相关信息。我在一个文件中定义了资源,以便我可以维护它。然后在另一个目录中我访问创建的证书
  • 证书是否经过验证?您不能将非 ISSUED 证书附加到负载均衡器。您可能应该从数据源中删除 PENDING_VALIDATION 状态。
  • @ydaetskcoR 问题是在尝试时没有颁发证书,希望这对其他人有帮助

标签: amazon-web-services amazon-ec2 terraform


【解决方案1】:

为了能够将 ACM 证书附加到负载均衡器或 Cloudfront 等其他 AWS 资源,必须首先对其进行验证。

如果没有与您的模式匹配的经过验证的证书,则将您的数据源更改为仅查找 ISSUED 证书应该会将错误推送到数据源中:

data "aws_acm_certificate" "demo_cert" {
  domain   = "*.mydomain.com"
  statuses = ["ISSUED"]
}

要验证证书,您可以在请求时手动进行带外处理,使用其他工具自动为您验证,或者在创建 ACM 证书请求时使用 Terraform 的 aws_acm_certificate_validation resource

resource "aws_acm_certificate" "cert" {
  domain_name = "example.com"
  validation_method = "DNS"
}

data "aws_route53_zone" "zone" {
  name = "example.com."
  private_zone = false
}

resource "aws_route53_record" "cert_validation" {
  name = aws_acm_certificate.cert.domain_validation_options.0.resource_record_name
  type = aws_acm_certificate.cert.domain_validation_options.0.resource_record_type
  zone_id = data.aws_route53_zone.zone.id
  records = [aws_acm_certificate.cert.domain_validation_options.0.resource_record_value]
  ttl = 60
}

resource "aws_acm_certificate_validation" "cert" {
  certificate_arn = aws_acm_certificate.cert.arn
  validation_record_fqdns = [aws_route53_record.cert_validation.fqdn]
}

【讨论】:

  • 问题是证书仍在等待中,因此无法使用。希望这可以帮助某人
  • @SamMallabone 验证您的证书需要多长时间?我已经等了一整天了
  • @sokras 这似乎值得一个单独的问题。如果您可以展示您用于验证 ACM 请求的流程,那将很有用。
  • @ydaetskcoR 我正在使用 DNS 验证,我已将所需的记录添加到我们的 dns 数据库中,从昨天开始我一直在等待验证完成。我们拥有根域,在该根域下创建了我需要的域,例如newdomain.rootdomain.com
  • @ydaetskcoR 这是我的错误,我忘记为需要添加到我的 dns 数据库的记录设置domain_id 字段。我正在使用 pdns 4.1.x
【解决方案2】:

因为我刚刚遇到问题:证书和资源必须在同一个区域。 (@ydaetskcoR 已经提到过这一点)。

【讨论】:

    猜你喜欢
    • 2020-08-29
    • 2014-07-07
    • 2018-06-15
    • 2019-10-09
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多