Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Domain authorization: la vía rápida para provisionar certificados gestionados en Google Cloud

By Chimbu ChinnaduraiJul 28, 20236 min read

Esta página también está disponible en English, Deutsch, Français, Italiano, 日本語 y Português.

domain authorization provision managed certificates DoiT

En el entorno digital actual, garantizar la seguridad y la privacidad de las comunicaciones en línea es esencial. Los certificados SSL cumplen un rol clave: establecen conexiones seguras, protegen datos sensibles y generan confianza entre los usuarios y los sitios web.

Al configurar certificados SSL en Google Cloud Platform (GCP) para load balancers, verificar la propiedad del dominio es un paso fundamental. Tradicionalmente, la autorización basada en load balancer ha sido el método preferido. Consiste en montar un certificado SSL gestionado por Google en un load balancer y asociar el dominio a la IP del load balancer mediante un registro A.

Configurar certificados SSL gestionados con autorización basada en load balancer puede ser lento y propenso a errores. Por un lado, hay que completar todos los pasos de configuración antes de provisionar el certificado TLS (SSL), lo que genera demoras si se cometen errores o se omite alguno. Por otro lado, la propagación global de registros DNS puede tardar hasta 48 horas. Esto deja una ventana habitual de 10 a 15 minutos en la que el dominio del certificado SSL queda inaccesible. Por eso, este enfoque conviene más para configurar entornos nuevos sin tráfico de producción.

Para superar estos retos y tener listos los certificados gestionados por Google antes que el load balancer —o antes de migrar a Google Cloud desde otro proveedor—, Domain authorization ofrece una alternativa. Con Domain authorization se configuran registros DNS dedicados adicionales para verificar la propiedad del dominio. Así se pueden provisionar los certificados con anticipación, incluso antes de que el target proxy esté listo para recibir tráfico de red. El resultado: migraciones sin downtime desde soluciones de terceros hacia Google Cloud, con una transición mucho más fluida.

Consulta la siguiente tabla con las diferencias entre Load balancer authorization y Domain authorization.

domain-authorization-doit

En este artículo te mostramos cómo configurar Domain authorization y crear nuevos certificados en el certificate manager usando Domain authorization.

Requisitos previos

  • Una zona DNS pública en Cloud DNS

Domain authorization también funciona con otros proveedores de DNS y la .

  • API de Certificate manager habilitada en el proyecto de GCP.
  • gcloud CLI.

Para este artículo uso la zona pública chimbuc.dns.doit-playground.com en Cloud DNS.

domain-authorization-gcp

Configurar DNS authorization

  • Define las variables de entorno necesarias.
export PROJECT_ID="your-project-id"
export REGION="your-region" # ex: us-central1
export DOMAIN_NAME="domain-name-for-the-certificate" # ex: example.chimbuc.dns.doit-playground.com
export DOMAIN_AUTHORIZATION_NAME="dns-authorization-resource-name" # ex: dns-authorization-example
export CLOUD_DNS_ZONE_NAME="your-cloud-dns-zone" # ex: chimbuc.dns.doit-playground.com.
export CERTIFICATE_NAME="certificate-manager-cert-name" # ex: example-chimbuc-dns-doit-playground-com
export CERTIFICATE_MAP_NAME="certificate-map-name" # ex: example-dns-authorization-cert-map
export CERTIFICATE_MAP_ENTRY_NAME="certificate-map-entry" # ex: example-dns-authorization-cert-map-entry
  • Crea una DNS authorization para tu dominio. Como cada DNS authorization cubre un solo hostname, debes crear una por cada hostname que quieras usar con el certificado de destino.

Si vas a crear una DNS authorization para un certificado wildcard, como *.example.com , configúrala para el dominio padre (por ejemplo, example.com ).

gcloud certificate-manager dns-authorizations create $DOMAIN_AUTHORIZATION_NAME \
--domain="${DOMAIN_NAME}" \
--project $PROJECT_ID

provision-certificates

DNS authorization para example.chimbuc.dns.doit-playground.com

gcloud certificate-manager dns-authorizations describe $DOMAIN_AUTHORIZATION_NAME \
--project $PROJECT_ID

provision

Detalles de la DNS authorization para example.chimbuc.dns.doit-playground.com

  • Agrega el registro CNAME a tu configuración de DNS. Si usas Google Cloud para gestionar tu DNS, sigue los pasos de esta sección. Si no, consulta la documentación de tu proveedor de DNS de terceros.
#Initiate the DNS record transaction
gcloud dns record-sets transaction start --zone="${CLOUD_DNS_ZONE_NAME}" \
--project $PROJECT_ID
#Add the CNAME record to the target DNS zone
gcloud dns record-sets transaction add CNAME_RECORD_DATA \
--name="_acme-challenge.${DOMAIN_NAME}." \
--ttl="30" \
--type="CNAME" \
--zone="${CLOUD_DNS_ZONE_NAME}" \
--project $PROJECT_ID
#Execute the DNS record transaction to save your changes
gcloud dns record-sets transaction execute --zone="${CLOUD_DNS_ZONE_NAME}" \
--project $PROJECT_ID

managed-certificates

Configuración de DNS

Crear un certificado gestionado por Google con DNS authorization

  • Crea el certificado para el dominio configurado con DNS authorization. Los certificados gestionados por Google solo se pueden crear en la ubicación global.
