1. Wprowadzenie
Private Service Connect
Private Service Connect to funkcja sieci Google Cloud, która umożliwia konsumentom prywatny dostęp do usług zarządzanych z poziomu sieci VPC. Podobnie umożliwia producentom usług zarządzanych hostowanie tych usług we własnych, oddzielnych sieciach VPC i oferowanie prywatnego połączenia z klientami.

Kontrola dostępu producenta Private Service Connect
Zamiast automatycznie akceptować wszystkie połączenia od dowolnego konsumenta, producenci mogą akceptować przychodzące żądania połączeń tylko wtedy, gdy konsument znajduje się na liście akceptowanych konsumentów. Możesz określić konsumentów według projektu, sieci VPC lub poszczególnych punktów końcowych PSC. Na tej samej liście akceptowanych lub odrzucanych konsumentów nie można umieszczać różnych typów konsumentów.
W przypadku obu preferencji połączenia zaakceptowane połączenia mogą zostać zastąpione i odrzucone przez zasadę organizacji (compute.restrictPrivateServiceConnectConsumer), która blokuje połączenia przychodzące.
Pamiętaj, że zasada organizacji (compute.restrictPrivateServiceConnectConsumer) dotyczy organizacji, folderu lub projektu. Jeśli chcesz mieć szczegółową kontrolę dostępu do punktu końcowego PSC, możesz użyć listy akceptacji konsumenta poszczególnych punktów końcowych PSC.
Kontrola dostępu oparta na punktach końcowych
Kontrola dostępu oparta na punktach końcowych PSC to możliwość autoryzowania konsumentów przez producenta za pomocą poszczególnych punktów końcowych PSC w zasadach przyłącza usługi.
To podejście, które jest zalecane w przypadku usług wielodostępnych, zapewnia najbardziej szczegółową kontrolę nad zarządzaniem połączeniami.
To ćwiczenie koncentruje się na tym, jak skonfigurować tę funkcję.
Pamiętaj, że ta metoda nie dotyczy backendów Private Service Connect.
2. Czego się nauczysz
- Jak opublikować usługę za pomocą PSC.
- Jak utworzyć kontrolę dostępu opartą na punkcie końcowym PSC jako producent.
- Jak uzyskać dostęp do usługi PSC jako konsument.
3. Ogólna architektura modułu

