1. Introduzione
Private Service Connect
Private Service Connect è una funzionalità di networking di Google Cloud che consente ai consumer di accedere ai servizi gestiti privatamente dall'interno della propria rete VPC. Allo stesso modo, consente ai producer di servizi gestiti di ospitare questi servizi nelle proprie reti VPC separate e di offrire una connessione privata ai propri consumer.

Controllo dell'accesso del producer di Private Service Connect
Anziché accettare automaticamente tutte le connessioni da qualsiasi consumer, i producer possono accettare le richieste di connessione in entrata solo se il consumer è presente nell'elenco di accettazione del consumer. Puoi specificare i consumer per progetto, rete VPC o singolo endpoint PSC. Non puoi includere diversi tipi di consumer nello stesso elenco di accettazione o rifiuto del consumer.
Per entrambe le preferenze di connessione, le connessioni accettate possono essere sostituite e rifiutate da una policy dell'organizzazione (compute.restrictPrivateServiceConnectConsumer) che blocca le connessioni in entrata.
Tieni presente che la policy dell'organizzazione (compute.restrictPrivateServiceConnectConsumer) si applica all'organizzazione,alla cartella o al progetto. Se vuoi un controllo dell'accesso granulare all'endpoint PSC, puoi utilizzare l'elenco di accettazione del consumer dei singoli endpoint PSC.
Controllo dell'accesso basato su endpoint
Il controllo dell'accesso basato su endpoint PSC consente a un producer di autorizzare i consumer tramite singoli endpoint PSC nelle policy di collegamento del servizio.
Questo approccio, consigliato per i servizi multi-tenant, fornisce il controllo più granulare per la gestione delle connessioni.
Questo codelab si concentra sull'apprendimento della configurazione di questa funzionalità.
Tieni presente che questo metodo non si applica ai backend di Private Service Connect.
2. Obiettivi didattici
- Come producer, come pubblicare un servizio utilizzando PSC.
- Come producer, come creare un controllo dell'accesso basato su endpoint PSC.
- Come consumer, come accedere al servizio PSC.
3. Architettura complessiva del lab

