Diffuser du contenu HTTP et HTTPS sur le même domaine publié

Il est courant de diffuser du contenu HTTP et HTTPS depuis le même nom d'hôte lorsque vous utilisez Cloud CDN. Même si de nombreux navigateurs appliquent l'utilisation du protocole TLS (Transport Layer Security) et interdisent la diffusion de contenu non sécurisée, il existe toujours des cas d'utilisation pour lesquels la diffusion sécurisée et la diffusion non sécurisée doivent être autorisées sur le même nom d'hôte. Cet article explique comment mettre en place cette fonctionnalité à l'aide de Cloud CDN.

Défi

Lorsqu'un client établit une connexion avec un serveur CDN périphérique, le protocole de diffusion de l'utilisateur final est négocié. La plupart des plates-formes CDN traditionnelles dirigent le trafic vers leur empreinte de diffusion respective :

  1. En pointant vers un nom de domaine appartenant au CDN, à l'aide d'un enregistrement DNS CNAME.
  2. En acheminant le trafic vers un sous-ensemble de serveurs compatibles avec la négociation TLS pour ce nom de domaine.

Cloud CDN étant intégré à Cloud Load Balancing, l'approche utilisée par Cloud CDN diffère de celle des CDN traditionnels. Cloud CDN exploite l'adresse IP Anycast de l'équilibreur de charge HTTP(S) externe. Lorsque vous configurez Cloud CDN, vous disposez d'une adresse IP spécifique vers laquelle diriger le trafic. Cela nécessite un enregistrement A (pour IPv4) et/ou AAAA (pour IPv6) dans votre enregistrement DNS, plutôt qu'un enregistrement CNAME avec une valeur de nom d'hôte.

Par défaut, lors de la configuration de l'interface de l'équilibreur de charge, Google Cloud attribue dynamiquement une adresse IP éphémère. Étant donné que vous devez configurer séparément vos configurations HTTP et HTTPS, il se peut que vous disposiez de deux adresses IP pour votre instance Cloud CDN. Étant donné que la même adresse IP d'enregistrement A ou AAAA est à la fois HTTP et HTTPS, il n'est pas possible de gérer ce cas de manière appropriée dans le DNS.

Solution

Lorsque vous diffusez du contenu sécurisé et non sécurisé depuis le même nom d'hôte, le client est dirigé vers un serveur périphérique capable de négocier le protocole HTTP ou HTTPS. Pour réaliser cela avec Cloud CDN, vous pouvez réserver une adresse IP et lier l'adresse IP réservée à la configuration des deux interfaces HTTP et HTTPS dans l'équilibreur de charge HTTP(S) externe.

HTTP et HTTPS sur le même domaine
HTTP et HTTPS sur le même domaine

Dans le diagramme :

  • Les requêtes entrantes pour www.example.com proviennent de clients utilisant HTTP/2, HTTPS et HTTP.
  • Deux adresses IP sont réservées, une pour IPv4 et une pour IPv6 :

    • 34.95.111.204
    • [2600:1901:0:b13e::]
  • Ces deux adresses IP sont liées à www.example.com dans Cloud DNS.

  • Lors de la configuration de l'équilibreur de charge HTTP(S) externe, la configuration de l'interface inclut quatre règles de transfert qui utilisent les adresses IP réservées :

    Nom Protocole IP:Port
    ipv4-http HTTP 34.95.111.204:80
    ipv4-https HTTPS 34.95.111.204:443
    ipv6-http HTTP [2600:1901:0:b13e::]:80
    ipv6-https HTTPS [2600:1901:0:b13e::]:443
  • Pour les défauts de cache (miss) de Cloud CDN, l'équilibreur de charge répartit les requêtes vers les origines du backend, en fonction des paramètres définis dans le mappage d'URL de l'équilibreur de charge.

Étape 1 : Réserver une adresse IP externe globale

