Déployer un réseau hub-and-spoke à l'aide de Cloud VPN

Last reviewed 2022-01-11 UTC

Ce tutoriel explique comment configurer un réseau hub-and-spoke dans Google Cloud à l'aide de Cloud VPN.

Le schéma suivant illustre l'architecture que vous déployez. Il se compose de deux réseaux VPC spoke, chacun connecté à un réseau VPC hub central à l'aide d'un tunnel VPN IPSec.

Architecture hub-and-spoke via Cloud VPN

Pour en savoir plus sur cette architecture et d'autres solutions de conception, consultez la page Architecture de réseau hub et spoke.

Objectifs

Provisionnez les ressources suivantes dans Google Cloud à l'aide d'un modèle Terraform fourni par Google :

  • Trois réseaux VPC, l'un désigné comme réseau hub et les deux autres comme réseaux spoke.
  • Deux sous-réseaux dans chacun des réseaux VPC, un dans chacune des deux régions que vous spécifiez.
  • Un ensemble de règles de pare-feu pour chaque réseau VPC.
  • Une passerelle Cloud NAT pour chaque réseau VPC spoke.
  • Une instance Compute Engine de test pour chaque réseau VPC satellite.
  • Un compte de service pour les instances Compute Engine.
  • Une passerelle Cloud VPN dynamique dans chacun des réseaux VPC spoke, avec un seul tunnel chacun.
  • Deux passerelles et tunnels Cloud VPN dynamiques dans le réseau VPC hub, un pour chaque spoke.
  • Une zone Cloud DNS privée dans le réseau VPC hub, appairée avec une zone Cloud DNS privée dans chacun des réseaux VPC spoke.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Décidez si vous souhaitez déployer les ressources dans un projet existant ou dans un nouveau projet créé par Terraform.

  2. Obtenez les autorisations requises.

    Pour créer et gérer des ressources à l'aide des modèles Terraform fournis, le compte Google ou le compte de service a besoin des rôles Identity and Access Management (IAM) suivants :

    • Administrateur de Compute (roles/compute.admin)
    • Administrateur de compte de service (roles/iam.serviceAccountAdmin)
    • Administrateur de projet IAM (roles/resourcemanager.projectIamAdmin)
    • Administrateur de Service Usage (roles/serviceusage.serviceUsageAdmin)
    • Administrateur DNS (roles/dns.admin)
    • Créateur de projet (roles/resourcemanager.projectCreator) (obligatoire pour déployer les ressources dans un nouveau projet)

    Si vous ne disposez pas des autorisations requises ou si vous n'êtes pas sûr, contactez l'administrateur de votre organisation.

  3. (Facultatif) Ignorez cette étape si vous souhaitez déployer les ressources dans un nouveau projet créé par Terraform.

    Pour utiliser un projet existant ou un projet que vous créez, procédez comme suit :

    1. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

      Accéder au sélecteur de projet

    2. Vérifiez que la facturation est activée pour votre projet Google Cloud.

    3. Activer les API Compute Engine, Cloud DNS, Resource Manager, Service Usage et IAM.

      Activer les API

Préparer l'environnement

Vous pouvez suivre ce tutoriel avec Cloud Shell ou votre hôte local. Terraform est préinstallé sur Cloud Shell et configuré pour l'authentification auprès de Google Cloud.

Pour utiliser Cloud Shell

  • Téléchargez et ouvrez les exemples de modèle Terraform dans Cloud Shell.

    Ouvrir dans Cloud Shell

    Cloud Shell est lancé dans un onglet de navigation distinct, et les exemples de modèles Terraform sont téléchargés dans le répertoire "$HOME/cloudshell_open" de votre environnement Cloud Shell.

Pour utiliser votre hôte local

Procédez comme suit :

  1. Installez Terraform 0.13.0 ou version ultérieure.

  2. Téléchargez les exemples de modèle Terraform de la section Exemples et modules Terraform pour Google Cloud.

  3. Configurez l'authentification :

    1. Créez le compte de service :

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      Remplacez SERVICE_ACCOUNT_NAME par le nom que vous souhaitez donner au compte de service.

    2. Attribuez le rôle IAM roles/owner au compte de service.

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner

      Remplacez les éléments suivants :

      • SERVICE_ACCOUNT_NAME : nom du compte de service.
      • PROJECT_ID : ID du projet dans lequel vous avez créé le compte de service.
    3. Générez le fichier de clé :

      gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

      Remplacez les éléments suivants :

      • FILE_NAME : nom du fichier de clé
      • SERVICE_ACCOUNT_NAME : nom du compte de service.
      • PROJECT_ID : ID du projet dans lequel vous avez créé le compte de service.
  4. Fournissez des identifiants d'authentification au code de votre application en définissant la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS. Cette variable ne s'applique qu'à la session de shell actuelle. Si vous souhaitez que la variable s'applique aux futures sessions de shell, définissez-la dans le fichier de démarrage du shell, par exemple dans le fichier ~/.bashrc ou ~/.profile.

    Linux ou macOS

    export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

    Remplacez KEY_PATH par le chemin d'accès du fichier JSON contenant vos identifiants.

    Par exemple :

    export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

    Windows

    Pour PowerShell :

    $env:GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

    Remplacez KEY_PATH par le chemin d'accès du fichier JSON contenant vos identifiants.

    Par exemple :

    $env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

    Pour l'invite de commande :

    set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH

    Remplacez KEY_PATH par le chemin d'accès du fichier JSON contenant vos identifiants.

