Obtenir des certificats TLS : exemple

Ce sujet est fourni à titre d'exemple uniquement. Il explique comment obtenir un certificat TLS auprès de l'autorité de certification Let's Encrypt. Ces étapes sont principalement fournies à titre d'exemple si vous ne disposez pas d'un autre moyen prêt à obtenir une paire certificat/clé autorisée par une autorité de certification. L'exemple montre comment générer des certificats à l'aide de l'autorité de certification Let's Encrypt, du client Certbot et du service Cloud DNS de Google Cloud Platform.

Où utiliser ces certificats ?

Vous devez fournir des certificats TLS pour deux passerelles d'entrée Istio exposées en dehors du cluster :

Passerelle Exigence TLS
Passerelle d'entrée de l'environnement d'exécution Vous pouvez utiliser une paire certificat/clé autosignée ou des certificats TLS autorisés.
Passerelle d'entrée MART (facultative si vous n'utilisez pas Apigee Connect) Nécessite une paire certificat TLS autorisé/clé ou un secret Kubernetes.
Consultez également la section Connexions externes.

Exigences

Vous aurez besoin d'un nom de domaine obtenu via un service d'enregistrement de noms de domaine. Vous pouvez enregistrer un nom de domaine via Google Domains ou un autre service d'enregistrement de votre choix.

Configurer Cloud DNS

Pour obtenir des certificats TLS autorisés, vous devez disposer d'un nom de domaine qualifié. La procédure suivante explique comment utiliser Google Cloud DNS pour obtenir un nom de domaine et gérer vos serveurs de domaine.
  1. Ouvrez Google Cloud Console, puis connectez-vous avec le compte que vous avez créé à l'étape 1 : Créer un compte Google Cloud.
  2. Sélectionnez le projet que vous avez créé à l'étape 2 : Créer un projet Google Cloud.
  3. Si vous ne l'avez pas déjà fait, activez l'API Cloud DNS. Consultez la page Activer des API.
  4. Créez une adresse IP statique :
    • Si vous utilisez GKE, suivez les instructions de la section Réserver une adresse IP statique externe pour créer une adresse IP statique permettant aux processus externes de communiquer avec l'entrée d'exécution hybride. Vous pouvez donner à l'adresse le nom de votre choix, par exemple : apigee-hybrid-runtime. Lorsque vous avez terminé, vous utiliserez le numéro IP dans la configuration du cluster à l'étape suivante. Par exemple : 34.66.75.196.
    • Si vous utilisez Anthos GKE, suivez les instructions de la documentation Anthos GKE pour créer une adresse IP statique.
  5. Obtenez l'adresse IP externe que vous venez de réserver.
  6. Créez un jeu d'enregistrements pour le point de terminaison d'entrée Istio de l'environnement d'exécution. Il s'agit de l'adresse permettant d'effectuer des appels d'API vers la passerelle hybride. Saisissez l'adresse IP externe obtenue à l'étape précédente et ajoutez un préfixe au nom de domaine, tel que example-endpoint. Pour obtenir des instructions, consultez l'article Créer un enregistrement.
    1. Créer une zone gérée publique Pour obtenir des instructions, consultez la page Créer une zone publique gérée.
    2. Créez un jeu d'enregistrements avec :
      • Nom du DNS : nom du point de terminaison avec lequel les appels à l'API externe vont communiquer (par exemple, api-services ou example-endpoint)
      • Type d'enregistrement de la ressource : A
      • TTL et TTL Unit : accepter les valeurs par défaut
      • Adresse IP : l'adresse IP statique que vous avez créée.
  7. La vue Détails de la zone répertorie quatre serveurs DNS en tant que données NS pour votre nouvelle zone. Copiez les données d'enregistrement DNS, comme indiqué dans l'exemple suivant :

  8. Revenez à la page de votre domaine dans votre bureau d'enregistrement (par exemple, Google Domains).
  9. Sélectionnez votre domaine.
  10. Sélectionnez DNS.
  11. Dans la section "Serveurs de noms", cliquez sur Modifier.
  12. Saisissez les serveurs de noms de domaine que vous avez copiés depuis la page Cloud Services DNS : Exemple :

Votre Google Cloud DNS gère désormais les enregistrements DNS pour votre domaine.

Installer Certbot sur une VM