Créez une adresse IPv4 ou IPv6 (ou les deux). Pour accepter l'adressage IPv4 et IPv6, vous devez créer une adresse IPv4 et une adresse IPv6.

Dans votre enregistrement DNS, créez un enregistrement A (ou AAAA) pour diriger le trafic vers cette adresse IP réservée.

Console

  1. Dans Google Cloud Console, accédez à la page Adresses IP externes.

    Accéder à la page Adresses IP externes

  2. Cliquez sur Réserver une adresse statique pour réserver une adresse IPv4.
  3. Attribuez un Nom à ipv4-address.
  4. Définissez le niveau réseau à la valeur Premium.
  5. Définissez Version IP sur IPv4.
  6. Définissez le Type à la valeur Global.
  7. Cliquez sur Réserver.

L'équilibreur de charge utilise la mise en réseau de niveau Premium, comme requis à l'activation de Cloud CDN.

gcloud

gcloud compute addresses create ipv4-address \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Notez l'adresse IPv4 réservée :

gcloud compute addresses describe lb-ipv4-1 \
    --format="get(address)" \
    --global

Répétez cette étape pour IPv6.

Pour en savoir plus, consultez la section Réserver une adresse IP externe statique.

Étape 2 : Associer l'adresse IP réservée à l'équilibreur de charge

Cette section explique comment attribuer la ou les adresses IP à votre équilibreur de charge. Les instructions de configuration de bout en bout de l'équilibreur de charge dépassent le cadre de cet article. Pour obtenir un exemple de configuration, consultez la page Créer un équilibreur de charge HTTPS.

La section de configuration de l'interface vous permet de sélectionner le protocole utilisé entre le client et l'équilibreur de charge.

Dans cet exemple, vous utilisez les deux protocoles HTTP et HTTPS entre le client et l'équilibreur de charge. Vous devez donc disposer d'une ou plusieurs ressources de certificat SSL pour configurer le proxy.

Console

Configurer la règle de transfert HTTP

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur votre équilibreur de charge, puis sur Modifier.
  3. Dans le panneau de gauche, cliquez sur Configuration de l'interface.
  4. Dans le champ Nom, saisissez ipv4-http.
  5. Dans le champ Protocole, sélectionnez HTTP.
  6. Définissez Version IP sur IPv4.
  7. Dans Adresse IP, sélectionnez l'adresse ipv4-address, que vous avez créée précédemment.
  8. Assurez-vous que le port est défini sur la valeur 80 pour autoriser le trafic HTTP.
  9. Cliquez sur OK.

Configurer la règle de transfert HTTPS

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page Équilibrage de charge

  2. Cliquez sur votre équilibreur de charge, puis sur Modifier.
  3. Dans le panneau de gauche, cliquez sur Configuration de l'interface.
  4. Dans le champ Nom, saisissez ipv4-https.
  5. Dans le champ Protocole, sélectionnez HTTPS.
  6. Définissez Version IP sur IPv4.
  7. Dans Adresse IP, sélectionnez l'adresse ipv4-address, que vous avez créée précédemment.
  8. Assurez-vous que le port est défini sur la valeur 443 pour autoriser le trafic HTTP.
  9. Cliquez sur la liste déroulante Certificat.
    1. Si vous possédez déjà une ressource de certificat SSL autogérée que vous souhaitez utiliser comme certificat SSL principal, sélectionnez-la dans le menu déroulant.
    2. Sinon, sélectionnez Créer un certificat.
    3. Sélectionnez Importer mon certificat ou Créer un certificat géré par Google.
    4. Si vous avez choisi Importer mon certificat, procédez comme suit :
      1. Pour le nom, indiquez www-ssl-cert.
      2. Dans les champs correspondants, importez respectivement votre Certificat de clé publique (fichier .crt), votre Chaîne de certificats (fichier .csr) et votre Clé privée (fichier .key).
      3. Cliquez sur Créer.
    5. Si vous avez choisi de Créer un certificat géré par Google, saisissez un Domaine.
    6. Pour ajouter des ressources de certificat en plus de la ressource de certificat SSL principale, procédez comme suit :
      1. Cliquez sur Ajouter un certificat.
      2. Sélectionnez un certificat dans la liste Certificats ou cliquez sur Créer un certificat, puis suivez les instructions ci-dessus.
  10. Cliquez sur OK.

