Accéder à des ressources externes dans un réseau privé à l'aide d'une adresse IP externe statique

Cette page explique comment configurer vos pools privés pour accéder à des ressources externes via une adresse IP externe statique.


Pour obtenir des instructions détaillées sur cette tâche directement dans la Google Cloud console, cliquez sur Visite guidée:

Visite guidée


Avant de commencer

  • Activez les API Cloud Build, Compute Engine et Service Networking.

    Rôles requis pour activer les API

    Pour activer les API, vous avez besoin du rôle IAM Administrateur d'utilisation du service (roles/serviceusage.serviceUsageAdmin), qui contient l'autorisation serviceusage.services.enable. Découvrez comment attribuer des rôles.

    Activer les API

  • Pour obtenir les autorisations nécessaires pour configurer une connexion privée, demandez à votre administrateur de vous accorder le rôle IAM Administrateur de réseau Compute Engine (roles/compute.networkAdmin) sur le projet Cloud dans lequel réside le réseau VPC. Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

  • Pour utiliser les commandes gcloud sur cette page, installez Google Cloud CLI.

Créer un réseau VPC

Console

Pour créer un réseau VPC à l'aide de la Google Cloud console, procédez comme suit :

  1. Ouvrez la page Réseaux VPC dans la Google Cloud console.

    Accéder aux réseaux VPC

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

    La page Créer un réseau VPC s'affiche.

  3. Saisissez un Nom pour votre réseau.

  4. Dans Mode de création du sous-réseau, sélectionnez Automatique.

  5. Si vous souhaitez personnaliser d'autres champs, consultez Créer et gérer des réseaux VPC. Sinon, laissez tous les champs tels quels.

  6. Cliquez sur Créer pour créer votre réseau VPC.

    Une fois que vous avez cliqué sur Créer, votre nouveau réseau VPC s'affiche sur la page Réseaux VPC.

gcloud

Pour créer un réseau VPC à l'aide de l'outil de ligne de commande gcloud, saisissez la commande suivante dans votre terminal, où NETWORK_NAME correspond au nom de votre réseau VPC :

gcloud compute networks create NETWORK_NAME \
  --subnet-mode=auto

Une fois que vous avez cliqué sur Créer, votre nouveau réseau VPC s'affiche sur la page Réseaux VPC.

Pour en savoir plus sur la création et la gestion des réseaux VPC, consultez Créer et gérer des réseaux VPC.

Créer une connexion privée

Console

Pour créer une connexion privée entre votre réseau VPC et le réseau du producteur de services, procédez comme suit :

  1. Ouvrez la page Réseaux VPC dans la Google Cloud console.

    Accéder aux réseaux VPC

  2. Cliquez sur le nom de votre réseau.

    La page Détails du réseau VPC s'affiche.

  3. Cliquez sur l'onglet Connexion au service privé.

    1. Sélectionnez l'onglet Plages d'adresses IP allouées pour les services.

    2. Cliquez sur Allouer une plage d'adresses IP.

      La fenêtre pop-up Allouer une plage d'adresses IP internes s'affiche.

      1. Saisissez un Nom pour votre plage d'adresses IP.

      2. Sous Plage d'adresses IP, sélectionnez Automatique.

      3. Dans le champ Longueur du préfixe, saisissez une longueur de préfixe pour votre réseau.

      4. Cliquez sur Allouer pour allouer votre plage d'adresses IP.

    3. Sélectionnez l'onglet Connexions privées aux services.

    4. Cliquez sur Créer une connexion.

      La fenêtre pop-up Créer une connexion privée s'affiche.

      1. Sous Allocation attribuée, sélectionnez votre plage d'adresses IP.

      2. Cliquez sur Se connecter.

      Votre connexion s'affiche désormais dans le tableau de l'onglet Connexions privées aux services.

      Cliquez sur Activer (Exporter les routes personnalisées) pour vous assurer que les routes du VPC sont appliquées au réseau sur lequel vos instances de pool privé sont exécutées.

