Interface Private Service Connect

1. Introduction

Une interface Private Service Connect est une ressource qui permet à un réseau cloud privé virtuel (VPC) de producteur d'initier des connexions avec différentes destinations dans un réseau VPC consommateur. Les réseaux de producteurs et les réseaux de clients peuvent appartenir à différents projets et organisations.

Si un rattachement de réseau accepte une connexion depuis une interface Private Service Connect, Google Cloud attribue à l'interface une adresse IP d'un sous-réseau client spécifié par le rattachement de réseau. Les réseaux utilisateur et producteur sont connectés et peuvent communiquer à l'aide d'adresses IP internes.

Une connexion entre un rattachement de réseau et une interface Private Service Connect est semblable à la connexion entre un point de terminaison Private Service Connect et un rattachement de service, avec toutefois deux différences majeures :

  • Un rattachement de réseau permet à un réseau producteur d'établir des connexions avec un réseau consommateur (sortie de service géré), tandis qu'un point de terminaison permet à un réseau consommateur d'établir des connexions avec un réseau producteur (entrée de service géré).
  • Une connexion d'interface Private Service Connect est transitive. Cela signifie qu'un réseau de producteur peut communiquer avec d'autres réseaux connectés au réseau du client.

Ce que vous allez faire

Dans ce tutoriel, vous allez créer une architecture d'interface Private Service Connect (PSC) complète qui utilise des règles de pare-feu cloud pour autoriser et refuser la connectivité du producteur au calcul du consommateur, comme illustré à la figure 1.

Figure 1

d39bf35e55bdf9e6.png

Vous allez créer un seul rattachement de réseau PSC dans le VPC consommateur, ce qui entraînera les cas d'utilisation suivants :

  1. Créer une règle de pare-feu cloud pour autoriser l'accès de bear à lion
  2. Créer une règle de pare-feu cloud pour refuser l'accès de bear à tiger
  3. Créer une règle de pare-feu cloud pour autoriser l'accès de cosmo à bear

Points abordés

  • Créer un rattachement de réseau
  • Comment un producteur peut utiliser un rattachement de réseau pour créer une interface PSC
  • Établir la communication entre le producteur et le consommateur
  • Autoriser l'accès de la VM producteur (bear) à la VM consommateur (lion)
  • Bloquer l'accès de la VM de producteur (bear) à la VM de consommateur (tiger)
  • Autoriser l'accès de la VM de client (cosmo) à la VM de producteur (bear)

Prérequis

2. Avant de commencer

Mettre à jour le projet pour qu'il soit compatible avec le tutoriel

Ce tutoriel utilise des $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.

Dans Cloud Shell, procédez comme suit :

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

3. Configuration du client

Créer le VPC consommateur

Dans Cloud Shell, procédez comme suit :

gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom

Créer les sous-réseaux consommateurs

Dans Cloud Shell, procédez comme suit :

gcloud compute networks subnets create lion-subnet-1 --project=$projectid --range=192.168.20.0/28 --network=consumer-vpc --region=us-central1

Dans Cloud Shell, procédez comme suit :

gcloud compute networks subnets create tiger-subnet-1 --project=$projectid --range=192.168.30.0/28 --network=consumer-vpc --region=us-central1

Dans Cloud Shell, procédez comme suit :

gcloud compute networks subnets create cosmo-subnet-1 --project=$projectid --range=192.168.40.0/28 --network=consumer-vpc --region=us-central1

Créer le sous-réseau de rattachement de réseau Private Service Connect

Dans Cloud Shell, procédez comme suit :

gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1

Configuration de Cloud Router et de NAT

Cloud NAT est utilisé dans le tutoriel pour l'installation de packages logiciels, car l'instance de VM ne dispose pas d'adresse IP publique. Cloud NAT permet aux VM disposant d'adresses IP privées d'accéder à Internet.

Dans Cloud Shell, créez le routeur cloud.

gcloud compute routers create cloud-router-for-nat --network consumer-vpc --region us-central1

Dans Cloud Shell, créez la passerelle NAT.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

4. Activer IAP

