Publier et consommer des services à l'aide de Private Service Connect

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.

45b90d50690dd111.png

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.

28b09284a99eb60b.png

Configuration de l'environnement au rythme de chacun

  1. 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.)

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

  1. 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 :

bce75f34b2c53987.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

f6ef2b5f13479f3a.png

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". &amp; "www-02" et lancer une session SSH par instance.

6d0bb8c5cb115876.png

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

  1. Dans la console Cloud, identifiez la journalisation des opérations → Explorateur de journaux.
  2. 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")

  1. Les résultats de la requête fournissent les éléments suivants, d'après la capture d'écran fournie.

b573c878a8d6d01f.png

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

1b4f46b3e61f6f12.png

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:

  1. Dans la console Cloud, identifiez la journalisation des opérations → Explorateur de journaux.
  2. 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")

  1. Les résultats de la requête fournissent les éléments suivants, d'après la capture d'écran fournie.

8ce6b0d17d76ad6d.png

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

e157a7af8cb667e.png

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

e9d1c49971b10ed0.png

Référence à la documentation

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". &amp; "www-02" et lancer une session par instance.

6d0bb8c5cb115876.png

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

0d0a0d0a000d0a515549540a

Version, protocole, longueur

21 11 0017

IP Src

0a003c02

10.0.60.2

Adresse IP DS

0a003c64

10.0.60.100

Port Src

8138

33080

Port Dst

0050

80

Type de TLV (PP2_TYPE_GCP)

e0

Longueur TLV

0008

pscConnectionId

00004dde290a003c64

43686719580552292

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

e1d90d1563e10731.png

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

35cba9ac640594a2.png

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