Utiliser Public NAT avec Compute Engine

Cette page présente une passerelle Public NAT qui fournit des services de traduction d'adresse réseau pour une instance de VM Compute Engine. Avant de commencer, consultez la présentation de Public NAT.

Prérequis

Vous devez effectuer les opérations suivantes avant de configurer Public NAT.

Obtenir des autorisations IAM

Le rôle roles/compute.networkAdmin vous permet de créer une passerelle NAT sur Cloud Router, de réserver et d'attribuer des adresses IP NAT et de spécifier les sous-réseaux dont le trafic doit utiliser la traduction d'adresse réseau assurée par la passerelle NAT.

Configurer Google Cloud

Avant de commencer, configurez les éléments suivants dans Google Cloud.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.

  5. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  6. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  8. Verify that billing is enabled for your Google Cloud project.

  9. Install the Google Cloud CLI.

  10. Si vous utilisez un fournisseur d'identité (IdP) externe, vous devez d'abord vous connecter à la gcloud CLI avec votre identité fédérée.

  11. Pour initialiser la gcloud CLI, exécutez la commande suivante :

    gcloud init
  12. Exemple

    Voici un exemple de bout en bout qui présente une passerelle Public NAT et une VM Compute Engine utilisant cette passerelle.

    Étape 1 : Créer un réseau VPC et un sous-réseau

    Si vous disposez déjà d'un réseau et d'un sous-réseau, vous pouvez ignorer cette étape.

    Console

    1. Dans la console Google Cloud , accédez à la page Réseaux VPC.

      Accéder à la page Réseaux VPC

    2. Cliquez sur Créer un réseau VPC.

    3. Spécifiez custom-network1 pour le paramètre Nom.

    4. Sous Sous-réseaux, définissez le paramètre Mode de création du sous-réseau sur Personnalisé.

    5. Sous Nouveau sous-réseau, saisissez subnet-us-east-192 pour le paramètre Nom.

    6. Dans le champ Région, sélectionnez us-east4.

    7. Définissez le paramètre Plage d'adresses IP sur 192.168.1.0/24.

    8. Cliquez sur OK, puis sur Créer.

    gcloud

    1. Créez un réseau VPC en mode personnalisé dans votre projet :

      gcloud compute networks create custom-network1 \
          --subnet-mode custom
    2. Spécifiez le préfixe de sous-réseau pour la première région. Dans cet exemple, nous attribuons 192.168.1.0/24 à la région us-east4.

      gcloud compute networks subnets create subnet-us-east-192 \
         --network custom-network1 \
         --region us-east4 \
         --range 192.168.1.0/24

    Terraform

    Vous pouvez utiliser un module Terraform pour créer un réseau et un sous-réseau de cloud privé virtuel (VPC) personnalisés.

    module "test-vpc-module" {
      source       = "terraform-google-modules/network/google"
      version      = "~> 12.0"
      project_id   = var.project_id # Replace this with your project ID in quotes
      network_name = "custom-network1"
      mtu          = 1460
    
      subnets = [
        {
          subnet_name   = "subnet-us-east-192"
          subnet_ip     = "192.168.1.0/24"
          subnet_region = "us-east4"
        }
      ]
    }

    Étape 2 : Créer une instance de VM sans adresse IP externe

    Console

    1. Dans la console Google Cloud , accédez à la page Instances de VM.

      Accéder à la page "Instances de VM"

    2. Cliquez sur Créer une instance.

    3. Définissez le paramètre Nom sur nat-test-1 pour votre instance.

    4. Définissez le paramètre Région sur us-east4.

    5. Définissez le paramètre Zone sur us-east4-c.

    6. Cliquez sur le lien Gestion, sécurité, disques, mise en réseau et location unique.

    7. Cliquez sur l'onglet Mise en réseau.

    8. Sous Interfaces réseau, cliquez sur Modifier pour l'interface par défaut de la VM.

      1. Définissez le paramètre Réseau sur custom-network1.
      2. Définissez le paramètre Sous-réseau sur subnet-us-east-192.
      3. Définissez le paramètre Adresse IP externe sur Aucune.
      4. Cliquez sur OK.
    9. Pour créer et démarrer l'instance, cliquez sur Créer.

    gcloud

    gcloud compute instances create nat-test-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --network custom-network1 \
        --subnet subnet-us-east-192 \
        --zone us-east4-c \
        --no-address

    Terraform

    Vous pouvez utiliser une ressource Terraform pour créer une instance de VM.

    resource "google_compute_instance" "default" {
      project      = var.project_id
      zone         = "us-east4-c"
      name         = "nat-test-1"
      machine_type = "e2-medium"
      boot_disk {
        initialize_params {
          image = "debian-cloud/debian-9"
        }
      }
      network_interface {
        network    = "custom-network1"
        subnetwork = var.subnet # Replace with a reference or self link to your subnet, in quotes
      }
    }

    Étape 3 : Créer une règle de pare-feu qui autorise les connexions SSH

    Console

    1. Dans la console Google Cloud , accédez à la page Règles de pare-feu.

      Accéder à la page des règles de pare-feu

    2. Cliquez sur Créer une règle de pare-feu.

    3. Indiquez allow-ssh pour le paramètre Nom.

    4. Définissez le paramètre Réseau sur custom-network1.

    5. Définissez le paramètre Sens du trafic sur Entrée.

    6. Définissez Action en cas de correspondance sur Autoriser.

    7. Définissez le paramètre Cibles sur Toutes les instances du réseau.

    8. Définissez le paramètre Filtre source sur Plages IPv4.

    9. Définissez le paramètre Plages d'adresses IP sources sur 35.235.240.0/20.

    10. Définissez le paramètre Protocoles et ports sur Protocoles et ports spécifiés.

    11. Cochez la case tcp et spécifiez le port 22.

    12. Cliquez sur Créer.

    gcloud

    gcloud compute firewall-rules create allow-ssh \
        --network custom-network1 \
        --source-ranges 35.235.240.0/20 \
        --allow tcp:22

    Terraform

    Vous pouvez utiliser une ressource Terraform pour créer une règle de pare-feu.

    resource "google_compute_firewall" "rules" {
      project = var.project_id
      name    = "allow-ssh"
      network = var.network # Replace with a reference or self link to your network, in quotes
    
      allow {
        protocol = "tcp"
        ports    = ["22"]
      }
      source_ranges = ["35.235.240.0/20"]
    }

    Étape 4 : Créer des autorisations SSH IAP pour votre instance de test

    Lors d'une prochaine étape, vous vous connecterez à votre instance de test à l'aide d'Identity-Aware Proxy (IAP).

    Console

    1. Dans la console Google Cloud , accédez à la page Identity-Aware Proxy.

      Accéder à la page Identity-Aware Proxy

    2. Sélectionnez l'onglet Ressources SSH et TCP.

    3. Pour mettre à jour les autorisations des membres sur les ressources, cochez la case à côté de Toutes les ressources de tunnels > us-east4-c > nat-test-1.

    4. Dans le volet de droite, cliquez sur Ajouter un membre.

    5. Pour accorder l'accès aux ressources à des utilisateurs, groupes ou comptes de service, spécifiez leur adresse e-mail dans le champ Nouveaux membres.

      Si vous ne faites que tester cette fonctionnalité, vous pouvez saisir votre propre adresse e-mail.

    6. Pour accorder aux membres l'accès aux ressources via la fonctionnalité de transfert TCP de Cloud IAP, dans la liste déroulante Rôle, sélectionnez Cloud IAP > Utilisateur de tunnels sécurisés par IAP.

    7. Cliquez sur Enregistrer.

    gcloud

    Cette commande utilise IAP pour accorder l'accès SSH à toutes les instances de VM de votre projet. Si vous souhaitez accorder l'accès SSH à une VM individuelle à l'aide d'IAP, suivez les instructions de la console Google Cloud .

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=MEMBER_INFO \
        --role=roles/iap.tunnelResourceAccessor

    Remplacez les éléments suivants :

    • PROJECT_ID : ID de votre projet
    • MEMBER_INFO : liste de paires type:email de membre séparées par une virgule Exemples :
      • Pour un seul utilisateur : user:test-user@example.com
      • Pour un groupe : group:admins@example.com
      • Pour un compte de service : serviceAccount:test123@example.domain.com

    Terraform

    Vous pouvez utiliser une ressource Terraform pour créer des autorisations SSH IAP pour votre instance de test.

    resource "google_project_iam_member" "project" {
      project = var.project_id
      role    = "roles/iap.tunnelResourceAccessor"
      member  = "serviceAccount:test123@example.domain.com"
    }

    Étape 5 : Se connecter à nat-test-1 et confirmer que cette ressource ne peut pas accéder à Internet

    Console

    1. Dans la console Google Cloud , accédez à la page Instances de VM.

      Accéder à la page des instances de VM

    2. Pour nat-test-1, dans la colonne Connecter, cliquez sur la flèche du menu déroulant SSH, puis sélectionnez Ouvrir dans une fenêtre du navigateur.

    3. Au niveau de l'invite de commande de la VM, saisissez curl example.com et appuyez sur Entrée.

      Vous ne devriez obtenir aucun résultat. Dans le cas contraire, vous avez peut-être créé nat-test-1 avec une adresse IP externe, ou il existe un autre problème. Pour résoudre le problème, consultez Les machines virtuelles peuvent accéder à Internet de façon inattendue, sans Cloud NAT.

      Pour arrêter la commande, vous devrez peut-être saisir Ctrl+C.

    gcloud