Pour permettre à IAP de se connecter à vos instances de VM, créez une règle de pare-feu qui :

  • S'applique à toutes les instances de VM auxquelles vous souhaitez être accessible à l'aide d'IAP.
  • Autorise le trafic entrant à partir de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP qu'IAP utilise pour le transfert TCP.

Dans Cloud Shell, créez la règle de pare-feu IAP.

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

5. Créer des instances de VM consommateur

Dans Cloud Shell, créez l'instance de VM consommateur, lion.

gcloud compute instances create lion \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=lion-subnet-1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to the lion app server !!' | tee /var/www/html/index.html
      EOF"

Dans Cloud Shell, créez l'instance de VM consommateur, tiger.

gcloud compute instances create tiger \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=tiger-subnet-1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to the tiger app server !!' | tee /var/www/html/index.html
      EOF"

Dans Cloud Shell, créez l'instance de VM consommateur, cosmo.

gcloud compute instances create cosmo \
    --project=$projectid \
    --machine-type=e2-micro \
    --image-family debian-11 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=cosmo-subnet-1 \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to the cosmo app server !!' | tee /var/www/html/index.html
      EOF"

Obtenez et stockez les adresses IP des instances :

Dans Cloud Shell, exécutez une commande "describe" sur les instances de VM lion et tiger.

gcloud compute instances describe lion --zone=us-central1-a | grep  networkIP:

gcloud compute instances describe tiger --zone=us-central1-a | grep  networkIP:

gcloud compute instances describe cosmo --zone=us-central1-a | grep  networkIP:

6. Rattachement de réseau Private Service Connect

Les rattachements de réseau sont des ressources régionales qui représentent le côté utilisateur d'une interface Private Service Connect. Vous associez un seul sous-réseau à un rattachement de réseau, et le producteur attribue des adresses IP à l'interface Private Service Connect à partir de ce sous-réseau. Le sous-réseau doit se trouver dans la même région que le rattachement de réseau. Un rattachement réseau doit se trouver dans la même région que le service producteur.

Créer le rattachement de réseau

Dans Cloud Shell, créez le rattachement de réseau.

gcloud compute network-attachments create psc-network-attachment \
    --region=us-central1 \
    --connection-preference=ACCEPT_MANUAL \
    --producer-accept-list=$projectid \
    --subnets=intf-subnet

Lister les rattachements de réseau

Dans Cloud Shell, listez l'association réseau.

gcloud compute network-attachments list

Décrire les rattachements de réseau

Dans Cloud Shell, décrivez le rattachement de réseau.

gcloud compute network-attachments describe psc-network-attachment --region=us-central1

Notez l'URI psc-network-attachment qui sera utilisé par le producteur lors de la création de l'interface Private Service Connect. En voici un exemple :

user@cloudshell$ gcloud compute network-attachments describe psc-network-attachment --region=us-central1 
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2023-06-06T20:57:12.623-07:00'
fingerprint: 4Yq6xAfaRO0=
id: '3235195049527328503'
kind: compute#networkAttachment
name: psc-network-attachment
network: https://www.googleapis.com/compute/v1/projects/$projectid/global/networks/consumer-vpc
producerAcceptLists:
- $projectid
region: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment
subnetworks:
- https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/subnetworks/intf-subnet

7. Configuration de Producer

Créer le réseau VPC du producteur

Dans Cloud Shell, procédez comme suit :

gcloud compute networks create producer-vpc --project=$projectid --subnet-mode=custom

Créer les sous-réseaux du producteur

Dans Cloud Shell, créez le sous-réseau utilisé pour l'interface vNIC0 de l'interface PSC.

gcloud compute networks subnets create prod-subnet --project=$projectid --range=10.20.1.0/28 --network=producer-vpc --region=us-central1

8. Activer IAP

Pour permettre à IAP de se connecter à vos instances de VM, créez une règle de pare-feu qui :

  • S'applique à toutes les instances de VM auxquelles vous souhaitez être accessible à l'aide d'IAP.
  • Autorise le trafic entrant à partir de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP qu'IAP utilise pour le transfert TCP.

Dans Cloud Shell, créez la règle de pare-feu IAP.

gcloud compute firewall-rules create ssh-iap-producer \
    --network producer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

9. Créer l'interface Private Service Connect

