Contrôle des accès basé sur les points de terminaison des producteurs PSC

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.

50b907b09af4d8ac.png

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

3d7cbafaffb50d2d.png

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.