Maintenant que Cloud DNS est configuré pour gérer vos serveurs de domaine, vous allez installer le client Certbot avec le plug-in dns_google sur une VM Cloud. Le client vous permet d'obtenir des certificats autorisés pour votre domaine à partir d'un point de terminaison Let's Encrypt.

  1. Ouvrez Google Cloud Console, puis connectez-vous avec le compte que vous avez créé à l'étape 1 : Créer un compte Google Cloud.
  2. Sélectionnez le projet que vous avez créé à l'étape 2 : Créer un projet Google Cloud.
  3. Sélectionnez IAM et administration > Comptes de service.

    La vue des comptes de service affiche la liste des comptes de service du projet.

  4. Pour créer un compte de service, cliquez sur + Créer un compte de service en haut de la vue.

    La vue Détails du compte de service s'affiche.

  5. Dans le champ Nom du compte de service, saisissez le nom du compte de service.

    Vous pouvez éventuellement ajouter une description dans le champ Description du compte de service. Les descriptions sont utiles pour vous rappeler quel compte de service particulier est utilisé.

  6. Cliquez sur Create (Créer).

    Google Cloud crée un compte de service et affiche la vue Autorisations de compte de service. Utilisez cette vue pour attribuer un rôle à votre nouveau compte de service.

  7. Cliquez sur la liste déroulante Sélectionner un rôle.
  8. Sélectionnez le rôle Propriétaire du projet.
  9. Cliquez sur Continuer.
  10. Cliquez sur OK.
  11. Dans Google Cloud Console, sélectionnez Compute Engine > Instances de VM.
  12. Créez une instance de VM nommée certmanager :
  13. Dans la section Disque de démarrage, choisissez CentOS7 et 20 Go pour le disque persistant SSD.
  14. Définissez le compte de service sur celui que vous avez créé ci-dessus.
  15. Installez certbot et le plug-in dns_google sur la machine, puis exécutez le client certbot :
      sudo su -
      yum -y install yum-utils
      yum install certbot -y
      yum install certbot-dns-google -y
      certbot certonly --dns-google -d *.your_domain_name,*.your_domain_name --server https://acme-v02.api.letsencrypt.org/directory
      

    Exemple :

    sudo su -
    yum -y install yum-utils
    yum install certbot -y
    yum install certbot-dns-google -y
    certbot certonly --dns-google -d *.apigee-hybrid-docs.net,*.apigee-hybrid-docs.net --server https://acme-v02.api.letsencrypt.org/directory
    
  16. Vous pouvez maintenant trouver vos fichiers de certificat et de clé privée dans ce répertoire : cd /etc/letsencrypt/live/your_domain_name/

    Exemple :

    cd /etc/letsencrypt/live/apigee-hybrid-docs.net
    ls
      cert.pem  chain.pem  fullchain.pem  privkey.pem  README
  17. Copiez les fichiers fullchain.pem et privkey.pem sur votre ordinateur local.
  18. Facultatif : Créez un secret Kubernetes avec la paire certificat/clé. Consultez les instructions de l'Option 2 : secret Kubernetes à la page Configurer les protocoles TLS et mTLS sur l'entrée Istio.
  19. Mettez à jour votre fichier de remplacement pour qu'il pointe vers le certificat et la clé privée.

    Exemple :

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
        sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
      sslCertPath: "$HOME/hybrid/apigee-hybrid-setup/tls/fullchain.pem"
      sslKeyPath: "$HOME/hybrid/apigee-hybrid-setup/tls/privkey.pem"
      replicaCountMin: 1
      replicaCountMax: 1

    Ou, si vous utilisez des secrets Kubernetes :

    ...
    envs:
      - name: test
        serviceAccountPaths:
          synchronizer: "your_keypath/synchronizer-manager-service-account.json
          udca: "your_keypath/analytic-agent-service-account.json
    
    virtualhosts:
      - name: my-env-group
        tlsMode: SIMPLE  # Note: SIMPLE is the default, MUTUAL is also an available value.
        sslSecret: myorg-test-policy-secret"
    
    mart: # Assuming you are not using Apigee Connect
      nodeSelector:
        key: cloud.google.com/gke-nodepool
        value: apigee-runtime
        sslSecret: myorg-test-policy-secret"
      replicaCountMin: 1
      replicaCountMax: 1
    
    ...  
  20. Appliquer les modifications

    Si vous avez modifié la configuration mart, appliquez les modifications :

    apigeectl apply -f your_overrides_file --all-envs

    Si vous avez modifié la configuration envs, appliquez les modifications :

    apigeectl apply -f your_overrides_file --all-envs
  21. Tester la configuration

    Déployez et testez un proxy, comme expliqué dans la section Créer et déployer un nouveau proxy API.