Déployer un certificat global géré par Google avec une autorisation DNS


Ce tutoriel vous présente le processus de déploiement de certificat à l'aide d'un certificat géré par Google avec l'autorisation DNS comme exemple.

Les équilibreurs de charge suivants acceptent les certificats gérés par Google avec autorisation DNS:

  • Équilibreur de charge d'application externe mondial
  • Équilibreur de charge d'application classique
  • Équilibreur de charge d'application interne interrégional
  • Équilibreur de charge réseau proxy externe global

Pour comparer les types d'autorisation de domaine compatibles, consultez la section Autorisations de domaine.

Si vous souhaitez migrer un certificat existant vers le gestionnaire de certificats, suivez plutôt la procédure décrite dans Migrer des certificats vers le gestionnaire de certificats.

Objectifs

Ce guide vous explique comment effectuer les tâches suivantes :

  • À l'aide du gestionnaire de certificats, créez un certificat géré par Google émis par une autorité de certification de confiance publique avec une autorisation DNS.
  • Déployez le certificat sur un équilibreur de charge compatible à l'aide d'un proxy HTTPS cible.

Pour en savoir plus sur le processus de déploiement du certificat, consultez la section Présentation du déploiement.

Avant de commencer

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

    Go to project selector

  2. La version 465.0.0 ou ultérieure de la gcloud CLI est nécessaire pour déployer le certificat. Pour vérifier votre version de gcloud CLI, exécutez la commande suivante:

    gcloud --version
    
  3. Pour mettre à jour la gcloud CLI, exécutez la commande suivante.

    gcloud components update
    
  4. Assurez-vous de disposer des rôles suivants pour effectuer les tâches de ce tutoriel:

    • Propriétaire du gestionnaire de certificats: nécessaire pour créer et gérer les ressources du gestionnaire de certificats.
    • Administrateur de l'équilibreur de charge Compute ou Administrateur de réseaux Compute:nécessaire pour créer et gérer un proxy cible HTTPS.
    • Administrateur DNS:obligatoire si vous souhaitez utiliser Cloud DNS comme solution DNS.

    Pour en savoir plus, consultez les ressources suivantes :

Créer un certificat géré par Google avec une autorisation DNS

Suivez la procédure décrite dans cette section pour créer une autorisation DNS et un certificat géré par Google faisant référence à cette autorisation DNS.

Créer une autorisation DNS

Créez l'autorisation DNS comme décrit dans cette section. Si vous créez une autorisation DNS pour un certificat générique, tel que *.myorg.example.com, configurez l'autorisation DNS pour le domaine parent (par exemple, myorg.example.com).

gcloud

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

Pour utiliser l'autorisation DNS par projet (version preview), exécutez la commande suivante:

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

Remplacez les éléments suivants :

  • AUTHORIZATION_NAME: nom de l'autorisation DNS.
  • DOMAIN_NAME: nom du domaine pour lequel vous créez cette autorisation DNS. Le nom de domaine doit être un nom de domaine complet, tel que myorg.example.com.

La commande renvoie un résultat semblable à celui-ci : Utilisez l'enregistrement CNAME de la sortie pour l'ajouter à votre configuration 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

Pour créer une autorisation DNS, vous pouvez utiliser une ressource 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
  }
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Ajouter l'enregistrement CNAME à votre configuration DNS

Si vous utilisez Google Cloud pour gérer votre DNS, suivez la procédure décrite dans cette section. Sinon, consultez la documentation de votre solution DNS tierce.

Avant d'effectuer les étapes de cette section, assurez-vous d'avoir créé une zone DNS publique.

Lorsque vous créez une autorisation DNS, la commande de gcloud CLI renvoie l'enregistrement CNAME correspondant. Vous devez ajouter cet enregistrement CNAME à votre configuration DNS dans la zone DNS du domaine cible comme suit :

gcloud

  1. Lancez la transaction d'enregistrement DNS :
  gcloud dns record-sets transaction start --zone="DNS_ZONE_NAME"

