De acuerdo con los documentos de AWS aquí y aquí , debería poder automatizar la creación y validación de un certificado utilizando la formación en la nube. Aparentemente, cuando especifica un HostedZoneId en DomainValidationOptions , se supone que debe crear el registro DNS requerido para completar la validación (al menos eso es lo que parece en la documentación muy vaga). Mi plantilla CF para el certificado se ve así:
Resources: MyAPICert: Type: AWS::CertificateManager::Certificate Properties: DomainName: xxxx.dev.mydomain.io DomainValidationOptions: - DomainName: mydomain.io HostedZoneId: /hostedzone/Z03XXXXXXXXXXXX ValidationMethod: DNS'mydomain.io' (cambiado, por supuesto) se registró utilizando AWS como registrador, ya que los documentos dicen que debe ser el caso para que funcione la validación automática.
Esta plantilla anterior se incluye en serverless.yml como recurso. Sin embargo, cuando implemento, la creación de la pila simplemente se atasca esperando el registro DNS, es decir, no agrega la entrada CNAME requerida como entiendo que se supone que debe hacer y, como tal, la pila está atascada.
¿Alguien ha conseguido que funcione esta característica?
Y, sí, sé acerca de los recursos personalizados de terceros que intentan hacer lo mismo, no quiero usarlos si se supone que CF debe hacer esto de forma nativa ahora.
Me encontré con el mismo problema. Debe especificar el nombre de dominio completo, incluido el host, en el parámetro DomainValidationOptions DomainName y simplemente especificar la identificación de la zona alojada:
Resources: MyAPICert: Type: AWS::CertificateManager::Certificate Properties: DomainName: xxxx.dev.mydomain.io DomainValidationOptions: - DomainName: xxxx.dev.mydomain.io HostedZoneId: Z03XXXXXXXXXXXX ValidationMethod: DNSEn mis pruebas, el registro de validación de Route53 se agregó aproximadamente un minuto después de ejecutar la pila, y el dominio se validó con éxito después de aproximadamente 15 minutos.
Si esto está atascado como en progreso durante mucho tiempo, podría ser que esté utilizando una zona alojada privada cuando necesite usar la pública. Probablemente no utilice una CA privada. Ese proceso debería tomar de 2 a 3 minutos, no más que eso.
Acabo de implementar la siguiente plantilla en CloudFormation y creó con éxito los registros DNS de validación y autorizó el certificado.
Si tuviera que pasar los parámetros SiteDnsZoneName=mydomain.io. y SiteDnsZoneId=ABCDEFGHIJKLMNOPQRSTU crearía un certificado SAN que cubre tanto mydomain.io como *.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" } } } }Nota: si desea utilizar un certificado en CloudFront, debe implementar el certificado en us-east-1.
Nota 2: Route53 debe alojar su zona DNS, pero no es necesario que AWS sea el registrador. Su dominio se puede registrar con cualquier proveedor, siempre y cuando utilice los servidores de nombres de AWS proporcionados por Route53 cuando agrega la zona.