4. Passaggi di preparazione
Ruoli IAM richiesti per lavorare nel lab
Inizia assegnando i ruoli IAM richiesti all'account GCP a livello di progetto.
- Compute Network Admin (
roles/compute.networkAdmin) Questo ruolo ti consente di controllare completamente le risorse di networking di Compute Engine. - Logging Admin (
roles/logging.admin) Questo ruolo ti consente di accedere a tutte le autorizzazioni di logging e alle autorizzazioni dipendenti. - Service Usage Admin (
roles/serviceusage.serviceUsageAdmin) Questo ruolo ti consente di abilitare, disabilitare e analizzare gli stati dei servizi, analizzare le operazioni e utilizzare la quota e la fatturazione per un progetto consumer. - Compute Instance Admin (
roles/compute.instanceAdmin.v1) Questo ruolo ti consente di controllare completamente le istanze, i gruppi di istanze, i dischi, gli snapshot e le immagini di Compute Engine. Accesso in lettura a tutte le risorse di networking di Compute Engine. - Compute Security Admin (
roles/compute.securityAdmin) Questo ruolo ti consente di creare, modificare ed eliminare regole firewall e certificati SSL, nonché di configurare le impostazioni di Shielded VM.
Abilita API
In Cloud Shell, assicurati che il progetto sia configurato correttamente e imposta le variabili di ambiente.
In Cloud Shell, esegui le seguenti operazioni:
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
Abilita tutte le API di Google necessarie nel progetto. In Cloud Shell, esegui le seguenti operazioni:
gcloud services enable \
compute.googleapis.com
Crea VPC producer
Nel progetto, crea una rete VPC con la modalità subnet personalizzata. Esegui le seguenti operazioni in Cloud Shell:
gcloud compute networks create producer-net \
--subnet-mode=custom
Crea subnet nel VPC producer
Avrai bisogno di tre subnet: producer-subnet per il tuo servizio, proxy-only-subnet per il bilanciatore del carico per pubblicare il servizio e psc-subnet per PSC per pubblicare il servizio.
In Cloud Shell, esegui le seguenti operazioni per creare subnet 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
Crea Cloud NAT e router Cloud per il VPC producer
Cloud NAT viene utilizzato per consentire alla VM di scaricare e installare le applicazioni.
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
Crea VPC consumer
Nel progetto, crea una rete VPC con la modalità subnet personalizzata. Esegui le seguenti operazioni in Cloud Shell:
gcloud compute networks create consumer-net \
--subnet-mode=custom
Crea subnet nel VPC consumer
In Cloud Shell, esegui le seguenti operazioni per creare una subnet IPV4:
gcloud compute networks subnets create consumer-subnet \
--network=consumer-net \
--range=10.20.0.0/24 \
--region=$region
Crea una policy del firewall globale per il VPC producer e il VPC consumer
Creerai una policy del firewall di rete globale e la assocerai al VPC producer e al VPC consumer.
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
Consenti SSH
Per consentire a Identity-Aware Proxy (IAP) di connettersi alle tue istanze VM, crea una regola firewall che:
- Si applichi a tutte le istanze VM a cui vuoi accedere tramite IAP.
- Consenta il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro 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
Aggiungi regole firewall in entrata al tuo servizio
Utilizzerai il bilanciatore del carico delle applicazioni interno regionale per pubblicare il servizio.La regola firewall in entrata deve consentire alla subnet solo proxy di accedere al servizio. Per informazioni dettagliate, consulta questo documento.
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
Consenti il controllo di integrità del bilanciatore del carico al tuo servizio
I probe di controllo di integrità del bilanciatore del carico delle applicazioni interno regionale utilizzano gli intervalli 35.191.0.0/16 e 130.211.0.0/22. Creerai una regola firewall in entrata per consentire i controlli di integrità dai probe. Per maggiori dettagli, consulta questo documento.
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
Crea una VM come client HTTP nel VPC consumer
In Cloud Shell, esegui le seguenti operazioni per creare un'istanza VM come client di test:
gcloud compute instances create myclient \
--zone=$zone \
--subnet=consumer-subnet \
--shielded-secure-boot \
--no-address
Crea una VM come server HTTP nel VPC producer
In Cloud Shell, esegui le seguenti operazioni per creare un'istanza VM come server 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. Il producer pubblica il servizio PSC
Crea il bilanciatore del carico delle applicazioni interno regionale
Creerai un bilanciatore del carico delle applicazioni interno regionale come front-end del servizio e il backend è il gruppo di istanze non gestito il cui endpoint è il server HTTP che abbiamo creato in precedenza.
Prenota l'indirizzo IP del bilanciatore del carico
gcloud compute addresses create l7-ilb-ip-address \
--region=$region \
--subnet=producer-subnet
Crea un gruppo di istanze
Creerai un gruppo di istanze non gestito e aggiungerai l'istanza VM, myserver, al gruppo di istanze.
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
Crea un controllo di integrità HTTP
gcloud compute health-checks create http l7-ilb-basic-check \
--region=$region \
--use-serving-port
Crea il servizio di 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
Aggiungi il backend al servizio di 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
Crea la mappa URL
gcloud compute url-maps create l7-ilb-map \
--default-service=l7-ilb-backend-service \
--region=$region
Crea il proxy di destinazione
gcloud compute target-http-proxies create l7-ilb-proxy \
--url-map=l7-ilb-map \
--url-map-region=$region \
--region=$region
Crea la regola di forwarding
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
Il producer PSC pubblica il servizio
Utilizzerai PSC per pubblicare il servizio con connection-preference=ACCEPT_MANUAL ed elenchi di consumer vuoti.
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. Il consumer crea l'endpoint PSC
Prenota un IP per l'endpoint PSC
gcloud compute addresses create myserver-psc-endpoint-ip \
--region=$region \
--subnet=consumer-subnet \
--ip-version=IPV4
Crea l'endpoint PSC
Crea l'endpoint PSC e recupera l'IP dell'endpoint PSC per i test nel passaggio successivo.
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
Il consumer controlla lo stato dell'endpoint PSC
Prima che il producer aggiunga l'endpoint PSC all'elenco dei consumer, la connessione è visibile nell'endpoint connesso sul lato consumer con lo stato In attesa.
gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region
Vedrai un risultato simile a quello riportato di seguito.
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. Testa l'accesso dalla VM consumer alla VM producer
Controlla l'IP dell'endpoint PSC.
echo $psc_endpoint_ip
Accedi tramite SSH alla VM denominata myclient e verifica se può accedere a myserver sulla porta HTTP 80.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Utilizza curl per accedere all'endpoint PSC che hai creato.
curl -m 10 <psc_endpoint_ip>
Verrà visualizzato il timeout del comando curl. Il client di test del VPC consumer non può accedere al server HTTP nel VPC producer.
curl: (28) Connection timed out after 10001 milliseconds
Torna a Cloud Shell uscendo dalla sessione SSH.
exit
8. Il producer approva l'endpoint PSC
Il producer controlla lo stato dell'endpoint PSC
Prima che il producer aggiunga l'endpoint PSC all'elenco dei consumer, la connessione è visibile nel collegamento del servizio con lo stato In attesa.
gcloud compute service-attachments describe my-psc-service --region=$region
Vedrai un risultato simile a quello riportato di seguito.
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
Recupera l'URI basato sull'ID dell'endpoint PSC
L'URI basato sull'ID dell'endpoint PSC è l'ID della regola di forwarding appena creata dal consumer. Nell'esempio precedente, "endpointWithId" è l'URI dell'endpoint PSC creato dal consumer. Avrai bisogno di questo URI per consentire al producer di creare il controllo dell'accesso basato su endpoint.
( Tieni presente che l'ID connessione PSC non è l'ID che stiamo cercando. )
export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")
echo $psc_endpoint_uri
Aggiungi l'URI basato sull'ID dell'endpoint PSC all'elenco di accettazione del consumer
gcloud compute service-attachments update my-psc-service \
--region=$region \
--consumer-accept-list=$psc_endpoint_uri
Il producer controlla lo stato dell'endpoint PSC
gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"
Vedrai un risultato simile a quello riportato di seguito. Lo stato è cambiato in "ACCETTATO".
{'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. Testa l'accesso dalla VM consumer alla VM producer
Controlla l'IP dell'endpoint PSC.
echo $psc_endpoint_ip
Accedi tramite SSH alla VM denominata myclient e verifica se può accedere a myserver sulla porta HTTP 80.
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Utilizza curl per accedere all'endpoint PSC che hai creato.
curl <psc_endpoint_ip>
Vedrai che il comando curl restituisce correttamente la risposta da myserver. Il client di test del VPC consumer ha avuto accesso al server HTTP nel VPC producer.
I am a Http Server.
Torna a Cloud Shell uscendo dalla sessione SSH.
exit
10. Libera spazio
Libera spazio nelle VM
In Cloud Shell, esegui le seguenti operazioni:
gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet
Libera spazio nei componenti consumer PSC
gcloud compute forwarding-rules delete myserver-psc-endpoint \
--region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
--region=$region --quiet
Liberare spazio nei componenti producer 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
Liberare spazio per firewall, Cloud NAT, router Cloud e 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. Complimenti
Hai testato correttamente il controllo dell'accesso basato su endpoint del producer di Private Service Connect.