gcloud certificate-manager certificates create $CERTIFICATE_NAME \
--domains="${DOMAIN_NAME}" \
--dns-authorizations="${DOMAIN_AUTHORIZATION_NAME}" \
--project $PROJECT_ID

gcp-managed-certificates

managed

Espera unos minutos a que se provisione el certificado. Cuando termine, el estado pasará a activo. Si permanece en Pending por mucho tiempo, haz clic en el nombre del certificado para ver los motivos del fallo.

  • Verifica el estado del certificado.
gcloud certificate-manager certificates describe $CERTIFICATE_NAME --project $PROJECT_ID

google-managed-certificate

Para desplegar el certificado generado en un load balancer, hay que crear un certificate map que haga referencia a una o más entradas de certificate map, que asignan certificados específicos a hostnames específicos. Consulta How Certificate Manager Works para más detalles.

  • Crea un certificate map.
gcloud certificate-manager maps create $CERTIFICATE_MAP_NAME --project $PROJECT_ID

gcloud-compute-instance-groups-managed-create

Certificate Map

  • Crea una entrada de certificate map para el dominio.
gcloud certificate-manager maps entries create $CERTIFICATE_MAP_ENTRY_NAME \
--map="${CERTIFICATE_MAP_NAME}" \
--certificates="${CERTIFICATE_NAME}" \
--hostname="${DOMAIN_NAME}" \
--project $PROJECT_ID

gcp-load-balancer

Entrada de Certificate Map

Espera unos minutos a que se provisione la entrada de certificate map y a que el estado pase a activo.

gcloud certificate-manager maps entries describe $CERTIFICATE_MAP_ENTRY_NAME \
--map="${CERTIFICATE_MAP_NAME}" \
--project $PROJECT_ID

create-https-proxy

Desplegar una aplicación de ejemplo

  • Crea un managed instance group e instala Apache.
#Create an instance template.
gcloud compute instance-templates create web-app-instance-template \
--region=$REGION \
--project $PROJECT_ID \
--network=default \
--subnet=default \
--tags=allow-health-check \
--image-family=debian-10 \
--image-project=debian-cloud \
--metadata=startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://metadata.google.internal/computeMetadata/v1/instance/name)"
echo "Page served from: $vm_hostname" | \
tee /var/www/html/index.html
systemctl restart apache2'
#Create the managed instance group based on the template.
gcloud compute instance-groups managed create web-app-instance-group \
--template=web-app-instance-template \
--size=1 \
--zone="${REGION}"-b \
--project $PROJECT_ID
#Add a named port to the instance group
gcloud compute instance-groups set-named-ports web-app-instance-group \
--named-ports http:80 \
--zone "${REGION}"-b \
--project $PROJECT_ID
  • Crea una regla de firewall que permita el tráfico de los sistemas de health check de Google Cloud.
gcloud compute firewall-rules create fw-allow-health-check \
--network=default \
--action=allow \
--direction=ingress \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--target-tags=allow-health-check \
--rules=tcp:80 \
--project $PROJECT_ID

certificate-map

instancia de ejemplo

Desplegar el certificado en un load balancer

  • Crea los recursos del load balancer.
#Reserve an external ip
gcloud compute addresses create external-lb-ipv4 \
--ip-version=IPV4 \
--network-tier=PREMIUM \
--global \
--project $PROJECT_ID
#Create a health check
gcloud compute health-checks create http http-basic-check \
--port 80 \
--project $PROJECT_ID
#Create a backend service
gcloud compute backend-services create web-app-backend-service \
--load-balancing-scheme=EXTERNAL \
--protocol=HTTP \
--port-name=http \
--health-checks=http-basic-check \
--global \
--project $PROJECT_ID
#Add the instance group as the backend to the backend service.
gcloud compute backend-services add-backend web-app-backend-service \
--instance-group=web-app-instance-group \
--instance-group-zone="${REGION}"-b \
--global \
--project $PROJECT_ID
#create a URL map to route the incoming requests to the default backend service
gcloud compute url-maps create web-app-url-map-https \
--default-service web-app-backend-service \
--project $PROJECT_ID
  • Crea un target HTTPS proxy para enrutar las solicitudes al URL map y vincula el certificate map al target proxy.
gcloud compute target-https-proxies create https-lb-proxy \
--url-map=web-app-url-map-https \
--certificate-map="${CERTIFICATE_MAP_NAME}" \
--project $PROJECT_ID

gcp-tls

El certificado queda vinculado al target HTTPS proxy

  • Crea una regla de forwarding global para enrutar las solicitudes entrantes al proxy.
gcloud compute forwarding-rules create web-app-https-fw-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=external-lb-ipv4 \
--global \
--target-https-proxy=https-lb-proxy \
--ports=443 \
--project $PROJECT_ID

gcp-security

Configuración del LB externo

  • Crea un record set en Cloud DNS para el dominio y accede al endpoint.

setting-up-ssl-certificates-in-google-cloud-platform

Registro A para example.chimbuc.dns.doit-playground.com

setting-up-managed-ssl-certificates-through-load-balancer-based-authorization

En resumen, usar Domain authorization en Google Cloud Platform (GCP) acelera de forma notable la provisión de certificados SSL frente al método tradicional basado en load balancer. Si sigues los pasos de este blog, podrás configurar Domain authorization con eficiencia, crear nuevos certificados TLS y reforzar la seguridad de tu entorno en GCP. Este enfoque reduce el downtime al mínimo y asegura una transición mucho más fluida.