En este tutorial se explica cómo migrar certificados de terceros a un balanceador de carga deGoogle Cloud mediante Certificate Manager.
Para migrar certificados de terceros sin tiempo de inactividad, crea el mismo número de certificados gestionados por Google que certificados de terceros. A continuación, consolida los certificados en un solo mapa de certificados e implementa el mapa de certificados en un balanceador de carga mediante DNS. Por último, actualiza los registros A y AAAA de DNS para que apunten a la dirección IP del balanceador de carga.
Para ver la lista de balanceadores de carga admitidos, consulta el resumen de Certificate Manager.
Crear certificados gestionados por Google
Crea el mismo número de certificados gestionados por Google con autorización de DNS (recomendado) o certificados autogestionados que certificados de terceros. Antes de crear los certificados, crea una autorización de DNS y añade el registro CNAME a la zona de DNS autoritativa de tu dominio.
En esta sección se indican los pasos y comandos para crear certificados globales gestionados por Google. Para crear certificados gestionados por Google regionales o multirregionales, consulta el artículo Crear un certificado gestionado por Google.
Crear una autorización de DNS
Una autorización de DNS solo cubre un nombre de dominio. Debes crear una autorización de DNS independiente para cada nombre de dominio que quieras usar con el certificado de destino.
Si vas a crear una autorización de DNS para un certificado comodín, como *.myorg.example.com
, configura la autorización de DNS para el dominio principal (por ejemplo, myorg.example.com
).
Consola
Puedes crear una autorización de DNS o adjuntar una que ya tengas al crear un certificado. Para obtener más información, consulta Crear un certificado gestionado por Google que haga referencia a la autorización de DNS.
gcloud
Puede crear dos tipos de autorizaciones de DNS: FIXED_RECORD
o PER_PROJECT_RECORD
. Para obtener más información, consulta Autorización de DNS.
Autorización de DNS FIXED_RECORD
Para crear una autorización de DNS FIXED_RECORD
, usa el siguiente comando gcloud certificate-manager dns-authorizations create
:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type=[FIXED_RECORD]
Haz los cambios siguientes:
AUTHORIZATION_NAME
: el nombre de la autorización de DNS.DOMAIN_NAME
: el nombre del dominio de destino para el que estás creando esta autorización de DNS. El nombre de dominio debe ser un nombre de dominio completo, comomyorg.example.com
.
Después de crear la autorización de DNS FIXED_RECORD
, verifícala con el comando gcloud certificate-manager dns-authorizations describe
:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
La salida es similar a la siguiente. En el resultado, busca la sección dnsResourceRecord
. Busca el registro CNAME
y añade los detalles del registro (data
, name
y type
) a tu configuración de DNS.
createTime: '2022-01-14T13:35:00.258409106Z' dnsResourceRecord: data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. name: _acme-challenge.myorg.example.com. type: CNAME domain: myorg.example.com name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization updateTime: '2022-01-14T13:35:01.571086137Z'
Autorización de DNS PER_PROJECT_RECORD
Para crear una autorización de DNS PER_PROJECT_RECORD
, usa el siguiente gcloud certificate-manager dns-authorizations create
comando:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type=PER_PROJECT_RECORD
Haz los cambios siguientes:
AUTHORIZATION_NAME
: el nombre de la autorización de DNS.DOMAIN_NAME
: el nombre del dominio de destino para el que estás creando esta autorización de DNS. El nombre de dominio debe ser un nombre de dominio completo, comomyorg.example.com
.
Después de crear la autorización de DNS de PER_PROJECT_RECORD
, verifícala con el comando gcloud certificate-manager dns-authorizations describe
:
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME
La salida es similar a la siguiente. En el resultado, busca la sección dnsResourceRecord
. Busca el registro CNAME
y añade los detalles del registro (data
, name
y type
) a tu configuración de DNS.
createTime: '2022-01-14T13:35:00.258409106Z' dnsResourceRecord: data: 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. name: _acme-challenge_ujmmovf2vn55tgye.myorg.example.com type: CNAME domain: myorg.example.com name: projects/myProject/locations/global/dnsAuthorizations/myAuthorization updateTime: '2022-01-14T13:35:01.571086137Z'
Terraform
Para crear una autorización de DNS, puedes usar un recurso google_certificate_manager_dns_authorization
.
Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de Terraform.
API
Para crear una autorización de DNS, haz una solicitud POST
al método dnsAuthorizations.create
:
POST /v1/projects/PROJECT_ID/locations/global/dnsAuthorizations?dns_authorization_id=AUTHORIZATION_NAME" { "domain": "DOMAIN_NAME", "type": "PER_PROJECT_RECORD" //optional }
Haz los cambios siguientes:
PROJECT_ID
: el ID del Google Cloud proyecto.AUTHORIZATION_NAME
: el nombre de la autorización de DNS.DOMAIN_NAME
: el nombre del dominio de destino para el que estás creando esta autorización de DNS. El nombre de dominio debe ser un nombre de dominio completo, comomyorg.example.com
.
Crear un certificado gestionado por Google que haga referencia a la autorización de DNS
Para crear un certificado global gestionado por Google que haga referencia a la autorización de DNS que has creado en los pasos anteriores, sigue estos pasos:
Consola
En la Google Cloud consola, ve a la página Gestor de certificados.
En la pestaña Certificados, haz clic en Añadir certificado.
En el campo Nombre del certificado, introduce un nombre único para el certificado.
Opcional: En el campo Descripción, escribe una descripción del certificado. La descripción te permite identificar el certificado.
En Ubicación, selecciona Global.
En Ámbito, selecciona Predeterminado.
En Tipo de certificado, selecciona Crear certificado gestionado por Google.
En Tipo de autoridad de certificación, selecciona Pública.
En el campo Domain Names (Nombres de dominio), especifique una lista de nombres de dominio del certificado delimitados por comas. Cada nombre de dominio debe ser un nombre de dominio completo, como
myorg.example.com
. El nombre de dominio también puede ser un nombre de dominio comodín, como*.example.com
.En Tipo de autorización, selecciona Autorización de DNS.
En la página se muestran las autorizaciones de DNS de los nombres de dominio. Si un nombre de dominio no tiene una autorización de DNS asociada, sigue estos pasos para crear una:
- Haz clic en Crear autorización de DNS que falta.
- En el campo Nombre de autorización de DNS, especifica el nombre de la autorización de DNS.
El tipo de autorización de DNS predeterminado es
FIXED_RECORD
. Para gestionar los certificados de forma independiente en varios proyectos, marca la casilla Autorización por proyecto. - Haz clic en Crear autorización de DNS.
En el campo Etiquetas, especifica las etiquetas que quieras asociar al certificado. Para añadir una etiqueta, haz clic en
Añadir etiqueta y especifica una clave y un valor para la etiqueta.Haz clic en Crear.
El nuevo certificado aparece en la lista de certificados.
gcloud
Para crear un certificado global gestionado por Google con autorización de DNS, ejecuta el comando certificate-manager certificates create
con la marca dns-authorizations
:
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAME,*.DOMAIN_NAME" \ --dns-authorizations="AUTHORIZATION_NAMES"
Haz los cambios siguientes:
CERTIFICATE_NAME
: el nombre del certificado.DOMAIN_NAME
: el nombre del dominio de destino. El nombre de dominio debe ser un nombre de dominio completo, comomyorg.example.com
, o un dominio comodín, como*.myorg.example.com
. El prefijo de asterisco(*.)
indica que se trata de un certificado comodín.AUTHORIZATION_NAMES
: una lista de nombres de las autorizaciones de DNS que has creado para el certificado, separados por comas.
Terraform
API
Para crear el certificado, haz una solicitud POST
al método certificates.create
de la siguiente manera:
POST /v1/projects/PROJECT_ID/locations/global/certificates?certificate_id=CERTIFICATE_NAME { "managed": { "domains": ["DOMAIN_NAME"], "dnsAuthorizations": [ "projects/PROJECT_ID/locations/global/dnsAuthorizations/AUTHORIZATION_NAME", ], } }
Haz los cambios siguientes:
PROJECT_ID
: el ID del Google Cloud proyecto.CERTIFICATE_NAME
: el nombre del certificado.DOMAIN_NAME
: el nombre del dominio de destino. El nombre de dominio debe ser un nombre de dominio completo, comomyorg.example.com
, o un dominio comodín, como*.myorg.example.com
. El prefijo de asterisco y punto (*.) indica que se trata de un certificado comodín.AUTHORIZATION_NAMES
: lista delimitada por comas de los nombres de las autorizaciones de DNS.
Añadir el registro CNAME a tu configuración de DNS
Si usas una solución de DNS de terceros para gestionar tu DNS, consulta su documentación para añadir el registro CNAME a la configuración de DNS. Si usas Google Cloud para gestionar tu DNS, sigue los pasos que se indican en esta sección.
Consola
Para crear un conjunto de registros, sigue estos pasos:
En la consola de Google Cloud , ve a la página Zonas DNS.
Haz clic en el nombre de la zona DNS en la que quieras añadir el registro.
En la página Detalles de la zona, haga clic en Añadir estándar.
En la página Crear conjunto de registros, en el campo Nombre de DNS, introduce el subdominio de la zona DNS.
Cuando introduzca el nombre del subdominio, asegúrese de que el nombre del subdominio, incluido el texto atenuado que se muestra en el campo Nombre DNS, coincida con el valor completo del campo
dnsResourceRecord.name
tal como se muestra en el resultado del comandogcloud certificate-manager dns-authorizations describe
.Consulta los siguientes ejemplos:
Si el valor del campo
dnsResourceRecord.name
es_acme-challenge.myorg.example.com.
y el texto atenuado del campo Nombre de DNS es.example.com.
, introduce_acme-challenge.myorg
.Si el valor del campo
dnsResourceRecord.name
es_acme-challenge.myorg.example.com.
y el texto atenuado del campo Nombre de DNS es.myorg.example.com.
, introduce_acme-challenge
.Si el valor del campo
dnsResourceRecord.name
es_acme-challenge_ujmmovf2vn55tgye.myorg.example.com.
y el texto atenuado del campo Nombre DNS es.myorg.example.com.
, introduce_acme-challenge_ujmmovf2vn55tgye
.
En el campo Tipo de registro del recurso, selecciona CNAME.
En el campo TTL, introduce un valor numérico positivo para el tiempo de vida del registro del recurso, que es el tiempo que puede almacenarse en la caché.
En la lista Unidad TTL, selecciona la unidad de tiempo. Por ejemplo:
30 minutes
.En el campo Nombre canónico, introduce el valor completo del campo
dnsResourceRecord.data
tal como se muestra en la salida del comandogcloud certificate-manager dns-authorizations describe
.Para introducir información adicional, haz clic en Añadir elemento.
Haz clic en Crear.
gcloud
Cuando creas una autorización de DNS, el comando de la CLI de gcloud devuelve el registro CNAME correspondiente. Para añadir el registro CNAME a la configuración de DNS en la zona DNS del dominio de destino, sigue estos pasos:
Inicia la transacción del registro DNS:
gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
Sustituye
DNS_ZONE_NAME
por el nombre de la zona DNS de destino.Añade el registro CNAME a la zona DNS de destino:
gcloud dns record-sets transaction add CNAME_RECORD \ --name="VALIDATION_SUBDOMAIN_NAME.DOMAIN_NAME." \ --ttl="30" \ --type="CNAME" \ --zone="DNS_ZONE_NAME"
Haz los cambios siguientes:
CNAME_RECORD
: el valor de datos completo del registro CNAME devuelto por el comando de la CLI de Google Cloud que creó la autorización de DNS correspondiente.VALIDATION_SUBDOMAIN_NAME
: el subdominio de prefijo de la zona DNS, como_acme-challenge
. Puedes copiar el nombre del registro del comandogcloud certificate-manager dns-authorizations describe
tal como se describe en el artículo Crear una autorización de DNS.DOMAIN_NAME
: el nombre del dominio de destino.El nombre de dominio debe ser un nombre de dominio completo, comomyorg.example.com
. También debes incluir el punto final después del nombre de dominio de destino.DNS_ZONE_NAME
: el nombre de la zona DNS de destino.
Para obtener más información sobre la diferencia entre las autorizaciones de DNS
FIXED_RECORD
yPER_PROJECT_RECORD
, consulte los siguientes ejemplos. La única diferencia entre los dos ejemplos es el valor de la marca--name
.Autorización de DNS FIXED_RECORD
gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \ --name="_acme-challenge.myorg.example.com." \ --ttl="30" \ --type="CNAME" \ --zone="myorg-example-com"
Autorización de DNS PER_PROJECT_RECORD
gcloud dns record-sets transaction add 0e40fc77-a37d-4eb8-8fe1-eea2e18d12d9.4.authorize.certificatemanager.goog. \ --name="_acme-challenge_ujmmovf2vn55tgye.myorg.example.com." \ --ttl="30" \ --type="CNAME" \ --zone="myorg-example-com"
Ejecuta la transacción de registro DNS para guardar los cambios:
gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
Sustituye
DNS_ZONE_NAME
por el nombre de la zona DNS de destino.
Terraform
Para añadir el registro CNAME a tu configuración de DNS, puedes usar un
google_dns_record_set
recurso.
Verificar el estado del certificado
Antes de implementar un certificado en un balanceador de carga, comprueba que esté activo. El estado del certificado puede tardar varios minutos en cambiar a ACTIVE
.
Consola
En la Google Cloud consola, ve a la página Gestor de certificados.
En la pestaña Certificados, consulta la columna Estado del certificado.
gcloud
Para verificar el estado del certificado, ejecuta el siguiente comando:
gcloud certificate-manager certificates describe CERTIFICATE_NAME
Sustituye CERTIFICATE_NAME
por el nombre del certificado gestionado por Google de destino.
El resultado debería ser similar al siguiente:
createTime: '2021-10-20T12:19:53.370778666Z' expireTime: '2022-05-07T05:03:49Z' managed: authorizationAttemptInfo: - domain: myorg.example.com state: AUTHORIZED dnsAuthorizations: - projects/myProject/locations/global/dnsAuthorizations/myCert domains: - myorg.example.com state: ACTIVE name: projects/myProject/locations/global/certificates/myCert pemCertificate: | -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- sanDnsnames: - myorg.example.com updateTime: '2021-10-20T12:19:55.083385630Z'
Si el estado del certificado no es ACTIVE
después de varias horas, comprueba que hayas añadido correctamente el registro CNAME
a tu configuración de DNS.
Para ver más pasos para solucionar problemas, consulta Solucionar problemas de Gestor de certificados.
Implementar el certificado en un balanceador de carga
Para implementar un certificado global gestionado por Google, sigue los pasos que se indican en esta sección e implementa el certificado mediante un mapa de certificados.
Para desplegar el certificado gestionado por Google en un balanceador de carga de aplicación externo regional o en un balanceador de carga de aplicación interno regional, o en un balanceador de carga de aplicación interno entre regiones, adjúntalo directamente al proxy de destino.
Crear un mapa de certificados
Crea un mapa de certificados que haga referencia a la entrada de mapa de certificados asociada a tu certificado:
gcloud
Para crear un mapa de certificados, usa el comando gcloud certificate-manager maps create
:
gcloud certificate-manager maps create CERTIFICATE_MAP_NAME
Sustituye CERTIFICATE_MAP_NAME
por el nombre del mapa de certificados de destino.
Terraform
Para crear un mapeado de certificados, puedes usar un recurso google_certificate_manager_certificate_map
.
Crear una entrada de mapa de certificados
Crea una entrada de mapa de certificados y asóciala a tu certificado y a tu mapa de certificados:
gcloud
Para crear una entrada de mapeado de certificados, usa el comando gcloud certificate-manager maps entries create
:
gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME" \ --certificates="CERTIFICATE_NAME" \ --hostname="HOSTNAME"
Haz los cambios siguientes:
CERTIFICATE_MAP_ENTRY_NAME
: el nombre de la entrada del mapa de certificados.CERTIFICATE_MAP_NAME
: el nombre del mapa de certificados al que está adjunta la entrada del mapa de certificados.CERTIFICATE_NAME
: el nombre del certificado que quieres asociar a la entrada del mapa de certificados.HOSTNAME
: el nombre de host que quieras asociar a la entrada del mapa de certificados.Si quieres crear un certificado que cubra tanto un dominio comodín como un dominio raíz, especifica el nombre de host con un dominio raíz y un comodín, como
example.com
y*.example.com
. Además, debes especificar dos entradas de mapa de certificados: una paraexample.com
y otra para*.example.com
.
Terraform
Para crear una entrada de mapa de certificados con un dominio raíz, usa un recurso google_certificate_manager_certificate_map_entry
.
Para crear una entrada de mapa de certificados con un dominio comodín, usa un recurso google_certificate_manager_certificate_map_entry
.
Verificar que la entrada de mapa de certificados esté activa
Verifica que la entrada del mapa de certificados esté activa antes de adjuntar el mapa de certificados correspondiente al proxy de destino.
Para verificar la entrada del mapa de certificados, usa el comando gcloud certificate-manager maps entries describe
:
gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \ --map="CERTIFICATE_MAP_NAME"
Haz los cambios siguientes:
CERTIFICATE_MAP_ENTRY_NAME
: el nombre de la entrada del mapa de certificados.CERTIFICATE_NAME
: el nombre del certificado que quieres asociar a la entrada del mapa de certificados.
El resultado debería ser similar al siguiente:
certificates: createTime: '2021-09-06T10:01:56.229472109Z' hostname: example.com name: projects/my-project/locations/global/certificateMaps/myCertMap/certificateMapEntries/myCertMapEntry state: ACTIVE updateTime: '2021-09-06T10:01:58.277031787Z'
Adjunta el mapa de certificados al proxy de destino
Puede adjuntar el mapa de certificados a un proxy de destino nuevo o a uno que ya tenga.
gcloud
Para adjuntar el mapa de certificados a un nuevo proxy de destino, usa el comando gcloud compute target-https-proxies create
:
gcloud compute target-https-proxies create PROXY_NAME \ --certificate-map="CERTIFICATE_MAP_NAME" \ --url-map="URL_MAP" \ --global
Haz los cambios siguientes:
PROXY_NAME
: el nombre del proxy de destino.CERTIFICATE_MAP_NAME
: el nombre del mapa de certificados que hace referencia a la entrada del mapa de certificados y al certificado asociado.URL_MAP
: nombre del mapa de URLs.
Para adjuntar el mapa de certificados a un proxy HTTPS de destino, usa el comando gcloud compute target-https-proxies update
. Si no sabes el nombre del proxy de destino, ve a la página Proxies de destino y anota el nombre del proxy de destino.
gcloud compute target-https-proxies update PROXY_NAME \ --certificate-map="CERTIFICATE_MAP_NAME" \ --global
Después de crear o actualizar el proxy de destino, ejecuta el siguiente comando para verificarlo:
gcloud compute target-https-proxies list
Terraform
Para adjuntar el mapa de certificados al proxy de destino, puedes usar un recurso google_compute_target_https_proxy
.
Cuando configures un proxy de destino, si adjuntas certificados TLS (SSL) directamente y también a través de un mapa de certificados, el proxy usará los certificados a los que haga referencia el mapa de certificados e ignorará los certificados TLS (SSL) adjuntos directamente.
Probar los certificados implementados
En cada certificado que hayas implementado, prueba la conectividad a cada dominio cubierto por el certificado en la dirección IP de tu balanceador de carga con el siguiente comando:
openssl s_client -showcerts -servername DOMAIN_NAME -connect IP_ADDRESS:443
Haz los cambios siguientes:
DOMAIN_NAME
: el nombre del dominio de destinoIP_ADDRESS
: la dirección IP de tu balanceador de carga
Para obtener más información sobre cómo probar la conectividad, consulta Prueba con OpenSSL.
Actualizar los registros DNS
Transfiere el tráfico de tu servicio de terceros a Cloud Load Balancing. Consulta Actualizar los registros A y AAAA de DNS para que dirijan a la dirección IP del balanceador de carga.