1. Einführung
Private Service Connect
Private Service Connect ist eine Funktion des Google Cloud-Netzwerks, mit der Nutzer privat aus ihrem VPC-Netzwerk auf verwaltete Dienste zugreifen können. Ebenso können Ersteller verwalteter Dienste diese Dienste in ihren eigenen separaten VPC-Netzwerken hosten und ihren Nutzern eine private Verbindung bieten.

Private Service Connect-Zugriffssteuerung für Ersteller
Anstatt alle Verbindungen von jedem Nutzer automatisch zu akzeptieren, können Ersteller nur eingehende Verbindungsanfragen akzeptieren, wenn der Nutzer auf der Nutzerzulassungsliste steht. Sie können Nutzer nach Projekt, VPC-Netzwerk oder einzelnem PSC-Endpunkt angeben. Sie können nicht verschiedene Arten von Nutzern in dieselbe Nutzerzulassungs- oder -ablehnungsliste aufnehmen.
Bei beiden Verbindungseinstellungen können akzeptierte Verbindungen durch eine Organisationsrichtlinie (compute.restrictPrivateServiceConnectConsumer) überschrieben und abgelehnt werden, die eingehende Verbindungen blockiert.
Die Organisationsrichtlinie (compute.restrictPrivateServiceConnectConsumer) gilt für Organisationen,Ordner oder Projekte. Wenn Sie eine detaillierte Zugriffssteuerung für den PSC-Endpunkt wünschen, können Sie die Nutzerzulassungsliste einzelner PSC-Endpunkte verwenden.
Endpunktbasierte Zugriffssteuerung
Die endpunktbasierte Zugriffssteuerung für PSC ermöglicht es einem Ersteller, Nutzer über einzelne PSC-Endpunkte in den Richtlinien für Dienstanhänge zu autorisieren.
Dieser Ansatz, der für Dienste mit mehreren Mandanten empfohlen wird, bietet die detaillierteste Kontrolle für die Verwaltung von Verbindungen.
In diesem Codelab erfahren Sie, wie Sie diese Funktion konfigurieren.
Diese Methode gilt nicht für Private Service Connect-Back-Ends.
2. Lerninhalte
- Als Ersteller einen Dienst mit PSC veröffentlichen
- Als Ersteller eine endpunktbasierte Zugriffssteuerung für PSC erstellen
- Als Nutzer auf den PSC-Dienst zugreifen
3. Gesamtarchitektur des Labs