Une interface Private Service Connect est une ressource qui permet à un réseau cloud privé virtuel (VPC) de producteur d'initier des connexions avec différentes destinations dans un réseau VPC consommateur. Les réseaux de producteurs et les réseaux de clients peuvent appartenir à différents projets et organisations.

Si un rattachement de réseau accepte une connexion depuis une interface Private Service Connect, Google Cloud attribue à l'interface une adresse IP d'un sous-réseau client spécifié par le rattachement de réseau. Les réseaux utilisateur et producteur sont connectés et peuvent communiquer à l'aide d'adresses IP internes.

Dans Cloud Shell, créez l'interface Private Service Connect (bear) et insérez l'URI psc-network-attachment précédemment identifié à partir de la sortie de description du rattachement de réseau.

gcloud compute instances create bear --zone us-central1-a --machine-type=f1-micro --can-ip-forward --network-interface subnet=prod-subnet,network=producer-vpc,no-address --network-interface network-attachment=https://www.googleapis.com/compute/v1/projects/$projectid/regions/us-central1/networkAttachments/psc-network-attachment

Validation multi-NIC

Vérifiez que l'interface PSC est configurée avec l'adresse IP appropriée. vNIC0 utilisera le sous-réseau de production du producteur (10.20.1.0/28) et vNIC1 utilisera le sous-réseau d'interface du consommateur (192.168.10.0/28).

gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:

Exemple :

user$ gcloud compute instances describe bear --zone=us-central1-a | grep networkIP:
  networkIP: 10.20.1.2
  networkIP: 192.168.10.2

10. Mettre à jour les règles de pare-feu grand public

Créer une règle Cloud Firewall pour autoriser l'accès de l'ours au lion

Dans Cloud Shell, créez une règle de priorité plus élevée qui autorise la sortie de la plage d'adresses IP de attachment-subnet (intf-subnet) vers les destinations de la plage d'adresses de lion-subnet-1.

gcloud compute firewall-rules create allow-limited-egress-to-lion \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=EGRESS \
    --priority=1000 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="192.168.20.0/28" \
    --enable-logging

Dans Cloud Shell, créez une règle d'autorisation d'entrée qui remplace la règle d'entrée de refus implicite pour le trafic provenant du sous-réseau psc-network-attachment.

gcloud compute firewall-rules create allow-ingress \
--network=consumer-vpc \
--action=ALLOW \
--rules=ALL \
--direction=INGRESS \
--priority=1000 \
--source-ranges="192.168.10.0/28" \
--enable-logging

Créer une règle de pare-feu Cloud pour refuser l'accès de l'ours à toutes les plages (y compris le tigre)

Dans Cloud Shell, créez une règle à faible priorité qui refuse tout trafic sortant de la plage d'adresses IP du sous-réseau de l'attachement réseau, intf-subnet.

gcloud compute firewall-rules create deny-all-egress \
    --network=consumer-vpc \
    --action=DENY \
    --rules=ALL \
    --direction=EGRESS \
    --priority=65534 \
    --source-ranges="192.168.10.0/28" \
    --destination-ranges="0.0.0.0/0" \
    --enable-logging

Créez une règle de pare-feu cloud pour autoriser l'accès de cosmo à bear.

Dans Cloud Shell, créez une règle d'autorisation d'entrée qui remplace la règle d'entrée de refus implicite pour le trafic provenant du sous-réseau psc-network-attachment.

gcloud compute firewall-rules create vm-subnet-allow-ingress \
    --network=consumer-vpc \
    --action=ALLOW \
    --rules=ALL \
    --direction=INGRESS \
    --priority=1000 \
    --source-ranges="192.168.40.0/28" \
    --destination-ranges="192.168.10.0/28" \
    --enable-logging

11. Créer des routes Linux pour l'interface PSC

À partir de l'instance d'interface PSC, configurez des routes Linux pour autoriser la communication du producteur avec les sous-réseaux du consommateur.

Rechercher le nom du système d'exploitation invité de votre interface Private Service Connect

Pour configurer le routage, vous devez connaître le nom du système d'exploitation invité de votre interface Private Service Connect, qui est différent du nom de l'interface dans Google Cloud.