4. Kroki przygotowawcze
Role uprawnień wymagane do pracy w laboratorium
Zacznij od przypisania wymaganych ról uprawnień do konta GCP na poziomie projektu.
- Administrator sieci Compute (
roles/compute.networkAdmin) Ta rola zapewnia pełną kontrolę nad zasobami sieciowymi Compute Engine. - Administrator logowania (
roles/logging.admin) Ta rola daje dostęp do wszystkich uprawnień związanych z logowaniem i uprawnień zależnych. - Administrator wykorzystania usług (
roles/serviceusage.serviceUsageAdmin) – ta rola umożliwia włączanie, wyłączanie i sprawdzanie stanu usług, sprawdzanie operacji, a także zużywanie limitu i płatnych usług w ramach projektu konsumenta. - Administrator instancji Compute (
roles/compute.instanceAdmin.v1) Ta rola zapewnia pełną kontrolę nad instancjami Compute Engine, grupami instancji, dyskami, zrzutami i obrazami. Dostęp w trybie odczytu do wszystkich zasobów sieciowych Compute Engine. - Administrator zabezpieczeń Compute (
roles/compute.securityAdmin) Ta rola przyznaje uprawnienia do tworzenia, modyfikowania i usuwania reguł zapory sieciowej oraz certyfikatów SSL, a także do konfigurowania ustawień chronionych maszyn wirtualnych.
Włącz interfejsy API
W Cloud Shell sprawdź, czy projekt jest prawidłowo skonfigurowany, i ustaw zmienne środowiskowe.
W Cloud Shell wykonaj te czynności:
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
Włącz w projekcie wszystkie niezbędne interfejsy API Google. W Cloud Shell wykonaj te czynności:
gcloud services enable \
compute.googleapis.com
Tworzenie sieci VPC producenta
W projekcie utwórz sieć VPC w trybie podsieci niestandardowej. W Cloud Shell wykonaj te czynności:
gcloud compute networks create producer-net \
--subnet-mode=custom
Tworzenie podsieci w sieci VPC producenta
Potrzebujesz 3 podsieci: producer-subnet dla usługi, proxy-only-subnet dla systemu równoważenia obciążenia, aby opublikować usługę, oraz psc-subnet dla PSC, aby opublikować usługę.
W Cloud Shell wykonaj te czynności, aby utworzyć podsieci 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
Tworzenie Cloud NAT i routera Cloud Router dla sieci VPC producenta
Cloud NAT służy do pobierania i instalowania aplikacji na maszynach wirtualnych.
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
Tworzenie sieci VPC konsumenta
W projekcie utwórz sieć VPC w trybie podsieci niestandardowej. W Cloud Shell wykonaj te czynności:
gcloud compute networks create consumer-net \
--subnet-mode=custom
Tworzenie podsieci w sieci VPC konsumenta
W Cloud Shell wykonaj te czynności, aby utworzyć podsieć IPv4:
gcloud compute networks subnets create consumer-subnet \
--network=consumer-net \
--range=10.20.0.0/24 \
--region=$region
Tworzenie globalnej zasady zapory sieciowej dla sieci VPC producenta i sieci VPC klienta
Utworzysz globalną zasadę zapory sieciowej i powiążesz ją z siecią VPC producenta i siecią VPC konsumenta.
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
Zezwalaj na SSH
Aby umożliwić Identity-Aware Proxy (IAP) połączenie z instancjami maszyn wirtualnych, utwórz regułę zapory sieciowej, która:
- Dotyczy wszystkich instancji maszyn wirtualnych, które mają być dostępne przez IAP.
- Zezwala na ruch przychodzący z zakresu adresów IP 35.235.240.0/20. Ten zakres zawiera wszystkie adresy IP, których IAP używa do przekierowywania 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
Dodawanie reguł zapory sieciowej dotyczących ruchu przychodzącego do usługi
Do publikowania usługi użyjesz regionalnego wewnętrznego systemu równoważenia obciążenia aplikacji.Reguła zapory sieciowej ruchu przychodzącego y musi zezwalać na dostęp do usługi z podsieci tylko-proxy. Szczegółowe informacje znajdziesz w tym dokumencie.
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
Zezwalanie na kontrolę stanu systemu równoważenia obciążenia w usłudze
Sondy kontroli stanu regionalnego wewnętrznego systemu równoważenia obciążenia aplikacji korzystają z zakresów 35.191.0.0/16 i 130.211.0.0/22. Utworzysz regułę zapory sieciowej dla ruchu przychodzącego, aby zezwolić na kontrolę stanu z sond. Więcej informacji znajdziesz w tym dokumencie.
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
Tworzenie maszyny wirtualnej jako klienta HTTP w sieci VPC konsumenta
Aby utworzyć instancję maszyny wirtualnej jako klienta testowego, wykonaj w Cloud Shell te czynności:
gcloud compute instances create myclient \
--zone=$zone \
--subnet=consumer-subnet \
--shielded-secure-boot \
--no-address
Tworzenie maszyny wirtualnej jako serwera HTTP w sieci VPC producenta
Aby utworzyć instancję maszyny wirtualnej jako serwer HTTP, wykonaj w Cloud Shell te czynności:
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. Publikowanie usługi PSC przez producenta
Tworzenie regionalnego wewnętrznego systemu równoważenia obciążenia aplikacji
Utworzysz regionalny wewnętrzny system równoważenia obciążenia aplikacji jako interfejs usługi, a backendem będzie niezarządzana grupa instancji, której punktem końcowym jest utworzony wcześniej serwer HTTP.
Rezerwowanie adresu IP systemu równoważenia obciążenia
gcloud compute addresses create l7-ilb-ip-address \
--region=$region \
--subnet=producer-subnet
Utworzenie grupy instancji
Utworzysz niezarządzaną grupę instancji i dodasz do niej instancję maszyny wirtualnej 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
Tworzenie kontroli stanu HTTP
gcloud compute health-checks create http l7-ilb-basic-check \
--region=$region \
--use-serving-port
Tworzenie usługi backendu
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
Dodawanie backendu do usługi backendu
gcloud compute backend-services add-backend l7-ilb-backend-service \
--balancing-mode=UTILIZATION \
--instance-group=my-service-ig \
--instance-group-zone=$zone \
--region=$region
Utwórz mapę URL
gcloud compute url-maps create l7-ilb-map \
--default-service=l7-ilb-backend-service \
--region=$region
Tworzenie docelowego serwera proxy
gcloud compute target-http-proxies create l7-ilb-proxy \
--url-map=l7-ilb-map \
--url-map-region=$region \
--region=$region
Tworzenie reguły przekierowania
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
Opublikowanie usługi przez producenta PSC
Użyjesz PSC do opublikowania usługi z preferencją połączenia ACCEPT_MANUAL i pustymi listami konsumentów.
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. Utworzenie punktu końcowego PSC przez konsumenta
Rezerwowanie adresu IP dla punktu końcowego PSC
gcloud compute addresses create myserver-psc-endpoint-ip \
--region=$region \
--subnet=consumer-subnet \
--ip-version=IPV4
Tworzenie punktu końcowego PSC
Utwórz punkt końcowy PSC i uzyskaj jego adres IP, aby przetestować go w następnym kroku.
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
Sprawdzanie stanu punktu końcowego PSC przez konsumenta
Zanim producent doda punkt końcowy PSC do listy konsumenta, połączenie jest widoczne po stronie konsumenta w sekcji Połączony punkt końcowy ze stanem Oczekuje.
gcloud compute forwarding-rules describe myserver-psc-endpoint \
--region=$region
Zobaczysz wynik podobny do tego poniżej.
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. Testowanie dostępu z maszyny wirtualnej konsumenta do maszyny wirtualnej producenta
Sprawdź adres IP punktu końcowego PSC.
echo $psc_endpoint_ip
Połącz się przez SSH z maszyną wirtualną o nazwie myclient i sprawdź, czy ma ona dostęp do myserver na porcie HTTP 80.
W Cloud Shell wykonaj te czynności:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Użyj polecenia curl, aby uzyskać dostęp do utworzonego punktu końcowego PSC.
curl -m 10 <psc_endpoint_ip>
Zobaczysz, że polecenie curl przekroczyło limit czasu. Klient testowy z sieci VPC konsumenta nie ma dostępu do serwera HTTP w sieci VPC producenta.
curl: (28) Connection timed out after 10001 milliseconds
Wróć do Cloud Shell, zamykając sesję SSH.
exit
8. Producent zatwierdza punkt końcowy PSC
Sprawdzanie stanu punktu końcowego PSC przez producenta
Zanim producent doda punkt końcowy PSC do listy konsumenta, połączenie jest widoczne w przyłączu usługi ze stanem Oczekujące.
gcloud compute service-attachments describe my-psc-service --region=$region
Zobaczysz wynik podobny do tego poniżej.
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
Pobieranie identyfikatora URI punktu końcowego PSC opartego na identyfikatorze
Identyfikator URI punktu końcowego PSC oparty na identyfikatorze to identyfikator reguły przekierowania, którą właśnie utworzył konsument. W przykładzie powyżej „endpointWithId” to URI punktu końcowego PSC utworzonego przez konsumenta. Ten identyfikator URI będzie potrzebny producentowi do utworzenia kontroli dostępu opartej na punktach końcowych.
( Pamiętaj, że identyfikator połączenia PSC nie jest identyfikatorem, którego szukamy. )
export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")
echo $psc_endpoint_uri
Dodaj do listy akceptowanych klientów identyfikator URI oparty na identyfikatorze punktu końcowego PSC.
gcloud compute service-attachments update my-psc-service \
--region=$region \
--consumer-accept-list=$psc_endpoint_uri
Sprawdzanie stanu punktu końcowego PSC przez producenta
gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"
Zobaczysz wynik podobny do tego poniżej. Stan zmienił się na „ACCEPTED”.
{'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. Testowanie dostępu z maszyny wirtualnej konsumenta do maszyny wirtualnej producenta
Sprawdź adres IP punktu końcowego PSC.
echo $psc_endpoint_ip
Połącz się przez SSH z maszyną wirtualną o nazwie myclient i sprawdź, czy ma ona dostęp do myserver na porcie HTTP 80.
W Cloud Shell wykonaj te czynności:
gcloud compute ssh \
--zone=$zone "myclient" \
--tunnel-through-iap
Użyj polecenia curl, aby uzyskać dostęp do utworzonego punktu końcowego PSC.
curl <psc_endpoint_ip>
Polecenie curl zwróci odpowiedź z myserver. Klient testowy z sieci VPC konsumenta uzyskał dostęp do serwera HTTP w sieci VPC producenta.
I am a Http Server.
Wróć do Cloud Shell, zamykając sesję SSH.
exit
10. Czyszczenie danych
Zwalnianie miejsca na maszynach wirtualnych
W Cloud Shell wykonaj te czynności:
gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet
Zwalnianie miejsca przez komponenty konsumenta PSC
gcloud compute forwarding-rules delete myserver-psc-endpoint \
--region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
--region=$region --quiet
Zwalnianie miejsca zajmowanego przez komponenty producenta 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
Zwalnianie miejsca w zaporze sieciowej, Cloud NAT, Cloud Router i sieciach 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. Gratulacje
Testowanie kontroli dostępu opartej na punkcie końcowym usługi producenta Private Service Connect zakończyło się powodzeniem.