4. Vorbereitungsschritte
Erforderliche IAM-Rollen für das Lab
Weisen Sie zuerst die erforderlichen IAM-Rollen dem GCP-Konto auf Projektebene zu.
- Compute-Netzwerkadministrator (
roles/compute.networkAdmin) Diese Rolle bietet Ihnen vollständige Kontrolle über die Compute Engine-Netzwerkressourcen. - Logging-Administrator (
roles/logging.admin) Diese Rolle bietet Ihnen Zugriff auf alle Logging-Berechtigungen und abhängigen Berechtigungen. - Service Usage-Administrator (
roles/serviceusage.serviceUsageAdmin) Mit dieser Rolle können Sie Dienststatus aktivieren, deaktivieren und prüfen, Vorgänge prüfen sowie Kontingent und Abrechnung für ein Nutzerprojekt verarbeiten. - Compute-Instanzadministrator (
roles/compute.instanceAdmin.v1) Diese Rolle bietet Ihnen vollständige Kontrolle über Compute Engine-Instanzen, Instanzgruppen, Laufwerke, Snapshots und Images. Lesezugriff auf alle Compute Engine-Netzwerkressourcen. - Compute Security Admin (
roles/compute.securityAdmin) Mit dieser Rolle können Sie Firewallregeln und SSL-Zertifikate erstellen, ändern und löschen sowie Einstellungen für Shielded VMs konfigurieren.
APIs aktivieren
Prüfen Sie in Cloud Shell, ob Ihr Projekt richtig konfiguriert ist, und legen Sie Ihre Umgebungsvariablen fest.
Führen Sie in Cloud Shell folgende Schritte aus:
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
Aktivieren Sie alle erforderlichen Google APIs im Projekt. Führen Sie in Cloud Shell folgende Schritte aus:
gcloud services enable \
compute.googleapis.com
Ersteller-VPC erstellen
Erstellen Sie im Projekt ein VPC-Netzwerk mit benutzerdefiniertem Subnetzmodus. Führen Sie in Cloud Shell folgende Schritte aus:
gcloud compute networks create producer-net \
--subnet-mode=custom
Subnetze in der Ersteller-VPC erstellen
Sie benötigen drei Subnetze: „producer-subnet“ für Ihren Dienst, „proxy-only-subnet“ für den Load Balancer zum Veröffentlichen Ihres Dienstes und „psc-subnet“ für PSC zum Veröffentlichen des Dienstes.
Führen Sie in Cloud Shell folgende Schritte aus, um IPv4-Subnetze zu erstellen:
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
Cloud NAT und Cloud Router für die Ersteller-VPC erstellen
Mit Cloud NAT können VMs Anwendungen herunterladen und installieren.
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
Nutzer-VPC erstellen
Erstellen Sie im Projekt ein VPC-Netzwerk mit benutzerdefiniertem Subnetzmodus. Führen Sie in Cloud Shell folgende Schritte aus:
gcloud compute networks create consumer-net \
--subnet-mode=custom
Subnetz in der Nutzer-VPC erstellen
Führen Sie in Cloud Shell folgende Schritte aus, um ein IPv4-Subnetz zu erstellen:
gcloud compute networks subnets create consumer-subnet \
--network=consumer-net \
--range=10.20.0.0/24 \
--region=$region
Globale Firewallrichtlinie für die Ersteller-VPC und die Nutzer-VPC erstellen
Sie erstellen eine globale Netzwerk-Firewallrichtlinie und verknüpfen sie mit der Ersteller-VPC und der Nutzer-VPC.
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
SSH zulassen
Damit Identity-Aware Proxy (IAP) eine Verbindung zu Ihren VM-Instanzen herstellen kann, erstellen Sie eine Firewallregel, die:
- für alle VM-Instanzen gilt, die über IAP zugänglich sein sollen.
- eingehenden Traffic aus dem IP-Bereich 35.235.240.0/20 zulässt. Dieser Bereich enthält alle IP-Adressen, die IAP für die TCP-Weiterleitung verwendet.
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
Firewallregeln für eingehenden Traffic zu Ihrem Dienst hinzufügen
Sie verwenden den regionalen internen Application Load Balancer, um den Dienst zu veröffentlichen.Die Firewallregel für eingehenden Traffic muss zulassen, dass das Nur-Proxy-Subnetz auf den Dienst zugreift. Weitere Informationen finden Sie in diesem Dokument.
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
Load Balancer-Systemdiagnose für Ihren Dienst zulassen
Die Systemdiagnoseprüfungen des regionalen internen Application Load Balancers verwenden die Bereiche 35.191.0.0/16 und 130.211.0.0/22. Sie erstellen eine Firewallregel für eingehenden Traffic, um Systemdiagnosen von den Prüfungen zuzulassen. Weitere Informationen finden Sie in diesem Dokument.
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
VM als HTTP-Client in der Nutzer-VPC erstellen
Führen Sie in Cloud Shell folgende Schritte aus, um eine VM-Instanz als Testclient zu erstellen:
gcloud compute instances create myclient \
--zone=$zone \
--subnet=consumer-subnet \
--shielded-secure-boot \
--no-address
VM als HTTP-Server in der Ersteller-VPC erstellen
Führen Sie in Cloud Shell folgende Schritte aus, um eine VM-Instanz als HTTP-Server zu erstellen:
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. Ersteller veröffentlicht PSC-Dienst
Regionalen internen Application Load Balancer erstellen
Sie erstellen einen regionalen internen Application Load Balancer als Front-End des Dienstes. Das Back-End ist die nicht verwaltete Instanzgruppe, deren Endpunkt der zuvor erstellte HTTP-Server ist.
IP-Adresse des Load Balancers reservieren
gcloud compute addresses create l7-ilb-ip-address \
--region=$region \
--subnet=producer-subnet
Instanzgruppe erstellen
Sie erstellen eine nicht verwaltete Instanzgruppe und fügen die VM-Instanz „myserver“ der Instanzgruppe hinzu.
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
HTTP-Systemdiagnose erstellen
gcloud compute health-checks create http l7-ilb-basic-check \
--region=$region \
--use-serving-port
Back-End-Dienst erstellen
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
Back-End zum Back-End-Dienst hinzufügen
gcloud compute backend-services add-backend l7-ilb-backend-service \
--balancing-mode=UTILIZATION \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region
URL-Zuordnung erstellen
gcloud compute url-maps create l7-ilb-map \
--default-service=l7-ilb-backend-service \
--region=$region
Zielproxy erstellen
gcloud compute target-http-proxies create l7-ilb-proxy \
--url-map=l7-ilb-map \
--url-map-region=$region \
--region=$region
Weiterleitungsregel erstellen
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
PSC-Ersteller veröffentlicht den Dienst
Sie verwenden PSC, um den Dienst mit connection-preference=ACCEPT_MANUAL und leeren Nutzerlisten zu veröffentlichen.
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. Nutzer erstellt den PSC-Endpunkt
IP-Adresse für den PSC-Endpunkt reservieren
gcloud compute addresses create myserver-psc-endpoint-ip \
--region=$region \
--subnet=consumer-subnet \
--ip-version=IPV4
PSC-Endpunkt erstellen
Erstellen Sie einen PSC-Endpunkt und rufen Sie die IP-Adresse des PSC-Endpunkts für Tests im nächsten Schritt ab.
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
Nutzer prüft den Status des PSC-Endpunkts
Bevor der Ersteller den PSC-Endpunkt der Nutzerliste hinzufügt, ist die Verbindung auf der Nutzerseite unter „Verbundener Endpunkt“ mit dem Status „Ausstehend“ sichtbar.
gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region
Sie sehen ein ähnliches Ergebnis wie unten.
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. Zugriff von der Nutzer-VM auf die Ersteller-VM testen
Prüfen Sie die IP-Adresse des PSC-Endpunkts.
echo $psc_endpoint_ip
Stellen Sie eine SSH-Verbindung zur VM „myclient“ her und prüfen Sie, ob sie auf „myserver“ unter http-Port 80 zugreifen kann.
Führen Sie in Cloud Shell folgende Schritte aus:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Verwenden Sie „curl“, um auf den erstellten PSC-Endpunkt zuzugreifen.
curl -m 10 <psc_endpoint_ip>
Der „curl“-Befehl wird mit einem Zeitüberschreitungsfehler beendet. Der Testclient aus der Nutzer-VPC kann nicht auf den HTTP-Server in der Ersteller-VPC zugreifen.
curl: (28) Connection timed out after 10001 milliseconds
Kehren Sie zu Cloud Shell zurück, indem Sie die SSH-Sitzung beenden.
exit
8. Ersteller genehmigt den PSC-Endpunkt
Ersteller prüft den Status des PSC-Endpunkts
Bevor der Ersteller den PSC-Endpunkt der Nutzerliste hinzufügt, ist die Verbindung im Dienstanhang mit dem Status „Ausstehend“ sichtbar.
gcloud compute service-attachments describe my-psc-service --region=$region
Sie sehen ein ähnliches Ergebnis wie unten.
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
ID-basierten URI des PSC-Endpunkts abrufen
Der ID-basierte URI des PSC-Endpunkts ist die ID der Weiterleitungsregel, die der Nutzer gerade erstellt hat. Im obigen Beispiel ist „endpointWithId“ der URI des PSC-Endpunkts, der vom Nutzer erstellt wurde. Dieser URI ist erforderlich, damit der Ersteller eine endpunktbasierte Zugriffssteuerung erstellen kann.
( Die PSC-Verbindungs-ID ist nicht die ID, die wir suchen. )
export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")
echo $psc_endpoint_uri
ID-basierten URI des PSC-Endpunkts der Nutzerzulassungsliste hinzufügen
gcloud compute service-attachments update my-psc-service \
--region=$region \
--consumer-accept-list=$psc_endpoint_uri
Ersteller prüft den Status des PSC-Endpunkts
gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"
Sie sehen ein ähnliches Ergebnis wie unten. Der Status hat sich in „AKZEPTIERT“ geändert.
{'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. Zugriff von der Nutzer-VM auf die Ersteller-VM testen
Prüfen Sie die IP-Adresse des PSC-Endpunkts.
echo $psc_endpoint_ip
Stellen Sie eine SSH-Verbindung zur VM „myclient“ her und prüfen Sie, ob sie auf „myserver“ unter http-Port 80 zugreifen kann.
Führen Sie in Cloud Shell folgende Schritte aus:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Verwenden Sie „curl“, um auf den erstellten PSC-Endpunkt zuzugreifen.
curl <psc_endpoint_ip>
Der „curl“-Befehl gibt erfolgreich eine Antwort von myserver zurück. Der Testclient aus der Nutzer-VPC hat auf den HTTP-Server in der Ersteller-VPC zugegriffen.
I am a Http Server.
Kehren Sie zu Cloud Shell zurück, indem Sie die SSH-Sitzung beenden.
exit
10. Bereinigen
VMs bereinigen
Führen Sie in Cloud Shell folgende Schritte aus:
gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet
PSC-Nutzerkomponenten bereinigen
gcloud compute forwarding-rules delete myserver-psc-endpoint \
--region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
--region=$region --quiet
PSC-Erstellerkomponenten bereinigen
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
Firewall, Cloud NAT, Cloud Router und VPCs bereinigen
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. Glückwunsch
Sie haben die endpunktbasierte Zugriffssteuerung für Ersteller von Private Service Connect erfolgreich getestet.