1. Introduction
Une interface Private Service Connect est une ressource qui permet au réseau cloud privé virtuel (VPC) d'un producteur d'établir des connexions vers différentes destinations dans un réseau VPC client. 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 provenant d'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 à la connexion entre un point de terminaison Private Service Connect et un rattachement de service, mais présente deux différences majeures:
- Un rattachement de réseau permet à un réseau de producteur d'établir des connexions avec un réseau de client (sortie de service géré), tandis qu'un point de terminaison permet à un réseau de consommateur d'établir des connexions avec un réseau de 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 complète d'interface Private Service Connect (PSC) qui utilise des règles de pare-feu Cloud pour autoriser et refuser la connectivité entre le producteur et le système de calcul du client, comme illustré dans la figure 1.
Figure 1
Vous allez créer un seul rattachement psc-network-attachment dans le VPC du client, ce qui entraînera 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 interdisant l'accès de l'ours au tigre
- Créer une règle de pare-feu Cloud pour autoriser l'accès du cosmo à l'ours
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
- Comment établir une communication entre le producteur et le consommateur
- Autoriser l'accès de la VM du producteur (ours) à la VM du consommateur (lion)
- Bloquer l'accès de la VM du producteur (ours) à la VM du consommateur (tigre)
- Autoriser l'accès de la VM consommateur (cosmo) à la VM du producteur (ours)
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 $variables pour faciliter l'implémentation de la configuration gcloud dans Cloud Shell.
Dans Cloud Shell, effectuez les opérations suivantes:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
3. Configuration client
Créer le VPC consommateur
Dans Cloud Shell, effectuez les opérations suivantes:
gcloud compute networks create consumer-vpc --project=$projectid --subnet-mode=custom
Créer les sous-réseaux du client
Dans Cloud Shell, effectuez les opérations suivantes:
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, effectuez les opérations suivantes:
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, effectuez les opérations suivantes:
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 du rattachement de réseau Private Service Connect
Dans Cloud Shell, effectuez les opérations suivantes:
gcloud compute networks subnets create intf-subnet --project=$projectid --range=192.168.10.0/28 --network=consumer-vpc --region=us-central1
Configuration Cloud Router et NAT
Cloud NAT est utilisé dans le tutoriel concernant l'installation de packages logiciels, car l'instance de VM ne possède 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 auxquelles 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 utilisées par IAP 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 consommatrices
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 description 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é consommateur 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 de 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
Répertorier les rattachements de réseau
Dans Cloud Shell, affichez la liste du rattachement de 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, effectuez les opérations suivantes:
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 la 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 auxquelles 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 utilisées par IAP 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 au réseau cloud privé virtuel (VPC) d'un producteur d'établir des connexions vers différentes destinations dans un réseau VPC client. 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 provenant d'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 (ours) et insérez l'URL psc-network-attachment UR précédemment identifiée à partir du résultat 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 avec plusieurs cartes d'interface réseau
Vérifiez que l'interface PSC est configurée avec l'adresse IP appropriée. La vNIC0 utilisera le sous-réseau prod-subnet du producteur (10.20.1.0/28) et la vNIC1 utilisera le sous-réseau intf-subnet 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 du client
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é supérieure qui autorise la sortie de la plage d'adresses IP du sous-réseau rattachement (intf-subnet) vers des destinations situées dans la plage d'adresses du sous-réseau 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 du trafic entrant qui remplace la règle implicite d'entrée interdite 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 interdisant l'accès de l'ours à toutes les plages (tigre inclus)
Dans Cloud Shell, créez une règle de faible priorité qui refuse tout trafic de sortie provenant 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 du cosmo à l'ours
Dans Cloud Shell, créez une règle d'autorisation du trafic entrant qui remplace la règle implicite d'entrée interdite 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 les routes Linux pour permettre la communication entre le producteur et les sous-réseaux du client.
Rechercher le nom de l'OS invité de votre interface Private Service Connect
Pour configurer le routage, vous devez connaître le nom de l'OS 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 effectuez les opérations suivantes:
gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
Connectez-vous à la VM psc-interface avec ours en utilisant 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
Trouver l'adresse IP de passerelle de votre interface PSC
Dans la liste des interfaces réseau, recherchez et enregistrez le nom d'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 génère la gw 192.168.10.1 par défaut
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 de clients
Vous devez ajouter une route à la passerelle par défaut de votre interface Private Service Connect pour chaque sous-réseau client qui se connecte à cette interface. Cela garantit que le trafic lié au réseau du consommateur sort de l'interface Private Service Connect.
Dans l'instance d'ours, ajoutez les routes vers les sous-réseaux du client.
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. Vérifier que la connectivité entre ours et lion a réussi
Vérifions que l'instance de VM du producteur, ours, peut communiquer avec l'instance consommateur, lion, en exécutant une commande curl.
À partir de l'instance d'ours, exécutez une commande curl sur l'adresse IP du lion identifiée précédemment dans le tutoriel à partir de l'instance d'ours.
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. Confirmez 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 affichant les journaux du pare-feu.
Depuis une nouvelle session de la console Cloud, accédez à Logging > Explorateur de journaux > sélectionnez "Afficher la requête".
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"
À partir de l'instance d'ours, exécutez une requête curl sur l'adresse IP du tigre identifiée précédemment dans le tutoriel à partir de l'instance d'ours. 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.
14. Vérifier que la connectivité entre le cosmo et l'ours est réussie
Ouvrez un nouvel onglet Cloud Shell et mettez à jour les paramètres de votre projet.
Dans Cloud Shell, effectuez les opérations suivantes:
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, exécutez un ping sur l'adresse IP vNIV1 de l'adresse IP de l'ours, identifiée plus tôt 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é client et producteur en implémentant des règles de pare-feu.
Vous avez créé l'infrastructure consommateur et ajouté un rattachement de réseau permettant au producteur de créer une VM dotée de plusieurs cartes d'interface réseau pour relier les communications du client et du producteur. Vous avez appris à créer des règles de pare-feu dans le réseau VPC du client afin d'autoriser la connectivité aux instances des VPC du client et du producteur.
Cosmopup trouve les tutoriels 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 une mise en réseau hybride à l'aide de Private Service Connect et d'un équilibreur de charge proxy TCP interne
Complément d'informations et Vidéos
- Présentation de Private Service Connect
- Qu'est-ce que Private Service Connect ?
- Types d'équilibreurs de charge compatibles