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 分钟,不会超过这个时间。
根据 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
{
"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 分钟,不会超过这个时间。