Dans Cloud Shell, ouvrez un nouvel onglet et procédez comme suit :

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

Connectez-vous à la VM psc-interface, bear, à l'aide d'IAP dans Cloud Shell.

gcloud compute ssh bear --project=$projectid --zone=us-central1-a --tunnel-through-iap

Dans Cloud Shell, obtenez l'adresse IP de l'instance psc-interface.

ip a

Exemple :

user@bear:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:0a:14:01:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s4
    inet 10.20.1.2/32 brd 10.20.1.2 scope global dynamic ens4
       valid_lft 85991sec preferred_lft 85991sec
    inet6 fe80::4001:aff:fe14:102/64 scope link 
       valid_lft forever preferred_lft forever
3: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1460 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 42:01:c0:a8:0a:02 brd ff:ff:ff:ff:ff:ff
    altname enp0s5
    inet 192.168.10.2/32 brd 192.168.10.2 scope global dynamic ens5
       valid_lft 85991sec preferred_lft 85991sec
    inet6 fe80::4001:c0ff:fea8:a02/64 scope link 
       valid_lft forever preferred_lft forever

Rechercher l'adresse IP de la passerelle de votre interface PSC

Dans la liste des interfaces réseau, recherchez et stockez le nom de l'interface associée à l'adresse IP de votre interface Private Service Connect, par exemple ens5 (vNIC1).

Pour configurer le routage, vous devez connaître l'adresse IP de la passerelle par défaut de votre interface Private Service Connect.

Dans Cloud Shell, nous utiliserons 1, car l'interface PSC est associée à la carte d'interface réseau virtuelle 1.

curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo

L'exemple produit la passerelle par défaut 192.168.10.1.

user@bear:~$ curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/1/gateway -H "Metadata-Flavor: Google" && echo
192.168.10.1

Ajouter des routes pour les sous-réseaux utilisateur

Vous devez ajouter une route à la passerelle par défaut de votre interface Private Service Connect pour chaque sous-réseau utilisateur qui se connecte à votre interface Private Service Connect. Cela garantit que le trafic destiné au réseau utilisateur sort de l'interface Private Service Connect.

Dans l'instance bear, ajoutez les routes aux sous-réseaux consommateurs.

sudo ip route add 192.168.20.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.30.0/28 via 192.168.10.1 dev ens5
sudo ip route add 192.168.40.0/28 via 192.168.10.1 dev ens5

Valider la table de routage

Dans Cloud Shell, validez les routes qui viennent d'être ajoutées.

ip route show

Example.

user@bear:~$ ip route show
default via 10.20.1.1 dev ens4 
10.20.1.0/28 via 10.20.1.1 dev ens4 
10.20.1.1 dev ens4 scope link 
192.168.10.0/28 via 192.168.10.1 dev ens5 
192.168.10.1 dev ens5 scope link 
192.168.20.0/28 via 192.168.10.1 dev ens5 
192.168.30.0/28 via 192.168.10.1 dev ens5 
192.168.40.0/28 via 192.168.10.1 dev ens5 

12. Valider la connectivité entre l'ours et le lion

Vérifions que l'instance de VM producteur, "bear", peut communiquer avec l'instance consommateur, "lion", en effectuant une requête curl.

À partir de l'instance "bear", effectuez une requête curl sur l'adresse IP de l'instance "lion" identifiée précédemment dans le tutoriel.

curl -v <lions IP Address>

Exemple :