Remplacez DNS_ZONE_NAME par le nom de la zone DNS cible.

  1. Ajoutez l'enregistrement CNAME à la zone DNS cible :
  gcloud dns record-sets transaction add CNAME_RECORD \
      --name="_acme-challenge.DOMAIN_NAME." \
      --ttl="30" \
      --type="CNAME" \
      --zone="DNS_ZONE_NAME"

Remplacez les éléments suivants :

  • CNAME_RECORD: valeur de données complète de l'enregistrement CNAME renvoyé par la commande Google Cloud CLI qui a créé l'autorisation DNS correspondante.
  • DOMAIN_NAME: nom du domaine cible. Le nom de domaine doit être un nom de domaine complet, tel que myorg.example.com. Vous devez également inclure le point final après le nom du domaine cible.
  • DNS_ZONE_NAME: nom de la zone DNS cible.

Consultez l'exemple ci-dessous :

  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. Exécutez la transaction d'enregistrement DNS pour enregistrer vos modifications:
  gcloud dns record-sets transaction execute --zone="DNS_ZONE_NAME"
  

Remplacez DNS_ZONE_NAME par le nom de la zone DNS cible.

Terraform

Pour ajouter l'enregistrement CNAME à votre configuration DNS, vous pouvez utiliser une ressource 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]
}

Créer un certificat géré par Google faisant référence à l'autorisation DNS

Pour créer un certificat géré par Google qui référence l'autorisation DNS que vous avez créée aux étapes précédentes, procédez comme suit:

Console

  1. Dans la console Google Cloud, accédez à la page Gestionnaire de certificats.

    Accéder au gestionnaire de certificats

  2. Sur la page qui s'affiche, sélectionnez l'onglet Certificats.

  3. Cliquez sur Ajouter un certificat.

  4. Saisissez un nom pour le certificat.

    Ce nom doit être unique au projet.

  5. Facultatif: saisissez la description du certificat. La description vous aidera ultérieurement à identifier un certificat spécifique.

  6. Dans le champ Emplacement, sélectionnez Mondial.

  7. Pour Portée, choisissez l'une des options suivantes:

    1. Par défaut: choisissez la valeur par défaut pour un équilibreur de charge d'application externe global, un équilibreur de charge d'application classique ou un équilibreur de charge réseau proxy externe global.
    2. All-regions (Toutes les régions) : choisissez toutes les régions pour un équilibreur de charge d'application interne interrégional.
  8. Pour Type de certificat, sélectionnez Créer un certificat géré par Google.

  9. Dans le champ Type d'autorité de certification, sélectionnez Public.

  10. Indiquez les noms de domaine du certificat. Saisissez la liste des domaines cibles, séparés par une virgule. En outre, chaque nom de domaine doit être un nom de domaine complet, tel que myorg.example.com.

  11. Dans Type d'autorisation, sélectionnez Autorisation DNS. Si le nom de domaine est associé à une autorisation DNS, il sera automatiquement récupéré. Si le nom de domaine n'est associé à aucune autorisation DNS, procédez comme suit:

    1. Cliquez sur Créer une autorisation DNS manquante pour afficher la boîte de dialogue "Créer une autorisation DNS".
    2. Dans le champ Nom d'autorisation DNS, spécifiez le nom de l'autorisation DNS.
    3. Cliquez sur Créer une autorisation DNS. Vérifiez que le nom DNS est associé au nom de domaine.
  12. Spécifiez une étiquette à associer au certificat. Si nécessaire, vous pouvez ajouter plusieurs étiquettes. Pour ajouter un libellé, cliquez sur le bouton Ajouter une étiquette , puis spécifiez les paramètres key et value pour votre libellé.

  13. Cliquez sur Créer. Vérifiez que le nouveau certificat apparaît dans la liste des certificats.

gcloud

Pour un équilibreur de charge d'application externe global, un équilibreur de charge d'application classique ou un équilibreur de charge réseau proxy externe global:

Exécutez la commande ci-dessous.

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

