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


En este instructivo, se explica el proceso de implementación de certificados mediante un certificado administrado por Google con DNS autorización como ejemplo.

Los siguientes balanceadores de cargas admiten certificados administrados por Google con DNS autorización:

  • Balanceador de cargas de aplicaciones externo global
  • Balanceador de cargas de aplicaciones clásico
  • Balanceador de cargas de aplicaciones interno entre regiones
  • Balanceador de cargas de red del proxy externo global

Para ver una comparación de los tipos de autorización de dominio admitidos, consulta Descripción del dominio autorizaciones.

Si quieres migrar un certificado existente al Administrador de certificados, sigue los pasos que se indican en Migra certificados a Administrador de certificados en su lugar.

Objetivos

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

  • Crear un certificado administrado por Google emitido por un profesional de confianza autoridad certificadora con autorización de DNS con el Administrador de certificados.
  • Implementar el certificado en un balanceador de cargas compatible con un HTTPS de destino proxy.

Para obtener más información sobre el proceso de implementación de certificados, consulta la descripción general de la implementación.

Antes de comenzar

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Se requiere la versión 465.0.0 o posterior de gcloud CLI para realizar la implementación el certificado. Para verificar tu versión de gcloud CLI, ejecuta el comando siguiente comando:

    gcloud --version
    
  3. Para actualizar gcloud CLI, ejecuta el siguiente comando.

    gcloud components update
    
  4. Asegúrate de tener los siguientes roles para completar las tareas de este instructivo:

    • Propietario del Administrador de certificados: Es obligatorio para crear y administrar. del Administrador de certificados.
    • Administrador del balanceador de cargas de Compute o Administrador de red de Compute: Obligatorio para crear y administrar proxy HTTPS de destino.
    • Administrador de DNS: es obligatorio si quieres usar Cloud DNS como solución de DNS.

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

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

Completa los pasos de esta sección para crear una autorización de DNS y una Certificado administrado por Google que hace referencia a esa autorización de DNS

Crea una autorización de DNS

Crea la autorización de DNS como se describe en esta sección. Si estás creando un Autorización de DNS para un certificado comodín, como *.myorg.example.com, configurar la autorización de DNS para el dominio superior, por ejemplo, myorg.example.com

gcloud

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Para usar la autorización de DNS por proyecto, ejecuta el siguiente comando:

gcloud certificate-manager dns-authorizations create AUTHORIZATION_NAME \
   --domain="DOMAIN_NAME" \
   --type="PER_PROJECT_RECORD"
gcloud certificate-manager dns-authorizations describe AUTHORIZATION_NAME

Reemplaza lo siguiente:

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

El comando muestra un resultado similar al siguiente. Usa el registro CNAME de la salida a agregar a la 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'

Terraform

Para crear una autorización de DNS, puedes usar una Recurso google_certificate_manager_dns_authorization.

resource "google_certificate_manager_dns_authorization" "default" {
  name        = "${local.name}-dnsauth-${random_id.tf_prefix.hex}"
  description = "The default dns auth"
  domain      = local.domain
  labels = {
    "terraform" : true
  }
}

Si deseas obtener más información para aplicar o quitar una configuración de Terraform, consulta los comandos básicos de Terraform.

Agrega el registro CNAME a tu configuración de DNS

Si usas Google Cloud para administrar tu DNS, completa los pasos en esta sección. De lo contrario, consulta la documentación de tu DNS de terceros. de Google Cloud.

Antes de completar los pasos de esta sección, asegúrate de haber creado un zona del DNS pública.

Cuando creas una autorización de DNS, el comando de gcloud CLI devuelve el registro CNAME correspondiente. Debes agregar este registro CNAME a tu configuración de DNS en la zona del DNS del dominio de destino de la siguiente manera:

gcloud

  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 del DNS de destino. zona.

  1. Agrega el registro CNAME a la zona del DNS de destino:
  gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"