Répétez ces étapes pour IPv6.

Vérifier et finaliser

  1. Dans le panneau de gauche, cliquez sur Vérification et finalisation.
  2. Comparez vos paramètres à ce que vous aviez l'intention de créer.
  3. Si tout vous semble correct, cliquez sur Mettre à jour.

gcloud

  1. Créez un proxy HTTP cible pour acheminer les requêtes vers votre mappage d'URL :

    gcloud compute target-http-proxies create http-lb-proxy \
      --url-map=web-map
    
  2. Créez un proxy HTTPS cible pour rediriger les requêtes vers votre mappage d'URL. Le proxy est la partie de l'équilibreur de charge qui contient le certificat SSL pour l'équilibrage de charge HTTPS. Vous chargez donc également votre certificat à cette étape :

    gcloud compute target-https-proxies create https-lb-proxy \
      --url-map=web-map --ssl-certificates=www-ssl-cert
    
  3. Créez deux règles de transfert globales pour acheminer les requêtes entrantes vers le proxy, une pour chacune des adresses IP que vous avez créées.

    • Pour un équilibreur de charge HTTP(S) externe global (version bêta), utilisez la version beta de la commande de l'outil gcloud et load-balancing-scheme=EXTERNAL_MANAGED. Ce paramètre offre une fonctionnalité de gestion avancée du trafic.
    • Pour un équilibreur de charge HTTP(S) externe global (classique), utilisez load-balancing-scheme=EXTERNAL.
    gcloud compute forwarding-rules create ipv4-http \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address \
      --global \
      --target-http-proxy=http-lb-proxy \
      --ports=80
    
    gcloud compute forwarding-rules create ipv4-https \
      --load-balancing-scheme=LOAD_BALANCING_SCHEME \
      --network-tier=PREMIUM \
      --address=ipv4-address  \
      --global \
      --target-https-proxy=https-lb-proxy \
      --ports=443
    

Une fois les règles de transfert globales créées, la propagation de votre configuration peut prendre plusieurs minutes.

Étape 3 : Créer un enregistrement A ou AAAA dans votre fichier de zone DNS

La dernière étape du processus consiste à créer un enregistrement A et/ou AAAA dans votre fichier de zone DNS pour pointer vers Cloud CDN. La valeur de votre nom d'hôte répondra par la ou les adresses IP réservées que vous avez attribuées à l'équilibreur de charge.

Vous pouvez à présent diffuser du trafic HTTP et HTTPS depuis le même nom d'hôte via Cloud CDN.

Facultatif : Rediriger HTTP vers HTTPS

Si vous souhaitez rediriger les requêtes HTTP vers votre équilibreur de charge HTTPS, vous devez ajouter un équilibreur de charge HTTP partiel comportant une interface, mais aucun backend. L'interface reçoit les requêtes, puis les redirige vers l'équilibreur de charge HTTPS. Pour ce faire, elle utilise les éléments suivants :

  • Une règle de transfert ayant la même adresse IP externe réservée que celle utilisée par votre équilibreur de charge HTTPS, comme illustré sur cette page
  • Un proxy HTTP cible, comme illustré sur cette page
  • Un mappage d'URL qui redirige le trafic vers l'équilibreur de charge HTTPS

Assistance

Si vous avez des questions sur Google Cloud et Cloud CDN, contactez votre équipe commerciale Google Cloud ou contactez la communauté Slack de Google Cloud et publiez une note sur la chaîne #cloud-cdn.

Étape suivante