Remplacez les éléments suivants :

  • CERTIFICATE_NAME: nom unique du certificat.
  • DOMAIN_NAME: domaine cible du certificat Le nom de domaine doit être un nom de domaine complet, tel que myorg.example.com.
  • AUTHORIZATION_NAME: nom de l'autorisation DNS que vous avez créée pour ce certificat.

Pour créer un certificat géré par Google avec un nom de domaine générique, utilisez la commande suivante. Un certificat de nom de domaine générique couvre tous les sous-domaines de premier niveau d'un domaine donné.

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

Remplacez les éléments suivants :

  • CERTIFICATE_NAME: nom unique du certificat.
  • DOMAIN_NAME: domaine cible du certificat Le préfixe astérisque (*.) indique un certificat générique. Le nom de domaine doit être un nom de domaine complet, tel que myorg.example.com.
  • AUTHORIZATION_NAME: nom de l'autorisation DNS que vous avez créée pour ce certificat.

Pour un équilibreur de charge d'application interne interrégional:

Exécutez la commande ci-dessous.

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

Remplacez les éléments suivants :

  • CERTIFICATE_NAME: nom unique du certificat.
  • DOMAIN_NAME: domaine cible du certificat Le nom de domaine doit être un nom de domaine complet, tel que myorg.example.com.
  • AUTHORIZATION_NAME: nom de l'autorisation DNS que vous avez créée pour ce certificat.

Pour créer un certificat géré par Google avec un nom de domaine générique, utilisez la commande suivante. Un certificat de nom de domaine générique couvre tous les sous-domaines de premier niveau d'un domaine donné.

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

Remplacez les éléments suivants :

  • CERTIFICATE_NAME: nom unique du certificat.
  • DOMAIN_NAME: domaine cible du certificat Le préfixe astérisque (*.) indique un certificat générique. Le nom de domaine doit être un nom de domaine complet, tel que myorg.example.com.
  • AUTHORIZATION_NAME: nom de l'autorisation DNS que vous avez créée pour ce certificat.

Terraform

Utilisez une ressource 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
  }
}

Vérifier que le certificat est actif

Utilisez la commande suivante pour vérifier que le certificat lui-même est actif avant de le déployer sur votre équilibreur de charge. Il peut s'écouler plusieurs heures avant que l'état du certificat ne passe à ACTIVE.

gcloud certificate-manager certificates describe CERTIFICATE_NAME

Remplacez CERTIFICATE_NAME par le nom du certificat géré par Google cible.

La commande renvoie un résultat semblable à celui-ci :

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'

Déployer le certificat sur un équilibreur de charge

Cette section décrit la procédure à suivre pour déployer le certificat géré par Google sur un équilibreur de charge.

Avant d'effectuer les tâches de cette section, assurez-vous d'avoir effectué les tâches indiquées dans la section Créer un certificat géré par Google avec une autorisation DNS.

Selon le type d'équilibreur de charge, vous pouvez déployer les certificats comme suit:

Déployer le certificat à l'aide d'un mappage de certificat

Cette section décrit les étapes à suivre pour déployer un certificat à l'aide d'un mappage de certificats.

Créer un mappage de certificat

Créez un mappage de certificats qui référence l'entrée de mappage de certificats associée à votre certificat:

gcloud

gcloud certificate-manager maps create CERTIFICATE_MAP_NAME

Remplacez CERTIFICATE_MAP_NAME par le nom du mappage de certificats cible.

Terraform

Pour créer un mappage de certificat, vous pouvez utiliser une ressource 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
  }
}

Créer une entrée de mappage de certificats

Créez une entrée de mappage de certificats et associez-la à votre certificat ainsi qu'à votre mappage de certificats:

gcloud

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

Remplacez les éléments suivants :

  • CERTIFICATE_MAP_ENTRY_NAME: nom unique de l'entrée de mappage de certificats
  • CERTIFICATE_MAP_NAME: nom du mappage de certificat auquel cette entrée de mappage de certificat est associée.
  • CERTIFICATE_NAME: nom du certificat que vous souhaitez associer à cette entrée de mappage de certificats
  • HOSTNAME: nom d'hôte que vous souhaitez associer à cette entrée de mappage de certificats

