Implementa un certificado administrado por Google entre regiones con autorización de DNS


En este instructivo, se muestra cómo usar el Administrador de certificados para implementar un certificado global administrado por Google con autorización de DNS en un balanceador de cargas de aplicaciones interno multirregional.

Si deseas realizar implementaciones en balanceadores de cargas externos globales o regionales, consulta lo siguiente:

Objetivos

En este instructivo, se muestra cómo completar las siguientes tareas:

  • Crea un certificado administrado por Google emitido por una autoridad certificadora de confianza pública con autorización de DNS usando el Administrador de certificados.
  • Implementa el certificado en un balanceador de cargas compatible con un proxy HTTPS de destino.

Antes de comenzar

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  7. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Compute Engine, Certificate Manager APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si usas un proveedor de identidad externo (IdP), primero debes acceder a gcloud CLI con tu identidad federada.

  13. Para inicializar gcloud CLI, ejecuta el siguiente comando:

    gcloud init
  14. Crea una zona de DNS pública
  15. Roles requeridos

    Asegúrate de tener los siguientes roles para completar las tareas de este instructivo:

    • Propietario del Administrador de certificados (roles/certificatemanager.owner)

      Se requiere para crear y administrar recursos de Certificate Manager.

    • Administrador de balanceador de cargas de Compute (roles/compute.loadBalancerAdmin) o administrador de redes de Compute (roles/compute.networkAdmin)

      Se requiere para crear y administrar el proxy HTTPS de destino.

    • Administrador de DNS (roles/dns.admin)

      Se requiere si deseas usar Cloud DNS como tu solución de DNS.

    Para obtener más información, consulta lo siguiente:

    Nombres de dominio

    Para crear certificados, obtén los nombres de dominio completamente calificados (FQDN) de los dominios que posees. Si no tienes un dominio, puedes usar Cloud Domains para registrar uno.

    Crea el balanceador de cargas

    En este instructivo, se supone que ya creaste y configuraste los backends, las verificaciones de estado, los servicios de backend y los mapas de URL del balanceador de cargas. Toma nota del nombre del mapa de URL, ya que lo necesitarás más adelante en este instructivo.

    Si no creaste un balanceador de cargas de aplicaciones interno entre regiones, consulta Configura un balanceador de cargas de aplicaciones interno entre regiones con backends de grupos de instancias de VM.

    Crea un certificado administrado por Google con autorización de DNS

    Antes de crear el certificado, crea una zona DNS pública. Luego, crea una autorización de DNS y agrega el registro CNAME a la zona del DNS de destino.

    Crea una autorización de DNS

    Una autorización de DNS solo abarca 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 creas 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.

    Console

    Puedes crear una autorización de DNS o adjuntar una existente cuando crees un certificado. Para obtener más información, consulta Crea un certificado administrado 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"
    

    Reemplaza lo siguiente:

    • AUTHORIZATION_NAME: Es el nombre de la autorización de DNS.
    • DOMAIN_NAME: Es el nombre del dominio objetivo para el que creas esta autorización de DNS. El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com.

    Los certificados globales administrados por Google usan FIXED_RECORD como el tipo de autorización de DNS predeterminado. Para usar la autorización de DNS de 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
    

    El resultado es similar al siguiente. En el resultado, busca la línea dnsResourceRecord y obtén el registro CNAME (data, name y type) para agregar 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, realiza 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
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto Google Cloud .
    • AUTHORIZATION_NAME: Es el nombre de la autorización de DNS.
    • DOMAIN_NAME: Es el nombre del dominio objetivo para el que creas esta autorización de DNS. El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com.

    Crea un certificado administrado por Google que haga referencia a la autorización de DNS

    Para crear un certificado administrado por Google que haga referencia a la autorización de DNS que creaste en los pasos anteriores, haz lo siguiente:

    Console

    1. En la consola de Google Cloud , ve a la página Certificate Manager.

      Ir al Administrador de certificados

    2. En la pestaña Certificados, haz clic en Agregar certificado.

    3. En el campo Nombre del certificado, ingresa un nombre único para el certificado.

    4. Opcional: En el campo Descripción, ingresa una descripción para el certificado. La descripción te permite identificar el certificado.

    5. En Ubicación, selecciona Global.

    6. En Alcance, selecciona Todas las regiones.

    7. En Tipo de certificado, selecciona Crear certificado administrado por Google.

    8. En Tipo de autoridad certificadora, selecciona Pública.

    9. En el campo Domain Names, especifica una lista delimitada por comas de los nombres de dominio del certificado. Cada nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com. El nombre de dominio también puede ser un nombre de dominio comodín, como *.example.com.

    10. En Tipo de autorización, selecciona Autorización de DNS.

      En la página, se enumeran 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:

      1. Haz clic en Crear autorización de DNS faltante.
      2. 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 administrar certificados de forma independiente en varios proyectos, selecciona la casilla de verificación Autorización por proyecto.
      3. Haz clic en Crear autorización de DNS.
    11. En el campo Etiquetas, especifica las etiquetas que se asociarán al certificado. Para agregar una etiqueta, haz clic en Agregar etiqueta y especifica una clave y un valor para tu etiqueta.

    12. Haz clic en Crear.

      El certificado nuevo aparecerá en la lista de certificados.

    gcloud

    Para crear un certificado administrado 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
    

    Reemplaza lo siguiente:

    • CERTIFICATE_NAME: El nombre del certificado.
    • DOMAIN_NAME: Es el nombre del dominio de destino. El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com, o un dominio comodín, como *.myorg.example.com. El prefijo de punto y asterisco (*.) significa un certificado comodín.
    • AUTHORIZATION_NAMES: Es una lista de nombres de autorizaciones de DNS delimitada por comas.

    API

    Para crear el certificado, realiza 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"
     }
    }
    

    Reemplaza lo siguiente:

    • PROJECT_ID: Es el ID del proyecto Google Cloud .
    • CERTIFICATE_NAME: El nombre del certificado.
    • DOMAIN_NAME: Es el nombre del dominio de destino. El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com, o un dominio comodín, como *.myorg.example.com. El prefijo de punto y asterisco (*.) significa un certificado comodín.
    • AUTHORIZATION_NAMES: Es una lista de nombres de autorizaciones de DNS delimitada por comas.

    Agrega el registro CNAME a tu configuración de DNS

    Si usas una solución de DNS externa para administrar tu DNS, consulta su documentación para agregar el registro CNAME a la configuración de DNS. Si usasGoogle Cloud para administrar tu DNS, completa los pasos de esta sección.

    Console

    Para crear un conjunto de registros, sigue estos pasos:

    1. En la consola de Google Cloud , ve a la página Zonas de DNS.

      Ir a Zonas de Cloud DNS

    2. Haz clic en el nombre de la zona DNS en la que deseas agregar el registro.

    3. En la página Detalles de la zona, haz clic en Agregar estándar.

    4. En la página Crear un conjunto de registros, en el campo Nombre de DNS, ingresa el subdominio de la zona de DNS.

      Cuando ingreses el nombre del subdominio, asegúrate de que el nombre del subdominio, incluido el texto atenuado que se muestra en el campo Nombre de DNS, coincida con el valor completo del campo dnsResourceRecord.name, tal como se muestra en el resultado del comando gcloud certificate-manager dns-authorizations describe.

      Consulta los ejemplos siguientes:

      • Si el valor del campo dnsResourceRecord.name es _acme-challenge.myorg.example.com. y el texto atenuado en el campo Nombre de DNS es .example.com., ingresa _acme-challenge.myorg.

      • Si el valor del campo dnsResourceRecord.name es _acme-challenge.myorg.example.com. y el texto atenuado en el campo Nombre de DNS es .myorg.example.com., ingresa _acme-challenge.

      • Si el valor del campo dnsResourceRecord.name es _acme-challenge_ujmmovf2vn55tgye.myorg.example.com. y el texto atenuado en el campo Nombre de DNS es .myorg.example.com., ingresa _acme-challenge_ujmmovf2vn55tgye.

    5. En el campo Tipo de registro del recurso, selecciona CNAME.

    6. En el campo TTL, ingresa un valor numérico positivo para el tiempo de actividad del registro de recursos. Este valor indica el tiempo que se puede almacenar en caché.

    7. En la lista Unidad TTL, selecciona la unidad de tiempo, por ejemplo, 30 minutes.

    8. En el campo Nombre canónico, ingresa el valor completo del campo dnsResourceRecord.data tal como se muestra en el resultado del comando gcloud certificate-manager dns-authorizations describe.

    9. Para ingresar información adicional, haz clic en Agregar elemento.

    10. Haga clic en Crear.

    gcloud

    Cuando creas una autorización de DNS, el comando de gcloud CLI devuelve el registro CNAME correspondiente. Para agregar el registro CNAME a tu configuración de DNS en la zona del DNS del dominio de destino, sigue estos pasos:

    1. Inicia la transacción del registro DNS:

      gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"
      

      Reemplaza DNS_ZONE_NAME por el nombre de la zona DNS de destino.

    2. Agrega el registro CNAME a la zona del 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"
      

      Reemplaza lo siguiente:

      • CNAME_RECORD: Es el valor de datos completo del registro CNAME que muestra el comando de Google Cloud CLI que creó la autorización de DNS correspondiente.
      • VALIDATION_SUBDOMAIN_NAME: Es el subdominio del prefijo de la zona DNS, como _acme-challenge. Puedes copiar el nombre del registro de comandos gcloud certificate-manager dns-authorizations describe, como se describe en Crea una autorización de DNS.
      • DOMAIN_NAME: Es el nombre del dominio de destino.El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com. También debes incluir el punto final después del nombre de dominio de destino.
      • DNS_ZONE_NAME: Es 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"
      
    3. Ejecuta la transacción del registro DNS para guardar los cambios:

      gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
      

      Reemplaza DNS_ZONE_NAME por el nombre de la zona DNS de destino.

    Terraform

    Para agregar el registro CNAME a tu configuración de DNS, puedes usar un recurso google_dns_record_set.

    resource "google_dns_record_set" "cname" {
      name         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].name
      managed_zone = google_dns_managed_zone.default.name
      type         = google_certificate_manager_dns_authorization.default.dns_resource_record[0].type
      ttl          = 300
      rrdatas      = [google_certificate_manager_dns_authorization.default.dns_resource_record[0].data]
    }

    Verifica el estado del certificado

    Antes de implementar un certificado en un balanceador de cargas, verifica que esté activo. El estado del certificado puede tardar varios minutos en cambiar a ACTIVE.

    Console

    1. En la consola de Google Cloud , ve a la página Certificate Manager.

      Ir al Administrador de certificados

    2. En la pestaña Certificados, verifica la columna Estado del certificado.

    gcloud

    Para verificar el estado del certificado, ejecuta el siguiente comando:

    gcloud certificate-manager certificates describe CERTIFICATE_NAME
    

    Reemplaza CERTIFICATE_NAME por el nombre del certificado administrado por Google de destino.

    El resultado es similar a este:

    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, verifica que hayas agregado correctamente el registro CNAME a tu configuración de DNS.

    Si quieres ver más pasos para solucionar problemas, consulta Soluciona problemas del Administrador de certificados.

    Implementa el certificado en un balanceador de cargas

    Para implementar el certificado global administrado por Google, adjúntalo directamente al proxy de destino.

    Adjunta el certificado directamente al proxy de destino

    Puedes adjuntar el certificado a un proxy de destino nuevo o existente.

    Para adjuntar el certificado a un proxy de destino nuevo, usa el comando gcloud compute target-https-proxies create:

    gcloud compute target-https-proxies create PROXY_NAME \
        --url-map=URL_MAP \
        --certificate-manager-certificates=CERTIFICATE_NAME \
        --global
    

    Reemplaza lo siguiente:

    • PROXY_NAME: Es el nombre del proxy de destino.
    • URL_MAP: el nombre del mapa de URL. Creaste el mapa de URL cuando creaste el balanceador de cargas.
    • CERTIFICATE_NAME: El nombre del certificado.

    Para adjuntar el certificado a un proxy HTTPS de destino existente, usa el comando gcloud compute target-https-proxies update. Si no conoces el nombre del proxy de destino existente, 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
    

    Limpia

    Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este instructivo, bórralos.

    1. Borra el balanceador de cargas y sus recursos.

      Consulta Limpia una configuración de balanceo de cargas.

    2. Borra el certificado administrado por Google:

      Console

      1. En la consola de Google Cloud , ve a la página Certificate Manager.

        Ir al Administrador de certificados

      2. En la pestaña Certificates, selecciona la casilla de verificación del certificado.

      3. Haz clic en Borrar.

      4. En el cuadro de diálogo que aparece, haz clic en Borrar para confirmar.

      gcloud

      gcloud certificate-manager certificates delete CERTIFICATE_NAME
      

      Reemplaza CERTIFICATE_NAME por el nombre del certificado de destino.

    3. Borra la autorización de DNS:

      gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
      

      Reemplaza AUTHORIZATION_NAME por el nombre de la autorización de DNS de destino.

    ¿Qué sigue?