En este tutorial se muestra cómo usar Certificate Manager para desplegar un certificado global gestionado por Google con autorización de DNS en un balanceador de carga de aplicaciones interno multirregión.
Si quieres desplegar balanceadores de carga externos globales o regionales, consulta lo siguiente:
Objetivos
En este tutorial se explica cómo completar las siguientes tareas:
- Crea un certificado gestionado por Google emitido por una autoridad de certificación pública de confianza con autorización de DNS mediante el Administrador de certificados.
- Implementa el certificado en un balanceador de carga compatible mediante un proxy HTTPS de destino.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine, Certificate Manager APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Crea una zona DNS pública.
Propietario de Certificate Manager (
roles/certificatemanager.owner
)Se requiere para crear y gestionar recursos de Certificate Manager.
Administrador de balanceadores de carga de Compute (
roles/compute.loadBalancerAdmin
) o Administrador de red de Compute (roles/compute.networkAdmin
)Obligatorio para crear y gestionar un proxy de destino HTTPS.
Administrador de DNS (
roles/dns.admin
)Es obligatorio si quieres usar Cloud DNS como solución de DNS.
- Roles y permisos de Certificate Manager.
- Roles y permisos de gestión de identidades y accesos de Compute Engine para Compute Engine.
- Roles y permisos de Cloud DNS.
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
.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
.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 Todas las regiones.
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.
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.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.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.
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.
Consulta el siguiente ejemplo:
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"
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.En la Google Cloud consola, ve a la página Gestor de certificados.
En la pestaña Certificados, consulta la columna Estado del certificado.
PROXY_NAME
: el nombre del proxy de destino.URL_MAP
: nombre del mapa de URLs. Creaste el mapa de URLs al crear el balanceador de carga.CERTIFICATE_NAME
: el nombre del certificado.Elimina el balanceador de carga y sus recursos.
Consulta Limpiar la configuración de un balanceador de carga.
Elimina el certificado gestionado por Google:
Consola
En la Google Cloud consola, ve a la página Gestor de certificados.
En la pestaña Certificados, marca la casilla del certificado.
Haz clic en Eliminar.
En el cuadro de diálogo que aparece, haz clic en Eliminar para confirmar la acción.
gcloud
gcloud certificate-manager certificates delete CERTIFICATE_NAME
Sustituye
CERTIFICATE_NAME
por el nombre del certificado de destino.Elimina la autorización de DNS:
gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
Sustituye
AUTHORIZATION_NAME
por el nombre de la autorización de DNS de destino.
Roles obligatorios
Asegúrate de que tienes los siguientes roles para completar las tareas de este tutorial:
Para obtener más información, consulta las siguientes secciones:
Nombres de dominio
Para crear certificados, obtén los nombres de dominio completos (FQDNs) de los dominios que tengas. Si no tienes un dominio, puedes usar Cloud Domains para registrar uno.
Crear el balanceador de carga
En este tutorial se presupone que ya has creado y configurado los backends, las comprobaciones de estado, los servicios de backend y los mapas de URLs del balanceador de carga. Anota el nombre del mapa de URLs, ya que lo necesitarás más adelante en este tutorial.
Si no has creado un balanceador de carga de aplicación interno entre regiones, consulta Configurar un balanceador de carga de aplicación interno entre regiones con backends de grupos de instancias de VM.
Crear un certificado gestionado por Google con autorización de DNS
Antes de crear el certificado, crea una zona DNS pública. A continuación, crea una autorización de DNS y añade el registro CNAME a la zona DNS de destino.
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
Para crear una autorización de DNS, usa el comando certificate-manager
dns-authorizations create
:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME"
Haz los cambios siguientes:
Los certificados globales gestionados por Google usan FIXED_RECORD
como tipo de autorización DNS predeterminado. Para usar la autorización de DNS PER_PROJECT_RECORD
, ejecuta el siguiente comando:
gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \ --domain="DOMAIN_NAME" \ --type="PER_PROJECT_RECORD"
Después de crear la autorización de DNS, verifícala con el comando 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 línea dnsResourceRecord
y obtén el registro CNAME
(data
, name
y type
) para añadirlo 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'
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:
Crear un certificado gestionado por Google que haga referencia a la autorización de DNS
Para crear un certificado gestionado por Google que haga referencia a la autorización de DNS que has creado en los pasos anteriores, sigue estos pasos:
Consola
gcloud
Para crear un certificado gestionado por Google entre regiones con autorización de DNS, usa el comando certificate-manager certificates create
con las marcas dns-authorizations
y --scope
:
gcloud certificate-manager certificates create CERTIFICATE_NAME \ --domains="DOMAIN_NAME, *.DOMAIN_NAME" \ --dns-authorizations="AUTHORIZATION_NAMES" \ --scope=all-regions
Haz los cambios siguientes:
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", ], "scope": "ALL_REGIONS" } }
Haz los cambios siguientes:
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:
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:
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
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 desplegar el certificado global gestionado por Google, adjúntalo directamente al proxy de destino.
Adjuntar el certificado directamente al proxy de destino
Puede adjuntar el certificado a un proxy de destino nuevo o a uno que ya tenga.
Para adjuntar el certificado a un nuevo proxy de destino, usa el gcloud compute
target-https-proxies create
comando:
gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP \ --certificate-manager-certificates=CERTIFICATE_NAME \ --global
Haz los cambios siguientes:
Para adjuntar el certificado a un proxy HTTPS de destino, usa el gcloud
compute target-https-proxies update
comando. 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 \ --global \ --certificate-manager-certificates=CERTIFICATE_NAME
Después de crear o actualizar el proxy de destino, ejecuta el siguiente comando para verificarlo:
gcloud compute target-https-proxies list
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en este tutorial, elimínalos.