Reemplaza lo siguiente:

  • CNAME_RECORD: Es el valor completo de los datos del registro CNAME. que devuelve el comando de Google Cloud CLI que creó el DNS correspondiente autorización.
  • 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 del 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"
  
  1. 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 del DNS de destino. zona.

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]
}

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 Administrador de certificados.

    Ir al Administrador de certificados

  2. En la página que aparece, selecciona la pestaña Certificados.

  3. Haz clic en Agregar certificado.

  4. Ingresa un Nombre para el certificado.

    Este nombre debe ser único para el proyecto.

  5. Opcional: Ingresa la Descripción del certificado. La descripción te ayuda a identificar un certificado específico más adelante.

  6. En Ubicación, elige Global.

  7. En Alcance, elige cualquiera de las siguientes opciones:

    1. Predeterminado: Elige la configuración predeterminada para el balanceador de cargas de aplicaciones externo global, el balanceador de cargas de aplicaciones clásico o el balanceador de cargas de red del proxy externo global.
    2. All-regions (Todas las regiones): Elige todas las regiones para un balanceador de cargas de aplicaciones interno entre regiones.
  8. En Tipo de certificado, elige Crear certificado administrado por Google.

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

  10. Especifica los Nombres de dominio del certificado. Ingresa una lista de los dominios de destino delimitada por comas. Además, cada nombre de dominio debe ser un nombre de dominio, como myorg.example.com.

  11. En Tipo de autorización, elige Autorización de DNS. Si el botón tiene una autorización de DNS asociada, se seleccionará automáticamente. Si el nombre de dominio no tiene una autorización de DNS asociada, haz lo siguiente:

    1. Haz clic en Crear autorización de DNS faltante para mostrar el campo Crear DNS Cuadro de diálogo de autorización
    2. En el campo Nombre de autorización de DNS, especifica el nombre de autorización de DNS.
    3. Haz clic en Crear autorización de DNS. Verifica que el nombre de DNS se asocie al nombre de dominio.
  12. Especifica una etiqueta para asociar al certificado. Puedes agregar más de una etiqueta, si es necesario. Para agregar una etiqueta, haz clic en Agregar etiqueta y especifica una key y una value para tu etiqueta.

  13. Haz clic en Crear. Verifica que el certificado nuevo aparezca en la lista de certificados.

gcloud

Para un balanceador de cargas de aplicaciones externo global, un balanceador de cargas de aplicaciones clásico Balanceador de cargas de red del proxy externo global:

Ejecuta el siguiente comando:

 gcloud certificate-manager certificates create CERTIFICATE_NAME 
--domains=DOMAIN_NAME
--dns-authorizations=AUTHORIZATION_NAME

Reemplaza lo siguiente:

  • CERTIFICATE_NAME: Es un nombre único del certificado.
  • DOMAIN_NAME: Es el dominio de destino del certificado. El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com
  • AUTHORIZATION_NAME: Es el nombre de la autorización de DNS que creaste para este certificado.

Para crear un certificado administrado por Google con un nombre de dominio comodín, usa el siguiente comando. Un certificado de nombre de dominio comodín abarca todos los subdominios de primer nivel de un dominio determinado.

gcloud certificate-manager certificates create CERTIFICATE_NAME \
    --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
    --dns-authorizations=AUTHORIZATION_NAME

Reemplaza lo siguiente:

  • CERTIFICATE_NAME: Es un nombre único del certificado.
  • DOMAIN_NAME: Es el dominio de destino del certificado. El prefijo de asterisco punto (*.) indica un certificado de comodín. Dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com.
  • AUTHORIZATION_NAME: Es el nombre de la autorización de DNS. que creaste para este certificado.

Para un balanceador de cargas de aplicaciones interno entre regiones:

Ejecuta el siguiente comando:

  gcloud certificate-manager certificates create CERTIFICATE_NAME 
