1. Introduction
Private Service Connect
Private Service Connect est une fonctionnalité de mise en réseau de Google Cloud qui permet aux consommateurs d'accéder à des services gérés en mode privé depuis leur réseau VPC. De même, il permet aux producteurs de services gérés d'héberger ces services dans leurs propres réseaux VPC séparés et de proposer une connexion privée à leurs clients.

Contrôle des accès aux producteurs Private Service Connect
Au lieu d'accepter automatiquement toutes les connexions de n'importe quel consommateur, les producteurs ne peuvent accepter les demandes de connexion entrantes que si le consommateur figure sur la liste d'acceptation des consommateurs. Vous pouvez spécifier des clients par projet, par réseau VPC ou par point de terminaison PSC individuel. Vous ne pouvez pas inclure différents types de consommateurs dans la même liste d'acceptation ou de refus.
Pour les deux préférences de connexion, les connexions acceptées peuvent être remplacées et refusées par une règle d'administration (compute.restrictPrivateServiceConnectConsumer) qui bloque les connexions entrantes.
Veuillez noter que la règle d'administration (compute.restrictPrivateServiceConnectConsumer) s'applique à l'organisation,au dossier ou au projet. Si vous souhaitez un contrôle précis des accès au point de terminaison PSC, vous pouvez utiliser la liste d'acceptation des consommateurs pour les points de terminaison PSC individuels.
Contrôle des accès basé sur les points de terminaison
Le contrôle des accès basé sur les points de terminaison PSC permet à un producteur d'autoriser les consommateurs via des points de terminaison PSC individuels dans les règles de rattachement de service.
Cette approche, recommandée pour les services multitenants, offre le contrôle le plus précis pour la gestion des connexions.
Cet atelier de programmation vous explique comment configurer cette fonctionnalité.
Veuillez noter que cette méthode ne s'applique pas aux backends Private Service Connect.
2. Points abordés
- En tant que producteur, comment publier un service à l'aide de PSC ?
- En tant que producteur, comment créer un contrôle des accès basé sur un point de terminaison PSC ?
- En tant que consommateur, comment accéder au service PSC ?
3. Architecture globale de l'atelier