Configurer les variables Terraform

Le code Terraform que vous avez téléchargé comprend des variables que vous pouvez utiliser pour personnaliser le déploiement en fonction de vos besoins. Par exemple, vous pouvez ajuster les plages CIDR des sous-réseaux et spécifier le projet dans lequel les ressources doivent être déployées.

  1. Dans le code que vous avez téléchargé (sur votre hôte local ou dans Cloud Shell), accédez au sous-répertoire blueprints/networking/hub-and-spoke-peering.

    cd blueprints/networking/hub-and-spoke-vpn
    
  2. Ouvrez le fichier variables.tf.

    Les variables d'entrée de la configuration Terraform sont déclarées dans ce fichier. Certaines des variables ont une valeur default.

  3. Identifiez les variables auxquelles vous souhaitez attribuer des valeurs :

    • Les variables qui n'ont pas de valeur par défaut (par exemple, project_id).
    • Les variables ayant une valeur par défaut que vous souhaitez modifier.

      Par exemple, ip_ranges possède des plages CIDR par défaut, mais vous devrez peut-être utiliser des plages différentes pour votre déploiement.

    Pour chaque variable que vous identifiez, lisez sa description et notez son type.

  4. Créez un fichier texte nommé terraform.tfvars.

  5. Dans le fichier terraform.tfvars, attribuez des valeurs appropriées aux variables que vous avez identifiées précédemment.

    Exemple :

    ip_ranges = {
      hub-a     = "10.0.0.0/24"
      hub-b     = "10.0.8.0/24"
      spoke-1-a = "10.0.16.0/24"
      spoke-1-b = "10.0.24.0/24"
      spoke-2-a = "10.0.32.0/24"
      spoke-2-b = "10.0.40.0/24"
    }
    
    project_id = "my-project"
    
    regions = {
      a = "us-central1"
      b = "us-west1"
    }
    
  6. Initialisez Terraform :

    terraform init
    

    Attendez que le message suivant s'affiche :

    Terraform has been successfully initialized!
    
  7. Vérifiez que la configuration ne comporte aucune erreur :

    terraform validate
    

    Si la commande renvoie une erreur, apportez les corrections nécessaires dans la configuration, puis exécutez à nouveau terraform validate.

    Répétez cette étape jusqu'à ce que la commande renvoie le message suivant :

    Success! The configuration is valid.
    
  8. Examinez les ressources définies dans la configuration :

    terraform plan
    

    Le résultat affiche la liste des ressources provisionnées par Terraform lorsque vous appliquez la configuration.

    Si vous souhaitez apporter des modifications, modifiez la configuration, puis exécutez à nouveau terraform validate et terraform plan.

Provisionnement des ressources

Lorsqu'aucune autre modification n'est nécessaire dans la configuration, déployez les ressources :

  1. Exécutez la commande suivante :

    terraform apply
    

    Terraform affiche la liste des ressources qui seront créées.

  2. Lorsque vous y êtes invité, saisissez yes.

    Si Terraform affiche un message d'erreur indiquant qu'une ou plusieurs API ne sont pas activées, utilisez chaque lien affiché dans le message pour activer les API requises.

    Terraform affiche les messages indiquant la progression du déploiement. Une fois toutes les ressources créées, Terraform affiche le message suivant :

    Apply complete!
    

Vous avez déployé un réseau hub-and-spoke dans Google Cloud.

Ajouter, modifier ou supprimer des ressources

Pour ajouter, modifier ou supprimer des ressources, modifiez la configuration Terraform, puis exécutez les commandes terraform validate, terraform plan et terraform apply, dans cet ordre.

Nettoyer

Pour éviter que les ressources que vous avez créées dans ce tutoriel soient facturées sur votre compte Google Cloud, supprimez toutes les ressources dont vous n'avez pas besoin.

  1. Exécutez la commande suivante :

    terraform destroy
    

    Terraform affiche la liste des ressources qui seront supprimées.

  2. Lorsque vous y êtes invité, saisissez yes.

    Terraform affiche des messages de progression. Une fois toutes les ressources supprimées, Terraform affiche le message suivant :

    Destroy complete!
    

Étape suivante