CloudFormation AWS::CertificateManager::Certificate 自动证书验证

CloudFormation AWS::CertificateManager::Certificate automated certificate validation

根据 here and here 的 AWS 文档,我应该能够使用 cloudformation 自动创建证书 和验证 。显然,当您在 DomainValidationOptions 中指定 HostedZoneId 时,它应该创建所需的 DNS 记录以完成验证(至少从非常模糊的文档中看起来是这样)。我的证书 CF 模板如下所示:

Resources:
  MyAPICert:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: xxxx.dev.mydomain.io
      DomainValidationOptions:
        - DomainName: mydomain.io
          HostedZoneId: /hostedzone/Z03XXXXXXXXXXXX
      ValidationMethod: DNS

'mydomain.io'(当然改变了)是使用 AWS 作为注册商注册的,因为文档说必须是这种情况才能使自动验证工作。

上述模板作为资源包含在 serverless.yml 中。但是,当我部署时,堆栈创建只是停留在等待 DNS 记录 - 即它没有添加所需的 CNAME 条目,据我所知,它是 supposed 做的,因此堆栈卡住了。

有人使用过这个功能吗?

而且,是的,我知道尝试做同样事情的第 3 方自定义资源,如果 CF 现在应该本地执行此操作,我不想使用它们。

我刚刚将以下模板部署到 CloudFormation,它成功创建了验证 DNS 记录并授权了证书。

如果您要传递参数 SiteDnsZoneName=mydomain.io.SiteDnsZoneId=ABCDEFGHIJKLMNOPQRSTU,它将创建一个涵盖 mydomain.io*.mydomain.io

的 SAN 证书
{
    "Description": "Deploy wildcard SAN cert inc bare domain. (Must deploy cert to us-east-1 for CloudFront)",
    "Parameters": {
        "SiteDnsZoneName": {
            "Type": "String",
            "MinLength": 4,
            "Description": "DNS Zone",
            "Default": "example.com"
        },
        "SiteDnsZoneId": {
            "Type": "String",
            "MinLength": 8,
            "Description": "DNS Zone Id",
            "Default": "ABCDEFGHIJKLMNOPQRSTU"
        }
    },
    "Resources": {
        "SiteCertificate": {
            "Type": "AWS::CertificateManager::Certificate",
            "Properties": {
                "DomainName": {
                    "Fn::Join": [
                        ".",
                        [
                            "*",
                            {
                                "Ref": "SiteDnsZoneName"
                            }
                        ]
                    ]
                },
                "SubjectAlternativeNames": [
                    {
                        "Ref": "SiteDnsZoneName"
                    }
                ],
                "DomainValidationOptions": [
                    {
                        "DomainName": {
                            "Ref": "SiteDnsZoneName"
                        },
                        "HostedZoneId": {
                            "Ref": "SiteDnsZoneId"
                        }
                    }
                ],
                "ValidationMethod": "DNS"
            }
        }
    }
}

注意:如果您想在 CloudFront 中使用证书,则必须在 us-east-1 中部署证书。

注意 2:Route53 需要托管您的 DNS 区域,但不要求 AWS 成为注册商。您的域可以在任何提供商处注册,只要您在添加区域时使用 Route53 提供的 AWS 名称服务器即可。

我遇到了同样的问题。您需要在 DomainValidationOptions DomainName 参数中指定包含主机的完整域名,并且只需指定托管区域 ID:

Resources:
  MyAPICert:
    Type: AWS::CertificateManager::Certificate
    Properties:
      DomainName: xxxx.dev.mydomain.io
      DomainValidationOptions:
       - DomainName: xxxx.dev.mydomain.io
         HostedZoneId: Z03XXXXXXXXXXXX
      ValidationMethod: DNS

在我的测试中,在 运行 堆栈后大约一分钟添加了 Route53 验证记录,并且域在大约 15 分钟后成功验证了自己。

如果长时间卡在进行中,可能是因为您在需要使用 Public 时使用了私有托管区域。可能您不使用私有 CA。 这个过程应该需要 2-3 分钟,不会超过这个时间。