1. Introduction
Private Service Connect permet à un producteur de services d'offrir des services de manière privée à un client. Private Service Connect offre les avantages suivants:
- Un réseau VPC de producteur de services peut accepter plusieurs clients du service.
- Chaque client se connecte à une adresse IP interne qu'il a définie. Private Service Connect effectue une traduction d'adresse réseau (NAT) pour acheminer la requête vers le producteur de services.
Figure 2. Private Service Connect utilise des points de terminaison et des rattachements de service pour permettre aux clients de services d'envoyer du trafic depuis le réseau VPC du client vers les services du réseau VPC du producteur de services (cliquez pour agrandir).
Points abordés
- Avantages de Private Service Connect
- Concepts clés pour les clients de services
- Concepts clés pour les producteurs de services
- Créer un environnement de producteur
- Exposer le service (environnement de producteur) via un rattachement de service
- Créer un environnement grand public
- Créer une règle de transfert dans le réseau consommateur
- Valider l’accès des consommateurs TCP
- Activer et valider le protocole de proxy
- Activer le contrôle d'accès aux règles
Prérequis
- Connaissance des équilibreurs de charge internes
- Possibilité de créer des VPC dans deux projets
2. Avantages de Private Service Connect
Avec PSC, vous bénéficiez de plusieurs avantages par rapport à l'appairage de VPC:
Meilleur contrôle de l'espace d'adresses IP privées
- En tant que client du service, vous pouvez contrôler l'adresse IP privée utilisée pour vous connecter au service géré auquel vous souhaitez accéder.
- En tant que client de services, vous n'avez pas à vous soucier de réserver des plages d'adresses IP privées pour les services de backend utilisés dans votre VPC. Il vous suffit de choisir une adresse IP de votre propre sous-réseau pour vous connecter aux services du producteur.
- En tant que producteur de services, vous pouvez choisir de déployer un modèle mutualisé, dans lequel votre VPC contient des services qui desservent les VPC de plusieurs clients. Les clients ayant des plages de sous-réseaux qui se chevauchent ne sont plus un problème.
- En tant que fournisseur de services, vous pouvez faire évoluer votre service vers autant d'instances de VM que nécessaire, sans avoir à contacter votre client pour obtenir plus d'adresses IP.
Sécurité et isolation améliorées
- En tant que client du service, vous seul pouvez initier la communication avec le producteur de services. Cette connectivité unidirectionnelle simplifie considérablement la configuration du pare-feu, mais réduit également le risque de trafic rouge provenant du producteur de services.
- En tant que producteur de services, vous n'avez pas besoin de modifier vos règles de pare-feu en fonction des plages de sous-réseaux du VPC du client. Vous pouvez simplement créer des règles de pare-feu pour la plage d'adresses IP NAT configurée pour votre service.
Meilleure évolutivité
- PSC permet une conception hautement évolutive en prenant en charge des milliers de clients, et permet aux producteurs de services de proposer des services hautement évolutifs mutualisés ou mono-locataires.
- En tant que client du service utilisant Private Service Connect, vous pouvez créer les ressources requises dans votre VPC. L'ampleur de cette opération n'est pas affectée par le nombre de ressources de ce type créées dans le VPC du producteur.
3. Concepts clés pour les clients de services
Vous pouvez utiliser des points de terminaison Private Service Connect pour utiliser des services situés en dehors de votre réseau VPC. Les clients du service créent des points de terminaison Private Service Connect qui se connectent à un service cible.
Points de terminaison
Vous utilisez des points de terminaison Private Service Connect pour vous connecter à un service cible. Les points de terminaison possèdent une adresse IP interne dans votre réseau VPC et sont basés sur la ressource de règle de transfert.
Vous envoyez le trafic vers le point de terminaison, qui le transfère à des cibles situées en dehors de votre réseau VPC.
Cibles
Les points de terminaison Private Service Connect ont une cible, qui est le service auquel vous souhaitez vous connecter:
- Un groupe d'API:
- Toutes les API : la plupart des API Google
- VPC-SC : API compatibles avec VPC Service Controls
- Un service publié dans un autre réseau VPC Ce service peut être géré par votre propre organisation ou par un tiers.
Service publié
Pour connecter votre point de terminaison au service d'un producteur de services, vous avez besoin du rattachement de service du service. L'URI du rattachement de service a le format suivant: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
4. Concepts clés pour les producteurs de services
Pour mettre un service à la disposition des clients, vous devez créer un ou plusieurs sous-réseaux dédiés à utiliser pour la traduction d'adresses réseau (NAT, Network Address Translation) des adresses IP des consommateurs. Vous créez ensuite un rattachement de service qui fait référence à ces sous-réseaux.
Sous-réseaux Private Service Connect
Pour exposer un service, le producteur de services crée d'abord un ou plusieurs sous-réseaux avec l'objectif Private Service Connect.
Lorsqu'une requête est envoyée depuis le réseau VPC d'un consommateur, son adresse IP source est traduite à l'aide de la NAT source (SNAT) vers une adresse IP sélectionnée dans l'un des sous-réseaux Private Service Connect.
Si vous souhaitez conserver les informations sur l'adresse IP de connexion du client, consultez la section Afficher les informations de connexion du client.
Ces sous-réseaux ne peuvent pas être utilisés pour des ressources telles que des instances de VM ou des règles de transfert. Les sous-réseaux ne servent qu'à fournir les adresses IP de la SNAT des connexions client entrantes.
Le sous-réseau Private Service Connect doit contenir au moins une adresse IP pour 63 VM consommatrices,afin que 1 024 tuples sources soient alloués à chaque VM consommateur pour la traduction d'adresse réseau.
La taille minimale d'un sous-réseau Private Service Connect est /24.
Rattachements de service
Les producteurs de services exposent leur service via un rattachement de service.
- Pour exposer un service, un producteur de services crée un rattachement de service qui fait référence à la règle de transfert de l'équilibreur de charge du service.
- Pour accéder à un service, un client du service crée un point de terminaison qui fait référence au rattachement de service.
Préférences de connexion
Lorsque vous créez un service, vous choisissez comment le rendre disponible. Vous disposez de deux options :
- Acceptez automatiquement les connexions pour tous les projets : n'importe quel client du service peut configurer un point de terminaison et se connecter automatiquement au service.
- Acceptez les connexions pour les projets sélectionnés : les clients du service configurent un point de terminaison pour se connecter au service, et le producteur de services accepte ou refuse les demandes de connexion.
5. Environnement de test
Le réseau du consommateur se compose d'une adresse IP statique TCP utilisée pour générer les requêtes adressées au producteur de services, en plus du rattachement target-service-attachment qui correspond au rattachement de service du producteur (service publié).
Penchons-nous à présent sur le réseau des producteurs. Notez que le réseau du producteur ne dispose pas d'un mappage avec le réseau du client, mais qu'il contient un rattachement de service (service publié) utilisé par le client pour les services. Dans notre atelier, le rattachement de service du producteur est un équilibreur de charge interne de couche 4 (producer-forwarding-rule) mappé à un service de backend prenant en charge une application TCP.
Le sous-réseau NAT et les règles de pare-feu associées autorisent la communication avec l'application du producteur.
Configuration de l'environnement au rythme de chacun
- Connectez-vous à la console Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)
Mémorisez l'ID du projet. Il s'agit d'un nom unique permettant de différencier chaque projet Google Cloud (le nom ci-dessus est déjà pris ; vous devez en trouver un autre). Il sera désigné par le nom PROJECT_ID
tout au long de cet atelier de programmation.
- Vous devez ensuite activer la facturation dans Cloud Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation est très peu coûteuse, voire gratuite. Veillez à suivre les instructions de la section "Nettoyer" qui indique comment désactiver les ressources afin d'éviter les frais une fois ce tutoriel terminé. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai sans frais pour bénéficier d'un crédit de 300$.
Démarrer Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.
Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :
Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :
Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.
6. Avant de commencer
L'atelier de programmation nécessite deux projets, bien que ce ne soit pas obligatoire pour PSC. Prenez note des références à la prise en charge d'un ou de plusieurs projets.
Projet unique : mettre à jour le projet pour assurer la compatibilité avec les réseaux de producteurs et de consommateurs
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME consumerproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
Projets multiples : mettre à jour le projet pour qu'il prenne en charge le réseau de producteurs
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
7. Créer le réseau VPC des producteurs
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service Producer
Réseau VPC
Depuis Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Créer un sous-réseau
Depuis Cloud Shell
gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2
Créer une instance Cloud NAT
Cloud NAT n'est pas le même NAT que celui utilisé pour PSC. Cloud NAT est explicitement utilisé pour accéder à Internet afin de télécharger des packages d'applications.
Créer un routeur cloud
Depuis Cloud Shell
gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2
Créer Cloud NAT
Depuis Cloud Shell
gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2
8. Créer des instances de calcul
Depuis Cloud Shell, créez l'instance www-01.
gcloud compute instances create www-01 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=vpc-demo-us-west2 --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y apt-get install apache2 -y a2ensite default-ssl apt-get install iperf3 -y a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" filter="{print \$NF}" vm_zone="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/zone \ | awk -F/ "${filter}")" echo "Page on $vm_hostname in $vm_zone" | \ tee /var/www/html/index.html systemctl restart apache2 iperf3 -s -p 5050'
Depuis Cloud Shell, créez l'instance www-02.
gcloud compute instances create www-02 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=vpc-demo-us-west2 --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y apt-get install apache2 -y a2ensite default-ssl apt-get install iperf3 -y a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" filter="{print \$NF}" vm_zone="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/zone \ | awk -F/ "${filter}")" echo "Page on $vm_hostname in $vm_zone" | \ tee /var/www/html/index.html systemctl restart apache2 iperf3 -s -p 5050'
9. Créer un groupe d'instances non géré
Créer un groupe d'instances non géré composé de www-01 et www-02
Depuis Cloud Shell
gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02 gcloud compute health-checks create http hc-http-80 --port=80
10. Créer des services de backend TCP, une règle de transfert et pare-feu
Créer le service de backend depuis Cloud Shell
gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80 gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a
Créer la règle de transfert à partir de Cloud Shell
gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2
Depuis Cloud Shell, créez une règle de pare-feu pour activer les vérifications de l'état du backend.
gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging
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.
Depuis Cloud Shell
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
11. Créer un sous-réseau NAT TCP
Depuis Cloud Shell
gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect
12. Créer un rattachement de service TCP et des règles de pare-feu
Créer le rattachement de service TCP à partir de Cloud Shell
gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp
Valider le rattachement de service TCP
gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2
Dans Cloud Shell, créez la règle de pare-feu autorisant le sous-réseau TCP NAT à accéder au backend de l'ILB.
gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging
13. Créer le réseau VPC de clients
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service client
Dans la section suivante, le VPC consommateur est configuré dans un projet distinct. La communication entre le réseau du client et du producteur s'effectue via le rattachement de service défini dans le réseau du client.
Réseau VPC
L'atelier de programmation nécessite deux projets, bien que ce ne soit pas obligatoire pour PSC. Prenez note des références à la prise en charge d'un ou de plusieurs projets.
Projet unique : mettre à jour le projet pour assurer la compatibilité avec les réseaux de producteurs et de consommateurs
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME prodproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
Projets multiples : mettre à jour le projet pour permettre à un client d'un réseau
Dans Cloud Shell, assurez-vous que l'ID de votre projet est configuré.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME echo $consumerproject
Depuis Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom
Créer un sous-réseau pour PSC
Depuis Cloud Shell
gcloud compute networks subnets create consumer-subnet --project=$consumerproject --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-west2
Créer une adresse IP statique pour les applications TCP
Depuis Cloud Shell
gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --subnet=consumer-subnet --addresses 10.0.60.100
Créer des règles de pare-feu
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.
Depuis Cloud Shell
gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Créer une règle de pare-feu de sortie (non obligatoire pour PSC) afin de surveiller le trafic PSC du client vers le rattachement de service du producteur
gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging
Créer une instance Cloud NAT
Cloud NAT n'est pas le même NAT que celui utilisé pour PSC. Cloud NAT est explicitement utilisé pour accéder à Internet afin de télécharger des packages d'application
Créer un routeur cloud
Depuis Cloud Shell
gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2
Créer Cloud NAT
Depuis Cloud Shell
gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2
14. Créer une VM d'instance de test
Depuis Cloud Shell
gcloud compute instances create test-instance-1 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=consumer-subnet --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install iperf3 -y apt-get install tcpdump -y'
15. Créer un rattachement de service TCP
Depuis Cloud Shell
gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp
16. Validation
Nous utiliserons CURL, TCPDUMP et les journaux de pare-feu pour valider la communication du client et du producteur.
Dans le projet du client, les adresses IP statiques sont utilisées pour établir la communication avec le producteur. Ce mappage de l'adresse IP statique avec la règle de transfert du consommateur est validé à l'aide de la syntaxe suivante.
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service client
À partir de l'interface Cloud Shell des VPC du client, identifiez la règle de transfert TCP et l'adresse IP statique.
gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2
Sortie :
IPAddress: 10.0.60.100 IPProtocol: TCP creationTimestamp: '2021-07-14T13:34:23.359-07:00' id: '2768158450402915488' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr-tcp <snip>
17. Validation TCP
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service Producer
Dans le projet Producer,identifiez "www-01". & "www-02" et lancer une session SSH par instance.
Source : www-01 utiliser TCPDUMP pour surveiller la NAT
sudo tcpdump -i any net 192.168.0.0/16 -n
Source : www-02 utiliser TCPDUMP pour surveiller la NAT
sudo tcpdump -i any net 192.168.0.0/16 -n
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service client
Dans le projet client,identifiez "test-instance-1". et lancer deux sessions.
Depuis "test-instance-1" session 1, effectuer TCPDUMP pour surveiller
sudo tcpdump -i any host 10.0.60.100 -n
Depuis "test-instance-1" la deuxième session effectue une validation TCP
curl -v 10.0.60.100
18. Observations des consommateurs
Depuis "test-instance-1" le CURL de la deuxième session est une réussite et un résultat de 200 OK.
@test-instance-1:~$ curl -v 10.0.60.100 * Rebuilt URL to: 10.0.60.100/ * Trying 10.0.60.100... * TCP_NODELAY set * Connected to 10.0.60.100 (10.0.60.100) port 80 (#0) > GET / HTTP/1.1 > Host: 10.0.60.100 > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Date: Wed, 14 Jul 2021 21:20:22 GMT < Server: Apache/2.4.25 (Debian) < Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT < ETag: "1d-5c71aed5edabd" < Accept-Ranges: bytes < Content-Length: 29 < Content-Type: text/html < Page on www-01 in us-west2-a * Curl_http_done: called premature == 0 * Connection #0 to host 10.0.60.100 left intact
Depuis "test-instance-1" Le protocole TCPDUMP de la session 1 identifie l'instance de VM → le protocole TCP, la communication et la réponse IP statiques
21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1 21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK
Journalisation de pare-feu
Validez la règle de pare-feu "vpc-consumner-psc" de l'explorateur de journaux capture le flux entre l'instance de VM et l'adresse IP statique
- Dans la console Cloud, identifiez la journalisation des opérations → Explorateur de journaux.
- Dans le champ "Requête", mettez à jour l'entrée ci-dessous avec votreprojetconsommateur et sélectionnez "Exécuter la requête".
logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- Les résultats de la requête fournissent les éléments suivants, d'après la capture d'écran fournie.
- Développez le journal et identifiez la sortie fournie ci-dessous. Notez l'adresse IP de dest_ip: 10.0.60.100 correspond à l'adresse IP TCP STATIC et src_ip: 10.0.60.2 à l'adresse IP de l'instance de VM.
19. Observations - Producteur
Depuis l'instance backend "www-01" ou "www-02" la communication suivante entre le sous-réseau NAT TCP et l'ILB TCP est observée.
21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1 21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK
20. Journalisation de pare-feu
Validez la règle de pare-feu "vpc-demo-allowpsc-tcp" de l'explorateur de journaux est la capture de la NAT TCP et Procédez comme suit:
- Dans la console Cloud, identifiez la journalisation des opérations → Explorateur de journaux.
- Dans le champ "Query" (Requête), remplacez l'entrée ci-dessous par votreprojetprod, puis sélectionnez "Run Query" (Exécuter la requête).
logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-producer/firewall:vpc-demo-allowpsc-tcp")
- Les résultats de la requête fournissent les éléments suivants, d'après la capture d'écran fournie.
- Développez le journal et identifiez la sortie fournie ci-dessous. Prenez note du TCP ILB dest_ip: 10.0.2.10 et NAT TCP source_range (192.168.0.0/24) et l'adresse IP src_ip correspondante: 192.168.0.2.
21. Activer le protocole de proxy
Par défaut, Private Service Connect traduit l'adresse IP source du client en une adresse située dans l'un des sous-réseaux Private Service Connect du réseau VPC du producteur de services. Si vous préférez afficher l'adresse IP source d'origine du client, vous pouvez activer le protocole de PROXY. Si le protocole de PROXY est activé, vous pouvez obtenir l'adresse IP source et l'ID de connexion PSC dans l'en-tête du protocole de PROXY
Supprimer les services publiés par les producteurs
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service Producer
Supprimer les rattachements de service TCP à partir de Cloud Shell
gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet
Validez la suppression des rattachements de service dans Cloud Shell (0 élément listé)
gcloud compute service-attachments list
Créer un rattachement de service TCP avec le protocole de proxy activé
gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \ --producer-forwarding-rule=vpc-demo-www-ilb-tcp \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=vpc-demo-us-west2-psc-tcp \ --enable-proxy-protocol
Depuis Cloud Shell, validez la création des rattachements de service avec le protocole de proxy activé. (vrai)
gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service client
Depuis Cloud Shell, supprimez les règles de transfert TCP
gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet
Recréer les règles de transfert TCP à associer au rattachement de service (producteur) créé précédemment
Créer la règle de transfert TCP depuis Cloud Shell
gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \ --region=us-west2 --network=vpc-demo-consumer \ --address=vpc-consumer-psc-tcp \ --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp
Validation du protocole proxy
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service Producer
Dans le projet Producer,identifiez "www-01". & "www-02" et lancer une session par instance.
Source : www-01 utiliser TCPDUMP pour surveiller la NAT
sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16
Source : www-02 utiliser TCPDUMP pour surveiller la NAT
sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service client
Dans le projet client,identifiez "test-instance-1". et lancer une même session
Depuis "test-instance-1" exécuter une requête curl
curl 10.0.60.100
Observations des consommateurs
Notez que si le protocole de PROXY v2 est activé, mais que l'application n'est pas configurée pour la prendre en charge, un message d'erreur s'affiche en cas de connexion depuis le client (comme dans l'exemple ci-dessous). Des mises à jour Apache sont requises pour prendre en charge l'en-tête supplémentaire du proxy v2 et que nous n'aborderons pas dans cet atelier de programmation.
Depuis "test-instance-1" Le paramètre CURL de la session génèrera 400 requêtes incorrectes attendues bien que la requête du backend aboutisse.
@test-instance-1:~$ curl 10.0.60.100 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>
Observations des consommateurs
Depuis l'instance backend "www-01" ou "www-02" les communications suivantes entre le sous-réseau NAT TCP et l'ILB TCP sont observées avec le protocole de proxy intégré à la capture.
Dans la plupart des cas, le troisième paquet de tcpdump contient les éléments d’information du protocole proxy (IE) pertinents. Vous pouvez également identifier le paquet avec 39 octets contenant le protocole de proxy IE.
192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP 0x0000: 4500 004f 0000 4000 4006 6df4 c0a8 0003 E..O..@.@.m..... 0x0010: 0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b .......P..+<N%.. 0x0020: 5018 6e00 b617 0000 0d0a 0d0a 000d 0a51 P.n............Q 0x0030: 5549 540a 2111 0017 0a00 3c02 0a00 3c64 UIT.!.....<...<d 0x0040: 8138 0050 e000 0800 9b34 d70a 003c 64 .8.P.....4...<d
Identifier la signature du protocole de PROXY: 0d0a0d0a000d0a515549540a dans la capture de paquets
En identifiant la signature du protocole de PROXY, il est possible de la décomposer et de décoder les champs comme suit:
Signature du protocole de PROXY: 0d0a0d0a000d0a515549540a
Autres champs du protocole de PROXY: 21 11 00 17
Adresses IP et ports: 0a003c02 0a003c64 8138 0050
Type de TLV: e0
Longueur TLV: 00 08
ID pscConnection: 009b34d70a003c64
Hex | Décimal / IP | ||
Signature du protocole de PROXY |
| ||
Version, protocole, longueur |
| ||
IP Src |
|
| |
Adresse IP DS |
|
| |
Port Src |
|
| |
Port Dst |
|
| |
Type de TLV (PP2_TYPE_GCP) |
| ||
Longueur TLV |
| ||
pscConnectionId |
|
|
Vous pouvez également valider le pscConnectionId en décrivant la règle de transfert du client comme ci-dessous et en vous assurant qu'elle correspond:
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service client
À partir de Cloud Shell, décrivez les règles de transfert TCP
gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
Résultat décrivant le pscConnectionID
$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2 IPAddress: 10.0.60.100 IPProtocol: TCP creationTimestamp: '2021-07-14T16:50:31.766-07:00' id: '4443494505307621032' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr-tcp network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer networkTier: PREMIUM pscConnectionId: '43686719580552292' pscConnectionStatus: ACCEPTED
22. Règle de connexion
Vous pouvez basculer entre l'acceptation automatique et explicite d'un projet pour un service publié.
Le passage de l'acceptation automatique à l'acceptation explicite n'a aucune incidence sur les points de terminaison des clients qui s'étaient connectés au service avant ce changement. Les points de terminaison des clients existants peuvent se connecter au service publié jusqu'à ce que le rattachement de service soit supprimé. Les nouveaux points de terminaison des clients doivent être acceptés avant de pouvoir se connecter au service. Pour en savoir plus, consultez Gérer les demandes d'accès à un service publié.
Dans cette section de l'atelier, vous allez modifier la règle de connexion du producteur pour approuver explicitement le rattachement de service du client.
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service Producer
À partir du service producteurs, Cloud Shell met à jour la règle de préférence de connexion en remplaçant "Accepter automatiquement" par Accepter manuellement.
gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL
Identifiez l'état du point de terminaison en accédant à Services réseau → Private Service Connect → Services publiés → vpc-demo-psc-west2-tcp → Projets connectés
Remarque : Le projet du client a été défini sur "En attente" sous "Projets connectés".
Acceptez le projet client en exécutant la commande suivante dans Cloud Shell. Veillez à le mettre à jour avec le nom de projet approprié.
gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20
Identifiez l'état du point de terminaison en accédant à Services réseau → Private Service Connect → Services publiés → vpc-demo-psc-west2-tcp → Projets connectés
Avertissement : Le projet du client a été défini sur "Accepté" sous "Projets connectés".
23. Étapes de nettoyage
Étapes de nettoyage du réseau du producteur
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service Producer
Supprimer les composants de l'atelier à partir d'une seule interface Cloud Shell dans le terminal du projet Producer
gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet gcloud compute routers delete crnatprod --region=us-west2 --quiet gcloud compute instances delete www-01 --zone=us-west2-a --quiet gcloud compute instances delete www-02 --zone=us-west2-a --quiet gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet gcloud compute health-checks delete hc-http-80 --quiet gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet gcloud compute firewall-rules delete vpc-demo-health-checks --quiet gcloud compute firewall-rules delete psclab-iap-prod --quiet gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet gcloud compute networks delete vpc-demo-producer --quiet
Remarque: Dans la section suivante, exécutez les mises à jour de configuration dans le projet contenant votre service client
Étapes de nettoyage du réseau du consommateur
Supprimer les composants de l'atelier à partir d'une seule interface Cloud Shell dans le terminal du projet Producer
gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet gcloud compute routers delete crnatconsumer --region=us-west2 --quiet gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet gcloud compute firewall-rules delete psclab-iap-consumer --quiet gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet gcloud compute firewall-rules delete vpc-consumer-psc --quiet gcloud compute networks delete vpc-demo-consumer --quiet
24. Félicitations !
Bravo ! Vous avez terminé cet atelier de programmation.
Points abordés
- Avantages de Private Service Connect
- Concepts clés pour les clients de services
- Concepts clés pour les producteurs de services
- Créer un environnement de producteur
- Exposer le service (environnement de producteur) via un rattachement de service
- Créer un environnement grand public
- Créer une règle de transfert dans le réseau consommateur
- Valider l’accès des consommateurs TCP
- Activer et valider le protocole de proxy
- Activer le contrôle d'accès aux règles