Vous avez configuré votre réseau.

gcloud

Pour créer une connexion privée entre votre réseau VPC et le réseau du producteur de services, procédez comme suit :

  1. Saisissez la commande suivante dans votre terminal pour allouer une plage d'adresses IP à votre service :

        gcloud compute addresses create RESERVED_RANGE_NAME \
          --global \
          --prefix-length=PREFIX_LENGTH \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Où :

    • RESERVED_RANGE_NAME correspond au nom de votre plage allouée. Exemple : my-allocated-range.
    • PREFIX_LENGTH correspond à la longueur du préfixe de votre réseau. La longueur de votre préfixe doit être inférieure ou égale à /24, par exemple /22, /21, etc.
    • VPC_NETWORK correspond au nom de votre réseau VPC, tel que my-vpc-network.
    • PROJECT_ID correspond à l'ID du projet qui contient votre réseau VPC.
  2. Saisissez la commande suivante dans votre terminal pour créer une connexion privée :

        gcloud services vpc-peerings connect \
          --service=servicenetworking.googleapis.com \
          --ranges=RESERVED_RANGE_NAME \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Où :

    • RESERVED_RANGE_NAME correspond au nom de la plage allouée que vous avez créée à l'étape précédente.
    • VPC_NETWORK correspond au nom de votre réseau VPC, tel que my-vpc-network.
    • PROJECT_ID correspond à l'ID du projet qui contient votre réseau VPC.
  3. Saisissez la commande suivante dans votre terminal pour vous assurer que les routes du VPC sont appliquées au réseau sur lequel vos instances de pool privé sont exécutées :

        gcloud compute networks peerings update servicenetworking-googleapis-com \
          --export-custom-routes \
          --network=VPC_NETWORK \
          --project=PROJECT_ID
    

    Où :

    • VPC_NETWORK correspond au nom de votre réseau VPC, tel que my-vpc-network.
    • PROJECT_ID correspond à l'ID du projet qui contient votre réseau VPC.

Vous avez configuré votre réseau.

Pour en savoir plus sur la configuration d'un réseau, consultez Configurer une connexion privée entre votre réseau VPC et le réseau du producteur de services.

Créer un pool privé

Console

Pour créer un pool privé à l'aide de la Google Cloud console, procédez comme suit :

  1. Ouvrez la page Pool de nœuds de calcul dans la Google Cloud console :

    Ouvrir la page Pool de nœuds de calcul Cloud Build

  2. Sélectionnez le projet dans lequel vous souhaitez créer le pool privé.

  3. Sur la page Pool de nœuds de calcul, cliquez sur Créer.

    Le panneau Créer un pool privé s'affiche.

  4. Dans le panneau latéral Créer un pool privé, saisissez les informations suivantes :

    1. Saisissez un Nom pour votre pool privé.

    2. Sélectionnez une Région dans le menu déroulant.

    3. Sous Réseau, saisissez les informations suivantes :

    • Projet : saisissez l'ID ou le numéro de votre projet.
    • Réseau : saisissez le nom de votre réseau VPC.
    1. (Facultatif) Décochez la case Attribuer des adresses IP externes pour la configuration réseau la plus restrictive.

Vous avez créé un pool privé.

gcloud

Pour créer un pool privé à l'aide de l'outil de ligne de commande gcloud, saisissez la commande suivante dans votre terminal :

      gcloud builds worker-pools create PRIVATEPOOL_ID \
        --project=PRIVATEPOOL_PROJECT_ID \
        --region=REGION \
        --peered-network=PEERED_NETWORK \
        --no-public-egress

Où :

  • PRIVATEPOOL_ID correspond à l'identifiant unique de votre pool privé.
  • PRIVATEPOOL_PROJECT_ID correspond à l'ID du Google Cloud projet dans lequel vous souhaitez créer votre pool privé.
  • REGION désigne l'une des régions compatibles.
  • PEERED_NETWORK correspond à l'URL de la ressource réseau.
  • --no-public-egress: si cette option est définie, le pool privé est créé sans adresse IP externe.