user@bear:~$ curl -v 192.168.20.2
*   Trying 192.168.20.2:80...
* Connected to 192.168.20.2 (192.168.20.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 192.168.20.2
> User-Agent: curl/7.74.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 06 Jun 2023 03:53:08 GMT
< Server: Apache/2.4.56 (Debian)
< Last-Modified: Mon, 05 Jun 2023 19:41:26 GMT
< ETag: "1e-5fd6716a1e11b"
< Accept-Ranges: bytes
< Content-Length: 30
< Content-Type: text/html
< 
Welcome to lion app server !!
* Connection #0 to host 192.168.20.2 left intact

13. Valider que la connectivité entre l'ours et le tigre est bloquée

Vérifions que la règle de pare-feu de sortie bloque l'accès de l'ours au tigre en consultant les journaux du pare-feu.

Dans une nouvelle session Cloud Console, accédez à Logging → Explorateur de journaux → Sélectionner "Afficher la requête".

2ae597e6d970cddf.png

Collez la chaîne de requête ci-dessous dans le champ de recherche, puis sélectionnez stream.

jsonPayload.rule_details.reference="network:consumer-vpc/firewall:deny-all-egress"

30d7bfae315f2ee3.png

À partir de l'instance "bear", effectuez une requête curl sur l'adresse IP de l'instance "tiger" identifiée précédemment dans le tutoriel. La requête curl finira par expirer.

curl -v <tiger's IP Address>

Exemple :

user@bear:~$ curl -v 192.168.30.2 
*   Trying 192.168.30.2:80...
* connect to 192.168.30.2 port 80 failed: Connection timed out
* Failed to connect to 192.168.30.2 port 80: Connection timed out
* Closing connection 0
curl: (28) Failed to connect to 192.168.30.2 port 80: Connection timed out

Vérifiez que l'explorateur de journaux a capturé les journaux de pare-feu refusés. Sélectionnez une entrée de journal et développez les champs imbriqués pour afficher les métadonnées.

5c42a6587300be55.png

14. Valider la connectivité entre Cosmo et Bear

Ouvrez un nouvel onglet Cloud Shell et mettez à jour les paramètres de votre projet.

Dans Cloud Shell, procédez comme suit :

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid

Connectez-vous à l'instance cosmo à l'aide d'IAP dans Cloud Shell.

gcloud compute ssh cosmo --project=$projectid --zone=us-central1-a --tunnel-through-iap

Dans Cloud Shell, effectuez un ping sur l'adresse IP vNIV1 de l'ours identifiée précédemment dans le tutoriel.

ping <bears vNIC1 IP Address>

Exemple :

user@cosmo:~$ ping 192.168.10.2 -c 5
PING 192.168.10.2 (192.168.10.2) 56(84) bytes of data.
64 bytes from 192.168.10.2: icmp_seq=1 ttl=64 time=0.277 ms
64 bytes from 192.168.10.2: icmp_seq=2 ttl=64 time=0.288 ms
64 bytes from 192.168.10.2: icmp_seq=3 ttl=64 time=0.265 ms
64 bytes from 192.168.10.2: icmp_seq=4 ttl=64 time=0.264 ms
64 bytes from 192.168.10.2: icmp_seq=5 ttl=64 time=0.366 ms

15. Effectuer un nettoyage

Dans Cloud Shell, supprimez les composants du tutoriel.

gcloud compute instances delete bear --zone=us-central1-a --quiet

gcloud compute instances delete lion --zone=us-central1-a --quiet

gcloud compute instances delete tiger --zone=us-central1-a --quiet

gcloud compute instances delete cosmo --zone=us-central1-a --quiet

gcloud compute network-attachments delete psc-network-attachment --region=us-central1 --quiet

gcloud compute firewall-rules delete allow-ingress allow-limited-egress-to-lion deny-all-egress ssh-iap-consumer ssh-iap-producer vm-subnet-allow-ingress --quiet

gcloud compute networks subnets delete cosmo-subnet-1 intf-subnet lion-subnet-1 prod-subnet tiger-subnet-1 --region=us-central1 --quiet

gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 

gcloud compute networks delete consumer-vpc --quiet

gcloud compute networks delete producer-vpc --quiet

16. Félicitations

Félicitations, vous avez configuré et validé une interface Private Service Connect, ainsi que la connectivité entre le consommateur et le producteur en implémentant des règles de pare-feu.

Vous avez créé l'infrastructure consommateur et ajouté un rattachement de réseau qui a permis au producteur de créer une VM multi-NIC pour faire le pont entre les communications consommateur et producteur. Vous avez appris à créer des règles de pare-feu dans le réseau VPC consommateur qui autorisent la connectivité aux instances dans les VPC consommateur et producteur.

Cosmopup pense que les tutoriels sont géniaux !

e6d3675ca7c6911f.jpeg

Et ensuite ?

Découvrez quelques-uns de ces tutoriels :

Lectures et vidéos complémentaires

Documents de référence