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
Vous allez créer un seul psc-network-attachment dans le VPC client, ce qui donne les cas d'utilisation suivants:
- Créer une règle de pare-feu Cloud pour autoriser l'accès de l'ours au lion
- Créer une règle de pare-feu Cloud pour refuser l'accès de l'ours au tigre
- 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
- Projet Google Cloud
- Autorisations IAM
- Administrateur de réseaux Compute (roles/compute.networkAdmin)
- Administrateur d'instances Compute (roles/compute.instanceAdmin)
- Administrateur de sécurité de Compute (roles/compute.securityAdmin)
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".
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"
À 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.
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 !
Et ensuite ?
Découvrez quelques-uns de ces tutoriels :
- Publier et consommer des services avec GKE à l'aide de Private Service Connect
- Publier et consommer des services à l'aide de Private Service Connect
- Se connecter aux services sur site via Hybrid Networking à l'aide de Private Service Connect et d'un équilibreur de charge proxy TCP interne
Autres ressources et vidéos
- Présentation de Private Service Connect
- Qu'est-ce que Private Service Connect ?
- Types d'équilibreurs de charge compatibles