Vous avez créé un pool privé.

Pour en savoir plus sur la création et la gestion des pools privés, consultez Créer et gérer des pools privés.

Accéder à des ressources externes dans un réseau privé

Par défaut, les adresses IP externes associées aux pools privés Cloud Build ne sont ni statiques ni configurables. Elles sont attribuées par Google Cloud. Si vous souhaitez configurer vos pools privés pour accéder à des ressources externes depuis votre réseau privé avec une adresse IP externe statique, vous devez configurer une machine virtuelle (VM) dans votre projet pour qu'elle agisse comme une passerelle NAT autogérée afin de proxyfier les requêtes vers l'Internet public. Ensuite, vous devez configurer des routes personnalisées pour transférer ces requêtes vers votre VM afin de vous assurer que les routes sont échangées avec le projet de mise en réseau des services.

Cette section explique comment configurer vos pools privés pour accéder à des ressources externes via une adresse IP externe statique en procédant comme suit :

  1. Créez un script de démarrage pour configurer la VM afin qu'elle proxyfie tout le trafic qui lui est acheminé et qu'elle le masque comme provenant de son adresse IP :

    #! /bin/bash
    set -e
    
    sysctl -w net.ipv4.ip_forward=1
    IFACE=$(ip -brief link | tail -1 | awk  {'print $1'})
    iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
    
  2. Configurez une VM dans le même VPC que votre pool privé avec une règle permettant de proxyfier les requêtes via le VPC :

    gcloud compute instances create VM_NAME \
      --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \
      --network=NETWORK_NAME \
      --private-network-ip=INTERNAL_IP --can-ip-forward \
      --zone=ZONE \
      --subnet=SUBNETWORK \
      --tags=NAT_TAG  \
      --metadata-from-file=startup-script=STARTUP_SCRIPT
    

    Où :

    • VM_NAME correspond au nom que vous souhaitez attribuer à votre VM.
    • NETWORK_NAME correspond au nom du réseau que vous avez créé dans la section précédente.
    • INTERNAL_IP correspond à n'importe quelle adresse IP interne valide dans la plage du sous-réseau de la région de votre VM. Exemple : 10.128.0.2.
    • ZONE correspond à la zone associée à votre réseau, telle que us-central1-a.
    • (Facultatif) SUBNETWORK correspond au nom de votre sous-réseau. Le nom de votre sous-réseau se trouve dans l'équivalent REST de votre sous-réseau au format suivant : projects/project-id/regions/region/subnetworks/subnetwork-name. Si vous avez sélectionné Automatique sous Mode de connexion du sous-réseau lors de la création d'un réseau VPC, vous n'avez pas besoin de spécifier ce champ.
    • NAT_TAG correspond au nom du tag de la passerelle NAT qui vous permet d'acheminer les requêtes de manière conditionnelle, selon qu'elles comportent ou non un tag de cette VM. Vous pouvez spécifier n'importe quel nom pour le tag.
    • STARTUP_SCRIPT correspond au nom du script de démarrage que vous avez créé à l'étape précédente. Exemple : startup-script-example.sh. Dans cet exemple, l'option --metadata-from-file est utilisée pour transmettre le contenu du script de démarrage que vous avez spécifié à une clé appelée startup-script.

    Une fois cette commande exécutée, vous verrez un résultat contenant la valeur de l'adresse IP externe. Notez la valeur de l'adresse IP externe. Tout le trafic de votre pool privé vers votre ressource externe passe par cette adresse. Vous pouvez choisir d'utiliser cette adresse pour une configuration plus poussée, par exemple pour configurer des règles de pare-feu dans votre réseau externe.

  3. Configurez une route pour diriger toutes les requêtes vers la ressource externe vers l'instance créée à l'étape précédente, ce qui permet de transférer vos requêtes vers vos instances de pool privé :

    gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \  
      --destination-range=DESTINATION_RANGE \
      --next-hop-address=INTERNAL_IP \
      --network=NETWORK_NAME \
      --priority=POOL_ROUTE_PRIORITY
    

    Où :

    • PRIVATE_POOL_ROUTE_NAME correspond au nom que vous souhaitez attribuer à votre route.
    • DESTINATION_RANGE correspond à une plage d'adresses CIDR valide contenant la destination vers laquelle vous souhaitez acheminer le trafic. Par exemple, une instance GitHub Enterprise Edition. Exemple : 8.8.8.0/24.
    • INTERNAL_IP correspond à la valeur de l'adresse IP interne obtenue à l'étape précédente. Exemple : 10.128.0.2.
    • NETWORK_NAME correspond au nom du réseau que vous avez créé dans la section précédente.
    • POOL_ROUTE_PRIORITY correspond au numéro de priorité que vous souhaitez spécifier pour votre route.

    Cette commande garantit que tout le trafic provenant d'une compilation dans une instance de pool privé est acheminé vers la VM de proxy que vous avez créée, et non directement vers l'Internet public.

  4. Configurez une route pour transférer les requêtes de votre proxy de vos instances taguées vers la plage d'adresses IP de destination externe. La commande suivante crée une route pour transférer les requêtes vers l'Internet public associé à vos instances de pool privé.

    gcloud compute routes create NAT_EGRESS_ROUTE_NAME \ 
      --destination-range=DESTINATION_RANGE \    
      --next-hop-gateway=default-internet-gateway \
      --network=NETWORK_NAME \
      --priority=NAT_ROUTE_PRIORITY \
      --tags=NAT_TAG
    

    Où :

    • NAT_EGRESS_ROUTE_NAME correspond au nom que vous souhaitez attribuer à votre route de passerelle NAT.
    • DESTINATION_RANGE correspond à l'adresse de la destination vers laquelle vous souhaitez acheminer le trafic. Par exemple, une instance GitHub Enterprise Edition. Exemple : 8.8.8.0/24.
    • NETWORK_NAME correspond au nom du réseau que vous avez créé dans la section précédente.
    • NAT_TAG correspond au nom du tag de la passerelle NAT qui vous permet d'acheminer les requêtes de manière conditionnelle, selon qu'elles comportent ou non un tag de cette VM. Vous pouvez spécifier n'importe quel nom pour le tag.
    • NAT_ROUTE_PRIORITY correspond au numéro de priorité que vous souhaitez spécifier pour votre route.

    Cette commande garantit que tout le trafic provenant de la VM de proxy peut être dirigé vers l'Internet public.

  5. Ajoutez une règle de pare-feu pour autoriser le trafic de votre pool privé dans votre VM de passerelle NAT :

    gcloud compute firewall-rules create RULE_NAME \
      --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \
      --network=NETWORK_NAME \
      --source-ranges=RESERVED_RANGE \
      --target-tags=NAT_TAG
    

    Où :

    • RULE_NAME correspond au nom que vous souhaitez attribuer à votre règle de pare-feu.
    • FIREWALL_PRIORITY correspond au numéro de priorité que vous souhaitez spécifier pour votre règle de pare-feu.
    • NETWORK_NAME correspond au nom du réseau que vous avez créé dans la section précédente.
    • RESERVED_RANGE correspond à la plage CIDR que vous avez allouée lors de la configuration de votre réseau VPC.
    • NAT_TAG correspond au nom du tag de la passerelle NAT qui vous permet d'acheminer les requêtes de manière conditionnelle, selon qu'elles comportent ou non un tag de cette VM. Vous pouvez spécifier n'importe quel nom pour le tag.

Vous pouvez désormais accéder à des ressources externes à partir de l'adresse IP statique de la passerelle NAT autogérée dans votre VPC.

Étape suivante