Terraform

Pour créer une entrée de mappage de certificats, vous pouvez utiliser une ressource 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
}

Vérifier que l'entrée de mappage de certificat est active

Exécutez la commande suivante pour vérifier que l'entrée de mappage de certificat est active avant d'associer le mappage de certificat correspondant au proxy cible 

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

Remplacez les éléments suivants :

  • CERTIFICATE_MAP_ENTRY_NAME: nom de l'entrée de mappage de certificats cible
  • CERTIFICATE_MAP_NAME: nom du mappage de certificat auquel cette entrée de mappage de certificat est associée.

La commande renvoie un résultat semblable à celui-ci :

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'

Associer le mappage de certificat au proxy cible

Associez le mappage de certificat configuré au proxy cible:

gcloud

  1. Dans la console Google Cloud, accédez à la page Proxys cibles.

    Accéder à la page "Proxys cibles"

  2. Notez le nom du proxy cible.

  3. Associez le mappage de certificat au proxy cible:

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

Remplacez les éléments suivants :

  • PROXY_NAME: nom du proxy cible.
  • CERTIFICATE_MAP_NAME: nom du mappage de certificats référençant votre entrée de mappage de certificats et le certificat associé.

Terraform

Pour associer le mappage de certificat au proxy cible, vous pouvez utiliser une ressource google_compute_target_https_proxy.

Si des certificats TLS (SSL) existants sont directement associés au proxy, celui-ci privilégie les certificats référencés par le mappage de certificats par rapport aux certificats TLS (SSL) directement associés.

Associer le certificat directement au proxy cible

Pour associer le certificat directement au proxy, exécutez la commande suivante:

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

Remplacez les éléments suivants :

  • PROXY_NAME: nom unique du proxy.
  • URL_MAP : nom du mappage d'URL. Vous avez créé le mappage d'URL lors de la création de l'équilibreur de charge.
  • CERTIFICATE_NAME: nom du certificat.

Effectuer un nettoyage

Pour annuler les modifications que vous avez apportées dans ce tutoriel, procédez comme suit:

  1. Dissociez le mappage de certificat du proxy.

    Avant de dissocier le mappage de certificats, tenez compte des points suivants:

    • Si des certificats TLS (SSL) étaient directement associés au proxy, la dissociation du mappage de certificats remet le proxy à utiliser ces certificats TLS (SSL) directement associés.
    • Si aucun certificat TLS (SSL) n'est directement associé au proxy, le mappage de certificats ne peut pas être dissocié du proxy. Vous devez d'abord associer au moins un certificat TLS (SSL) directement au proxy avant de pouvoir dissocier le mappage de certificats.

    Pour dissocier le mappage de certificats, exécutez la commande suivante:

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

    Remplacez PROXY_NAME par le nom du proxy cible.

  2. Supprimez l'entrée du mappage de certificat du mappage de certificat:

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

    Remplacez les éléments suivants :

    • CERTIFICATE_MAP_ENTRY_NAME: nom de l'entrée de mappage de certificats cible.
    • CERTIFICATE_MAP_NAME: nom du mappage de certificats cible.
  3. Supprimez le mappage de certificat:

    gcloud certificate-manager maps delete CERTIFICATE_MAP_NAME
    

    Remplacez CERTIFICATE_MAP_NAME par le nom du mappage de certificats cible.

  4. Supprimez le certificat géré par Google:

    gcloud certificate-manager certificates delete CERTIFICATE_NAME
    

    Remplacez CERTIFICATE_NAME par le nom du certificat cible.

  5. Supprimez l'autorisation DNS:

    gcloud certificate-manager dns-authorizations delete AUTHORIZATION_NAME
    

    Remplacez AUTHORIZATION_NAME par le nom de l'autorisation DNS cible.

Étapes suivantes