--domains=DOMAIN_NAME
--dns-authorizations=AUTHORIZATION_NAME
--scope=all-regions

Reemplaza lo siguiente:

  • CERTIFICATE_NAME: Es un nombre único del certificado.
  • DOMAIN_NAME: Es el dominio de destino del certificado. El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com
  • AUTHORIZATION_NAME: Es el nombre de la autorización de DNS que creaste para este certificado.

Para crear un certificado administrado por Google con un nombre de dominio comodín, usa el siguiente comando. Un nombre de dominio comodín incluye todos los subdominios de primer nivel de un dominio determinado.

  gcloud certificate-manager certificates create CERTIFICATE_NAME \
      --domains="*.DOMAIN_NAME,DOMAIN_NAME" \
      --dns-authorizations=AUTHORIZATION_NAME \
      --scope=all-regions

Reemplaza lo siguiente:

  • CERTIFICATE_NAME: Es un nombre único del certificado.
  • DOMAIN_NAME: Es el dominio de destino del certificado. El prefijo de asterisco punto (*.) indica un certificado de comodín. El nombre de dominio debe ser un nombre de dominio completamente calificado, como myorg.example.com
  • AUTHORIZATION_NAME: Es el nombre de la autorización de DNS. que creaste para este certificado.

Terraform

Usa un recurso google_certificate_manager_certificate.

resource "google_certificate_manager_certificate" "root_cert" {
  name        = "${local.name}-rootcert-${random_id.tf_prefix.hex}"
  description = "The wildcard cert"
  managed {
    domains = [local.domain, "*.${local.domain}"]
    dns_authorizations = [
      google_certificate_manager_dns_authorization.default.id
    ]
  }
  labels = {
    "terraform" : true
  }
}

Verifica que el certificado esté activo

Usa el siguiente comando para verificar que el certificado esté activo antes de implementarlo en tu balanceador de cargas. Pueden pasar hasta varias horas estado del certificado para cambiar a ACTIVE.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Reemplaza CERTIFICATE_NAME por el nombre del destino. Certificado administrado por Google.

El comando muestra un resultado similar al siguiente:

expireTime: '2022-05-07T05:03:49Z'
managed:
  authorizationAttemptInfo:
  -   domain: myorg.example.com
    state: AUTHORIZED
  dnsAuthorizations:
  -   projects/my-project/locations/global/dnsAuthorizations/myAuth
  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'

Implementa el certificado en un balanceador de cargas

En esta sección, se explican los pasos necesarios para implementar el servicio administrado certificado en un balanceador de cargas.

Antes de continuar con las tareas de esta sección, asegúrate de haber completado las tareas enumeradas en el Crea un certificado administrado por Google con autorización de DNS sección.

Según el tipo de balanceador de cargas, puedes implementar certificados de la siguiente manera:

Implementa el certificado con un mapa de certificados

En esta sección, se describen los pasos para implementar un certificado con un certificado mapa.

Crea un mapa de certificados

Crea un mapa de certificados que hace referencia a la entrada del mapa de certificados asociado con tu certificado:

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Reemplaza CERTIFICATE_MAP_NAME por el nombre del destino. mapa de certificados.

Terraform

Para crear un mapa 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
  }
}

Crea una entrada del mapa de certificados

Crea una entrada de mapa de certificados. y asociarlo con tu certificado como y el mapa de certificados:

gcloud

gcloud certificate-manager maps entries create CERTIFICATE_MAP_ENTRY_NAME \
   --map="CERTIFICATE_MAP_NAME" \
   --certificates="CERTIFICATE_NAME" \
   --hostname="HOSTNAME"

Reemplaza lo siguiente:

  • CERTIFICATE_MAP_ENTRY_NAME: Es un nombre único del entrada del mapa de certificados
  • CERTIFICATE_MAP_NAME: Es el nombre del certificado asignado al que esta entrada del mapa de certificados adjunta
  • CERTIFICATE_NAME: Es el nombre del certificado que deseas. para asociar con esta entrada del mapa de certificados
  • HOSTNAME: Es el nombre de host que deseas asociar. con esta entrada de mapa de certificados

