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'établir des connexions avec différentes destinations dans un réseau VPC consommateur. Les réseaux de producteurs et les réseaux utilisateurs 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 provenant 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 à une 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 utilisateur (sortie de service géré), tandis qu'un point de terminaison permet à un réseau utilisateur 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 client, comme illustré à la figure 1.

Figure 1

d39bf35e55bdf9e6.png

Vous allez créer un seul psc-network-attachment dans le VPC client, ce qui donne les cas d'utilisation suivants:

  1. Créer une règle de pare-feu Cloud pour autoriser l'accès de l'ours au lion
  2. Créer une règle de pare-feu Cloud pour refuser l'accès de l'ours au tigre
  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 du producteur au consommateur
  • Autoriser l'accès de la VM productrice (ours) à la VM consommatrice (lion)
  • Bloquer l'accès de la VM productrice (ours) à la VM consommatrice (tigre)
  • Autoriser l'accès de la VM client (cosmo) à la VM productrice (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 client

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 du NAT

Cloud NAT est utilisé dans le tutoriel pour l'installation du package logiciel, 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 autoriser IAP à se connecter à vos instances de VM, créez une règle de pare-feu qui:

  • S'applique à toutes les instances de VM que vous souhaitez rendre accessibles à l'aide d'IAP.
  • Autorise le trafic entrant provenant 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 grand public

Dans Cloud Shell, créez l'instance de VM client, 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 consommatrice, 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 client, 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, effectuez une description des instances de VM lion et tigre.

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 du producteur

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 producteurs

Dans Cloud Shell, créez le sous-réseau utilisé pour le 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 autoriser IAP à se connecter à vos instances de VM, créez une règle de pare-feu qui:

  • S'applique à toutes les instances de VM que vous souhaitez rendre accessibles à l'aide d'IAP.
  • Autorise le trafic entrant provenant 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'établir des connexions avec différentes destinations dans un réseau VPC consommateur. Les réseaux de producteurs et les réseaux utilisateurs 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 provenant 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'UR psc-network-attachmentI précédemment identifiée à partir de la sortie de la 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 de pare-feu Cloud 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 du sous-réseau d'attachement (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 qui refuse 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 du rattachement de 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éer 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 consommateurs.

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 enregistrez le nom de l'interface associé à 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 à vNIC1.

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 utilisateur.

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 nouvellement 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 de production, bear, peut communiquer avec l'instance de consommation, lion, en effectuant une requête curl.

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

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. Vérifier 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 d'ours à tigre en consultant les journaux du pare-feu.

Ouvrez une nouvelle session dans la console Cloud, accédez à "Journalisation" → "Explorateur de journaux", puis sélectionnez "Afficher la requête".

2ae597e6d970cddf.png

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

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 du tigre identifiée précédemment dans le tutoriel à partir de l'instance bear. La requête curl expirera à terme.

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. Vérifier que la connectivité entre Cosmo et l'ours est établie

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é des clients et des producteurs en implémentant des règles de pare-feu.

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

Cosmopup pense que les tutoriels sont géniaux !

e6d3675ca7c6911f.jpeg

Et ensuite ?

Découvrez quelques-uns de ces tutoriels :

Autres ressources et vidéos

Documents de référence