Kontrola dostępu oparta na punkcie końcowym usługi PSC

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.

50b907b09af4d8ac.png

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

3d7cbafaffb50d2d.png

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.