Terraform

Para crear una entrada del mapa de certificados, puedes usar 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
}

Verifica que la entrada del mapa de certificados esté activa

Usa el siguiente comando para verificar que la entrada de mapa de certificados esté activa antes de adjuntar tu mapa de certificados correspondiente al proxy de destino:

gcloud certificate-manager maps entries describe CERTIFICATE_MAP_ENTRY_NAME \
    --map="CERTIFICATE_MAP_NAME"

Reemplaza lo siguiente:

  • CERTIFICATE_MAP_ENTRY_NAME: Es el nombre del destino. entrada del mapa de certificados
  • CERTIFICATE_MAP_NAME: Es el nombre del certificado asignado al que esta entrada del mapa de certificados adjunta

El comando muestra un resultado 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

Adjunta el mapa de certificados configurado al proxy de destino:

gcloud

  1. En la consola de Google Cloud, ve a la página Proxies de destino.

    Ir a Proxies de destino

  2. Anota el nombre del proxy de destino.

  3. Conecta el mapa de certificados al proxy de destino:

  gcloud compute target-https-proxies update PROXY_NAME \
      --certificate-map="CERTIFICATE_MAP_NAME" \
      --global
  

Reemplaza lo siguiente:

  • PROXY_NAME: Es el nombre del proxy de destino.
  • CERTIFICATE_MAP_NAME: Es el nombre del certificado. haga referencia a la entrada del mapa de certificados y a los recursos certificado.

Terraform

Para adjuntar el mapa de certificados al proxy de destino, puedes usar un recurso google_compute_target_https_proxy.

Si hay certificados TLS (SSL) existentes conectados directamente al proxy, este da prioridad a los certificados a los que hace referencia el mapa de certificados sobre los certificados TLS (SSL) adjuntos directamente.

Adjunta el certificado directamente al proxy de destino

Para adjuntar el certificado directamente al proxy, ejecuta el siguiente comando:

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

Reemplaza lo siguiente:

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

Limpia

Para revertir los cambios que realizaste en este instructivo, completa los siguientes pasos: pasos:

  1. Desconecta el mapa de certificados del proxy.

    Antes de separar el mapa de certificados, ten en cuenta lo siguiente:

    • Si había certificados TLS (SSL) conectados directamente al proxy, el desprendimiento del mapa de certificados hace que el proxy reanude el uso de esos certificados TLS (SSL) conectados directamente.
    • Si no había certificados TLS (SSL) adjuntos directamente al proxy, el mapa de certificados no se puede separar del proxy. Primero debes al menos un certificado TLS (SSL) directamente al proxy antes puedes separar el mapa de certificados.

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

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

    Reemplaza PROXY_NAME por el nombre del proxy de destino.

  2. Borra la entrada del mapa de certificados del mapa de certificados:

    gcloud certificate-manager maps entries delete CERTIFICATE_MAP_ENTRY_NAME \
       --map="CERTIFICATE_MAP_NAME"
    

    Reemplaza lo siguiente:

    • CERTIFICATE_MAP_ENTRY_NAME: Es el nombre de la entrada del mapa de certificados de destino.
    • CERTIFICATE_MAP_NAME: Es el nombre del destino. mapa de certificados.
  3. Borra el mapa de certificados:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Reemplaza CERTIFICATE_MAP_NAME por el nombre del destino. mapa de certificados.

  4. Borra el certificado administrado por Google:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Reemplaza CERTIFICATE_NAME por el nombre del destino. certificado.

  5. Borra la autorización de DNS:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
    

    Reemplaza AUTHORIZATION_NAME por el nombre del destino. Autorización de DNS.

¿Qué sigue?