Desplegar un certificado global gestionado por Google con autorización de balanceador de carga


En este tutorial se muestra cómo usar Certificate Manager para desplegar un certificado global gestionado por Google con autorización de balanceador de carga.

La autorización del balanceador de carga es el método más eficiente para obtener un certificado gestionado por Google. Mantiene limpia la configuración de DNS y aprovisiona el certificado TLS una vez que se haya completado la configuración.

Los siguientes balanceadores de carga admiten certificados gestionados por Google con autorización de balanceador de carga:

  • Balanceador de carga de aplicación externo global
  • Balanceador de carga de aplicación clásico
  • Balanceador de carga de red con proxy externo global

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 (AC) de confianza pública con autorización de balanceador de carga mediante el Administrador de certificados.
  • Implementa el certificado en un balanceador de carga compatible mediante un proxy HTTPS de destino.

Si implementas un certificado en un dominio de producción, el tráfico se interrumpirá brevemente mientras se configura y se activa el certificado en tu balanceador de carga.

Antes de empezar

  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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud 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.

    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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  10. 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 the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

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

    gcloud init
  14. Roles obligatorios

    Asegúrate de que tienes los siguientes roles para completar las tareas de este tutorial:

    • 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.

    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. Si has creado un balanceador de carga de aplicaciones externo, anota el nombre del mapa de URLs, ya que lo necesitarás más adelante en este tutorial.

    Si no has creado el balanceador de carga, consulta las siguientes páginas para crear uno:

    Crear un certificado gestionado por Google con autorización de balanceador de carga

    Para crear un certificado gestionado por Google con autorización de balanceador de carga, sigue estos pasos:

    Consola

    1. En la Google Cloud consola, ve a la página Gestor de certificados.

      Ir a Certificate Manager

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

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

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

    5. En Ubicación, selecciona Global.

    6. En Ámbito, selecciona Predeterminado.

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

    8. En Tipo de autoridad de certificación, selecciona Pública.

    9. 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.

    10. En Tipo de autorización, selecciona Autorización de balanceador de carga.

    11. 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.

    12. 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 balanceador de carga, usa el comando certificate-manager certificates create:

    gcloud certificate-manager certificates create CERTIFICATE_NAME \
        --domains="DOMAIN_NAMES"
    

    Haz los cambios siguientes:

    • CERTIFICATE_NAME: el nombre del certificado.
    • DOMAIN_NAMES: lista de dominios de destino separados por comas. Cada nombre de dominio debe ser un nombre de dominio completo, como myorg.example.com.

    Terraform

    Usa un google_certificate_manager_certificate recurso.

    resource "google_certificate_manager_certificate" "default" {
      name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
      description = "Cert with LB authorization"
      managed {
        domains = [local.domain]
      }
      labels = {
        "terraform" : true
      }
    }

    Para saber cómo aplicar o quitar una configuración de Terraform, consulta Comandos básicos de 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"],
     }
    }
    

    Haz los cambios siguientes:

    • PROJECT_ID: el ID del Google Cloud proyecto.
    • CERTIFICATE_NAME: el nombre del certificado.
    • DOMAIN_NAMES: lista de dominios de destino separados por comas. Cada nombre de dominio debe ser un nombre de dominio completo, como myorg.example.com.

    Implementar el certificado en un balanceador de carga

    Para implementar el certificado global gestionado por Google, utiliza un mapa de certificados.

    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.

    resource "google_certificate_manager_certificate_map" "certificate_map" {
      name        = "${local.name}-certmap-${random_id.tf_prefix.hex}"
      description = "${local.domain} certificate map"
      labels = {
        "terraform" : true
      }
    }

    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 para example.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.

    resource "google_certificate_manager_certificate_map_entry" "first_entry" {
      name        = "${local.name}-first-entry-${random_id.tf_prefix.hex}"
      description = "example certificate map entry"
      map         = google_certificate_manager_certificate_map.certificate_map.name
      labels = {
        "terraform" : true
      }
      certificates = [google_certificate_manager_certificate.root_cert.id]
      hostname     = local.domain
    }

    Para crear una entrada de mapa de certificados con un dominio comodín, usa un recurso google_certificate_manager_certificate_map_entry.

    resource "google_certificate_manager_certificate_map_entry" "second_entry" {
      name        = "${local.name}-second-entity-${random_id.tf_prefix.hex}"
      description = "example certificate map entry"
      map         = google_certificate_manager_certificate_map.certificate_map.name
      labels = {
        "terraform" : true
      }
      certificates = [google_certificate_manager_certificate.root_cert.id]
      hostname     = "*.${local.domain}"
    }

    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.

    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

    1. En la Google Cloud consola, ve a la página Gestor de certificados.

      Ir a Certificate Manager

    2. 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
      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 al cabo de varias horas, comprueba lo siguiente:

    Para ver más pasos para solucionar problemas, consulta Solucionar problemas de Gestor de certificados.

    Limpieza

    Para evitar que se apliquen cargos en tu cuenta de Google Cloud por los recursos utilizados en este tutorial, elimínalos.

    1. Elimina el balanceador de carga y sus recursos.

      Para obtener más información, consulta Limpiar una configuración de balanceo de carga.

    2. Elimina o separa el mapa de certificados del proxy.

      Para eliminar el mapa de certificados, ejecuta el siguiente comando:

      gcloud compute target-https-proxies delete PROXY_NAME
      

      Si quieres conservar el proxy HTTPS de destino, separa el mapa de certificados del proxy. Antes de separar el mapa de certificados, ten en cuenta lo siguiente:

      • Si hay algún certificado TLS (SSL) adjunto directamente al proxy, al separar el mapa de certificados, el proxy volverá a usar esos certificados TLS (SSL) adjuntos directamente.
      • Si no hay certificados TLS (SSL) adjuntos directamente al proxy, el mapa de certificados no se puede separar del proxy. Primero debes adjuntar al menos un certificado TLS (SSL) directamente al proxy para poder separar el mapa de certificados.

      Para separar el mapa de certificados, ejecuta el siguiente comando:

      gcloud compute target-https-proxies update PROXY_NAME \
          --clear-certificate-map
      

      Sustituye PROXY_NAME por el nombre del proxy de destino.

    3. Elimina la entrada del mapa de certificados del mapa de certificados:

      gcloud certificate-manager maps entries delete 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_MAP_NAME: el nombre del mapa de certificados.
    4. Elimina el mapa de certificados:

      gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
      

      Sustituye CERTIFICATE_MAP_NAME por el nombre del mapa de certificados.

    5. Elimina el certificado gestionado por Google:

      Consola

      1. En la Google Cloud consola, ve a la página Gestor de certificados.

        Ir a Certificate Manager

      2. En la pestaña Certificados, marca la casilla del certificado.

      3. Haz clic en Eliminar.

      4. 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.

    Siguientes pasos