4. Étapes de préparation
Rôles IAM requis pour effectuer l'atelier
Commencez par attribuer les rôles IAM requis au compte GCP au niveau du projet.
- Administrateur de réseaux Compute (
roles/compute.networkAdmin) : ce rôle vous permet de contrôler entièrement les ressources réseau Compute Engine. - Administrateur Logging (
roles/logging.admin) : ce rôle vous donne accès à toutes les autorisations de Logging et aux autorisations associées. - Administrateur d'utilisation du service (
roles/serviceusage.serviceUsageAdmin) : ce rôle vous permet d'activer, de désactiver et d'inspecter les états de service, d'inspecter les opérations, et de consommer les quotas et la facturation pour un projet destiné à un consommateur. - Administrateur d'instances Compute (
roles/compute.instanceAdmin.v1) : ce rôle vous permet de contrôler totalement les instances, groupes d'instances, disques, instantanés et images Compute Engine. Fournit un accès en lecture à toutes les ressources réseau Compute Engine. - Administrateur de sécurité Compute (
roles/compute.securityAdmin) : ce rôle vous permet de créer, modifier et supprimer des règles de pare-feu et des certificats SSL, ainsi que de configurer les paramètres de VM protégée.
Activer les API
Dans Cloud Shell, assurez-vous que votre projet est correctement configuré et définissez vos variables d'environnement.
Dans Cloud Shell, procédez comme suit :
gcloud auth login
gcloud config set project <your project id>
export project_id=$(gcloud config get-value project)
export region=us-central1
export zone=$region-a
echo $project_id
echo $region
echo $zone
Activez toutes les API Google nécessaires dans le projet. Dans Cloud Shell, procédez comme suit :
gcloud services enable \
compute.googleapis.com
Créer un VPC producteur
Dans le projet, créez un réseau VPC avec un mode de sous-réseau personnalisé. Dans Cloud Shell, procédez comme suit :
gcloud compute networks create producer-net \
--subnet-mode=custom
Créer des sous-réseaux dans le VPC producteur
Vous aurez besoin de trois sous-réseaux : producer-subnet pour votre service, proxy-only-subnet pour que l'équilibreur de charge publie votre service et psc-subnet pour que PSC publie le service.
Dans Cloud Shell, procédez comme suit pour créer des sous-réseaux IPv4 :
gcloud compute networks subnets create producer-subnet \
--network=producer-net \
--range=10.10.0.0/24 \
--region=$region
gcloud compute networks subnets create proxy-only-subnet \
--purpose=REGIONAL_MANAGED_PROXY \
--role=ACTIVE \
--region=$region \
--network=producer-net \
--range=10.30.0.0/24
gcloud compute networks subnets create psc-subnet \
--network=producer-net \
--region=$region \
--range=192.168.0.0/16 \
--purpose=PRIVATE_SERVICE_CONNECT
Créer Cloud NAT et un routeur Cloud pour le VPC du producteur
Cloud NAT est utilisé pour permettre aux VM de télécharger et d'installer des applications.
gcloud compute routers create $region-cr \
--network=producer-net \
--region=$region
gcloud compute routers nats create $region-nat \
--router=$region-cr \
--region=$region \
--nat-all-subnet-ip-ranges \
--auto-allocate-nat-external-ips
Créer un VPC consommateur
Dans le projet, créez un réseau VPC avec un mode de sous-réseau personnalisé. Dans Cloud Shell, procédez comme suit :
gcloud compute networks create consumer-net \
--subnet-mode=custom
Créer un sous-réseau dans le VPC consommateur
Dans Cloud Shell, procédez comme suit pour créer un sous-réseau IPv4 :
gcloud compute networks subnets create consumer-subnet \
--network=consumer-net \
--range=10.20.0.0/24 \
--region=$region
Créer une stratégie de pare-feu mondiale pour le VPC producteur et le VPC consommateur
Vous allez créer une stratégie de pare-feu réseau mondiale et l'associer au VPC producteur et au VPC consommateur.
gcloud compute network-firewall-policies create global-fw-policy \
--global
gcloud compute network-firewall-policies associations create \
--firewall-policy=global-fw-policy \
--name=producer-fw-policy \
--network=producer-net \
--global-firewall-policy
gcloud compute network-firewall-policies associations create \
--firewall-policy=global-fw-policy \
--name=consumer-fw-policy \
--network=consumer-net \
--global-firewall-policy
Autoriser SSH
Pour autoriser Identity-Aware Proxy (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 être accessible à l'aide d'IAP.
- Autorise le trafic entrant à partir de la plage d'adresses IP 35.235.240.0/20. Cette plage contient toutes les adresses IP qu'IAP utilise pour le transfert TCP.
gcloud compute network-firewall-policies rules create 100 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-iap" \
--direction=INGRESS \
--src-ip-ranges=35.235.240.0/20 \
--layer4-configs=tcp:22 \
--global-firewall-policy
Ajouter des règles de pare-feu d'entrée à votre service
Vous utiliserez l'équilibreur de charge d'application interne régional pour publier le service.La règle de pare-feu d'entrée y doit autoriser le sous-réseau proxy réservé à accéder au service. Pour en savoir plus, consultez ce document.
gcloud compute network-firewall-policies rules create 200 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-access-service" \
--direction=INGRESS \
--src-ip-ranges=10.30.0.0/24 \
--layer4-configs=tcp:80 \
--global-firewall-policy
Autoriser la vérification de l'état de l'équilibreur de charge pour votre service
Les vérifications de l'état des équilibreurs de charge d'application internes régionaux utilisent les plages 35.191.0.0/16 et 130.211.0.0/22. Vous allez créer une règle de pare-feu pour le trafic entrant afin d'autoriser les vérifications d'état à partir des vérificateurs. Pour en savoir plus, consultez ce document.
gcloud compute network-firewall-policies rules create 300 \
--action=ALLOW \
--firewall-policy=global-fw-policy \
--description="producer-allow-health-check" \
--direction=INGRESS \
--src-ip-ranges=35.191.0.0/16,130.211.0.0/22\
--layer4-configs=tcp:80 \
--global-firewall-policy
Créer une VM en tant que client HTTP dans le VPC consommateur
Dans Cloud Shell, procédez comme suit pour créer une instance de VM en tant que client de test :
gcloud compute instances create myclient \
--zone=$zone \
--subnet=consumer-subnet \
--shielded-secure-boot \
--no-address
Créer une VM en tant que serveur HTTP dans le VPC producteur
Dans Cloud Shell, procédez comme suit pour créer une instance de VM en tant que serveur HTTP :
gcloud compute instances create myserver \
--subnet=producer-subnet \
--zone=$zone \
--no-address \
--shielded-secure-boot \
--metadata startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install apache2 -y
a2enmod ssl
sudo a2ensite default-ssl
echo "I am a Http Server." | \
tee /var/www/html/index.html
systemctl restart apache2'
5. Producteur publiant un service PSC
Créer un équilibreur de charge d'application interne régional
Vous allez créer un équilibreur de charge d'application interne régional en tant que frontend du service. Le backend est le groupe d'instances non géré dont le point de terminaison est le serveur HTTP que nous avons créé précédemment.
Réserver l'adresse IP de l'équilibreur de charge
gcloud compute addresses create l7-ilb-ip-address \
--region=$region \
--subnet=producer-subnet
Créer un groupe d'instances
Vous allez créer un groupe d'instances non géré et y ajouter l'instance de VM myserver.
gcloud compute instance-groups unmanaged create my-service-ig \
--zone=$zone
gcloud compute instance-groups unmanaged add-instances my-service-ig \
--zone=$zone \
--instances=myserver
Créer une vérification d'état HTTP
gcloud compute health-checks create http l7-ilb-basic-check \
--region=$region \
--use-serving-port
Créez le service de backend :
gcloud compute backend-services create l7-ilb-backend-service \
--load-balancing-scheme=INTERNAL_MANAGED \
--protocol=HTTP \
--health-checks=l7-ilb-basic-check \
--health-checks-region=$region \
--region=$region
Ajouter un backend au service de backend
gcloud compute backend-services add-backend l7-ilb-backend-service \
--balancing-mode=UTILIZATION \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region
Créer le mappage d'URL
gcloud compute url-maps create l7-ilb-map \
--default-service=l7-ilb-backend-service \
--region=$region
Créer le proxy cible
gcloud compute target-http-proxies create l7-ilb-proxy \
--url-map=l7-ilb-map \
--url-map-region=$region \
--region=$region
Créer la règle de transfert
gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
--load-balancing-scheme=INTERNAL_MANAGED \
--network=producer-net \
--subnet=producer-subnet \
--address=l7-ilb-ip-address \
--ports=80 \
--region=$region \
--target-http-proxy=l7-ilb-proxy \
--target-http-proxy-region=$region
Le producteur PSC publie le service
Vous utiliserez PSC pour publier le service avec connection-preference=ACCEPT_MANUAL et des listes de consommateurs vides.
gcloud compute service-attachments create my-psc-service \
--region=$region \
--target-service=projects/$project_id/regions/$region/forwardingRules/l7-ilb-forwarding-rule \
--connection-preference=ACCEPT_MANUAL \
--nat-subnets=psc-subnet
export myserver_service_attachment=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(selfLink.scope(v1))")
echo $myserver_service_attachment
6. Le client crée le point de terminaison PSC
Réserver une adresse IP pour le point de terminaison PSC
gcloud compute addresses create myserver-psc-endpoint-ip \
--region=$region \
--subnet=consumer-subnet \
--ip-version=IPV4
Créer un point de terminaison PSC
Créez un point de terminaison PSC et obtenez son adresse IP pour le tester à l'étape suivante.
gcloud compute forwarding-rules create myserver-psc-endpoint \
--region=$region \
--network=consumer-net \
--address=myserver-psc-endpoint-ip \
--target-service-attachment=$myserver_service_attachment
psc_endpoint_ip=$(gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region --format="value(IPAddress)")
echo $psc_endpoint_ip
Le consommateur vérifie l'état du point de terminaison PSC.
Avant que le producteur n'ajoute le point de terminaison PSC à la liste des consommateurs, la connexion est visible dans le point de terminaison connecté côté consommateur avec l'état "En attente".
gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region
Un résultat semblable à celui ci-dessous s'affiche.
IPAddress: 10.20.0.3
allowPscGlobalAccess: false
creationTimestamp: '2026-02-23T16:27:27.920-08:00'
fingerprint: yh_UiYqjHCc=
id: '934193159895862912'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: myserver-psc-endpoint
network: https://www.googleapis.com/compute/v1/projects/<project_id>/global/networks/consumer-net
networkTier: PREMIUM
pscConnectionId: '160443618817212419'
pscConnectionStatus: PENDING
region: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
selfLinkWithId: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
serviceDirectoryRegistrations:
- namespace: goog-psc-default
target: https://www.googleapis.com/compute/v1/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service
7. Tester l'accès de la VM de consommateur à la VM de producteur
Vérifiez l'adresse IP du point de terminaison PSC.
echo $psc_endpoint_ip
Connectez-vous en SSH à la VM nommée myclient et vérifiez si elle peut accéder à myserver sur le port HTTP 80.
Dans Cloud Shell, procédez comme suit :
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Utilisez curl pour accéder au point de terminaison PSC que vous avez créé.
curl -m 10 <psc_endpoint_ip>
Vous verrez que la commande curl a expiré. Le client de test du VPC consommateur ne peut pas accéder au serveur HTTP du VPC producteur.
curl: (28) Connection timed out after 10001 milliseconds
Revenez à Cloud Shell en quittant la session SSH.
exit
8. Le producteur approuve le point de terminaison PSC.
Le producteur vérifie l'état du point de terminaison PSC
Avant que le producteur n'ajoute le point de terminaison PSC à la liste des clients, la connexion est visible dans le rattachement de service avec l'état "En attente".
gcloud compute service-attachments describe my-psc-service --region=$region
Un résultat semblable à celui ci-dessous s'affiche.
connectedEndpoints:
- consumerNetwork: https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net
endpoint: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint
endpointWithId: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/934193159895862912
pscConnectionId: '160443618817212419'
status: PENDING
connectionPreference: ACCEPT_MANUAL
creationTimestamp: '2026-02-23T13:27:33.886-08:00'
description: ''
enableProxyProtocol: false
fingerprint: -9EI8FCALrA=
id: '2578692595155826858'
kind: compute#serviceAttachment
name: my-psc-service
natSubnets:
- https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/subnetworks/psc-subnet
pscServiceAttachmentId:
high: '149466704441770984'
low: '2578692595155826858'
reconcileConnections: false
region: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1
selfLink: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/serviceAttachments/my-psc-service
targetService: https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/l7-ilb-forwarding-rule
Obtenir l'URI basé sur l'ID du point de terminaison PSC
L'URI basé sur l'ID du point de terminaison PSC correspond à l'ID de la règle de transfert que le consommateur vient de créer. Dans l'exemple ci-dessus, "endpointWithId" est l'URI du point de terminaison PSC créé par le client. Vous aurez besoin de cet URI pour que le producteur puisse créer un contrôle des accès basé sur les points de terminaison.
( Veuillez noter que l'ID de connexion PSC n'est pas celui que nous recherchons. )
export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")
echo $psc_endpoint_uri
Ajouter un URI basé sur l'ID du point de terminaison PSC à la liste d'acceptation des clients
gcloud compute service-attachments update my-psc-service \
--region=$region \
--consumer-accept-list=$psc_endpoint_uri
Le producteur vérifie l'état du point de terminaison PSC
gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"
Un résultat semblable à celui ci-dessous s'affiche. L'état est passé à "ACCEPTÉ".
{'consumerNetwork': 'https://www.googleapis.com/compute/projects/<project_id>/global/networks/consumer-net', 'endpoint': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/myserver-psc-endpoint', 'endpointWithId': 'https://www.googleapis.com/compute/projects/<project_id>/regions/us-central1/forwardingRules/47564871796017232', 'pscConnectionId': '54547416268144643', 'status': 'ACCEPTED'}
9. Tester l'accès de la VM de consommateur à la VM de producteur
Vérifiez l'adresse IP du point de terminaison PSC.
echo $psc_endpoint_ip
Connectez-vous en SSH à la VM nommée myclient et vérifiez si elle peut accéder à myserver sur le port HTTP 80.
Dans Cloud Shell, procédez comme suit :
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Utilisez curl pour accéder au point de terminaison PSC que vous avez créé.
curl <psc_endpoint_ip>
La commande curl renvoie une réponse de myserver. Le client de test du VPC consommateur a accédé au serveur HTTP du VPC producteur.
I am a Http Server.
Revenez à Cloud Shell en quittant la session SSH.
exit
10. Effectuer un nettoyage
Nettoyer les VM
Dans Cloud Shell, procédez comme suit :
gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet
Nettoyer les composants consommateurs PSC
gcloud compute forwarding-rules delete myserver-psc-endpoint \
--region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
--region=$region --quiet
Nettoyer les composants du producteur PSC
gcloud compute service-attachments delete my-psc-service \
--region=$region --quiet
gcloud compute forwarding-rules delete l7-ilb-forwarding-rule \
--region=$region --quiet
gcloud compute target-http-proxies delete l7-ilb-proxy \
--region=$region --quiet
gcloud compute url-maps delete l7-ilb-map \
--region=$region --quiet
gcloud compute backend-services remove-backend l7-ilb-backend-service \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region --quiet
gcloud compute backend-services delete l7-ilb-backend-service \
--region=$region --quiet
gcloud compute health-checks delete l7-ilb-basic-check \
--region=$region --quiet
gcloud compute instance-groups unmanaged delete my-service-ig \
--zone=$zone --quiet
gcloud compute addresses delete l7-ilb-ip-address \
--region=$region --quiet
Supprimer le pare-feu, Cloud NAT, Cloud Router et les VPC
gcloud compute network-firewall-policies rules delete 100 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 200 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies rules delete 300 \
--firewall-policy=global-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy=global-fw-policy \
--name=producer-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies associations delete \
--firewall-policy=global-fw-policy \
--name=consumer-fw-policy \
--global-firewall-policy --quiet
gcloud compute network-firewall-policies delete global-fw-policy \
--global --quiet
gcloud compute routers nats delete $region-nat \
--router=$region-cr \
--region=$region --quiet
gcloud compute routers delete $region-cr \
--region=$region --quiet
gcloud compute networks subnets delete producer-subnet \
--region=$region --quiet
gcloud compute networks subnets delete proxy-only-subnet \
--region=$region --quiet
gcloud compute networks subnets delete psc-subnet \
--region=$region --quiet
gcloud compute networks delete producer-net --quiet
gcloud compute networks subnets delete consumer-subnet \
--region=$region --quiet
gcloud compute networks delete consumer-net --quiet
11. Félicitations
Vous avez testé avec succès le contrôle des accès basé sur les points de terminaison Private Service Connect du producteur.