Kontrol Akses Berbasis Endpoint Produsen PSC

1. Pengantar

Private Service Connect

Private Service Connect adalah kemampuan jaringan Google Cloud yang memungkinkan konsumen mengakses layanan terkelola secara pribadi dari dalam jaringan VPC mereka. Demikian pula, hal ini memungkinkan produsen layanan terkelola untuk menghosting layanan ini di jaringan VPC masing-masing yang terpisah dan menawarkan koneksi pribadi kepada konsumen mereka.

50b907b09af4d8ac.png

Kontrol Akses Produsen Private Service Connect

Alih-alih menerima semua koneksi dari konsumen mana pun secara otomatis, produsen hanya dapat menerima permintaan koneksi masuk jika konsumen tercantum dalam daftar penerimaan konsumen. Anda dapat menentukan konsumen menurut project, jaringan VPC, atau endpoint PSC individual. Anda tidak dapat menyertakan berbagai jenis konsumen dalam daftar penerimaan atau penolakan konsumen yang sama.

Untuk preferensi koneksi apa pun, koneksi yang diterima dapat diganti dan ditolak oleh kebijakan organisasi (compute.restrictPrivateServiceConnectConsumer) yang memblokir koneksi masuk.

Perhatikan bahwa kebijakan organisasi (compute.restrictPrivateServiceConnectConsumer) berlaku untuk organisasi, folder, atau project. Jika Anda menginginkan kontrol akses terperinci ke endpoint PSC, Anda dapat menggunakan daftar penerimaan konsumen dari setiap endpoint PSC.

Kontrol akses berbasis endpoint

Kontrol akses berbasis endpoint PSC adalah kemampuan produsen untuk memberikan otorisasi kepada konsumen melalui setiap endpoint PSC dalam kebijakan lampiran layanan.

Pendekatan ini, yang direkomendasikan untuk layanan multi-tenant, memberikan kontrol paling terperinci untuk mengelola koneksi.

Codelab ini berfokus pada pembelajaran cara mengonfigurasi fitur ini.

Perhatikan bahwa metode ini tidak berlaku untuk backend Private Service Connect.

2. Yang akan Anda pelajari

  • Sebagai produsen, cara memublikasikan layanan menggunakan PSC.
  • Sebagai produsen, cara membuat kontrol akses berbasis endpoint PSC.
  • Sebagai konsumen, cara mengakses layanan PSC.

3. Arsitektur Lab Secara Keseluruhan

3d7cbafaffb50d2d.png

4. Langkah-langkah persiapan

Peran IAM yang diperlukan untuk mengerjakan lab

Anda mulai dengan menetapkan peran IAM yang diperlukan ke akun GCP di tingkat project.

  • Admin Jaringan Compute (roles/compute.networkAdmin) Peran ini memberi Anda kontrol penuh atas resource jaringan Compute Engine.
  • Admin Logging (roles/logging.admin) Peran ini memberi Anda akses ke semua izin logging dan izin dependen.
  • Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin) Peran ini memberi Anda kemampuan untuk mengaktifkan, menonaktifkan, dan memeriksa status layanan, memeriksa operasi, serta menggunakan kuota dan penagihan untuk project konsumen.
  • Admin Instance Compute (roles/compute.instanceAdmin.v1) Peran ini memberi Anda kontrol penuh atas instance Compute Engine, grup instance, disk, snapshot, dan image. Akses baca ke semua resource jaringan Compute Engine.
  • Compute Security Admin (roles/compute.securityAdmin) Peran ini memberi Anda izin untuk membuat, mengubah, dan menghapus aturan firewall serta sertifikat SSL, dan juga untuk mengonfigurasi setelan Shielded VM.

Mengaktifkan API

Di dalam Cloud Shell, pastikan project Anda dikonfigurasi dengan benar dan tetapkan variabel lingkungan Anda.

Di dalam Cloud Shell, lakukan hal berikut:

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

Aktifkan semua Google API yang diperlukan di project. Di dalam Cloud Shell, lakukan hal berikut:

gcloud services enable \
  compute.googleapis.com 
  

Buat VPC produsen

Di project, buat jaringan VPC dengan mode subnet kustom. Lakukan hal berikut di dalam Cloud Shell:

gcloud compute networks create producer-net \
    --subnet-mode=custom

Membuat subnet di VPC produsen

Anda akan memerlukan tiga subnet: producer-subnet untuk layanan Anda; proxy-only-subnet untuk load balancer guna memublikasikan layanan Anda; psc-subnet untuk PSC guna memublikasikan layanan.

Di dalam Cloud Shell, lakukan hal berikut untuk membuat 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

Membuat Cloud NAT dan Cloud Router untuk VPC produsen

Cloud NAT digunakan untuk mengizinkan VM mendownload dan menginstal aplikasi.

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

Buat VPC konsumen

Di project, buat jaringan VPC dengan mode subnet kustom. Lakukan hal berikut di dalam Cloud Shell:

gcloud compute networks create consumer-net \
    --subnet-mode=custom

Membuat subnet di VPC konsumen

Di dalam Cloud Shell, lakukan hal berikut untuk membuat subnet IPV4:

gcloud compute networks subnets create consumer-subnet \
    --network=consumer-net \
    --range=10.20.0.0/24 \
    --region=$region

Buat kebijakan firewall global untuk VPC produsen dan VPC konsumen

Anda akan membuat kebijakan firewall jaringan global dan mengaitkannya dengan VPC produsen dan VPC konsumen.

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 

Mengizinkan SSH

Untuk mengizinkan Identity-Aware Proxy (IAP) terhubung ke instance VM Anda, buat aturan firewall yang:

  • Berlaku untuk semua instance VM yang ingin Anda akses menggunakan IAP.
  • Mengizinkan traffic masuk dari rentang IP 35.235.240.0/20. Rentang ini berisi semua alamat IP yang digunakan IAP untuk penerusan 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

Menambahkan aturan firewall Ingress ke layanan Anda

Anda akan menggunakan Load Balancer Aplikasi Internal Regional untuk memublikasikan layanan.Aturan firewall ingress y harus mengizinkan subnet khusus proxy untuk mengakses layanan. Untuk mengetahui informasi mendetail, tinjau dokumen ini.

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

Mengizinkan health check load balancer ke layanan Anda

Pemeriksaan health check Load Balancer Aplikasi Internal Regional menggunakan rentang 35.191.0.0/16 dan 130.211.0.0/22. Anda akan membuat aturan firewall ingress untuk mengizinkan health check dari pemeriksaan. Untuk mengetahui detail selengkapnya, tinjau dokumen ini.

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

Buat VM sebagai klien http di VPC konsumen

Di dalam Cloud Shell, lakukan langkah-langkah berikut untuk membuat instance VM sebagai klien pengujian:

gcloud compute instances create myclient \
    --zone=$zone \
    --subnet=consumer-subnet \
    --shielded-secure-boot \
    --no-address

Buat VM sebagai server http di VPC produsen

Di dalam Cloud Shell, lakukan langkah-langkah berikut untuk membuat instance VM sebagai 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. Produsen memublikasikan layanan PSC

Membuat Load Balancer Aplikasi Internal Regional

Anda akan membuat Load Balancer Aplikasi Internal regional sebagai frontend layanan dan backend-nya adalah grup instance tidak terkelola yang endpoint-nya adalah server http yang kita buat sebelumnya.

Mencadangkan alamat IP load balancer

gcloud compute addresses create l7-ilb-ip-address \
    --region=$region \
    --subnet=producer-subnet

Membuat grup instance

Anda akan membuat grup instance tidak terkelola dan menambahkan instance VM, myserver, ke grup instance tersebut.

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

Buat health check HTTP

gcloud compute health-checks create http l7-ilb-basic-check \
     --region=$region \
     --use-serving-port

Buat layanan 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

Menambahkan backend ke layanan 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

Buat peta URL

gcloud compute url-maps create l7-ilb-map \
    --default-service=l7-ilb-backend-service \
    --region=$region

Buat proxy target

gcloud compute target-http-proxies create l7-ilb-proxy \
    --url-map=l7-ilb-map \
    --url-map-region=$region \
    --region=$region

Membuat aturan penerusan

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

Produsen PSC memublikasikan layanan

Anda akan menggunakan PSC untuk memublikasikan layanan dengan connection-preference=ACCEPT_MANUAL dan daftar konsumen yang kosong.

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. Konsumen membuat endpoint PSC

Mencadangkan IP untuk endpoint PSC

gcloud compute addresses create myserver-psc-endpoint-ip \
    --region=$region \
    --subnet=consumer-subnet \
    --ip-version=IPV4

Membuat endpoint PSC

Buat endpoint PSC dan dapatkan IP endpoint PSC untuk pengujian pada langkah berikutnya.

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

Konsumen memeriksa status endpoint PSC

Sebelum produsen menambahkan endpoint PSC dalam daftar konsumen, koneksi akan terlihat di Endpoint yang terhubung di sisi konsumen dengan status Menunggu Keputusan.

gcloud compute forwarding-rules describe myserver-psc-endpoint \
    --region=$region

Anda akan melihat hasil yang serupa seperti di bawah ini.

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. Menguji akses dari VM konsumen ke VM produsen

Periksa IP endpoint PSC.

echo $psc_endpoint_ip

SSH ke VM bernama myclient dan uji apakah VM tersebut dapat mengakses myserver di port 80 http.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud compute ssh \
    --zone=$zone "myclient" \
    --tunnel-through-iap 

Gunakan curl untuk mengakses endpoint PSC yang Anda buat.

curl -m 10 <psc_endpoint_ip> 

Anda akan melihat perintah curl kehabisan waktu. Klien pengujian dari VPC konsumen tidak dapat mengakses server http di VPC produsen.

curl: (28) Connection timed out after 10001 milliseconds

Kembali ke Cloud Shell dengan keluar dari sesi SSH.

exit

8. Produsen menyetujui endpoint PSC

Produsen memeriksa status endpoint PSC

Sebelum produsen menambahkan endpoint PSC dalam daftar konsumen, koneksi akan terlihat di lampiran layanan dengan status Menunggu Keputusan.

gcloud compute service-attachments describe my-psc-service --region=$region 

Anda akan melihat hasil yang serupa seperti di bawah ini.

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

Mendapatkan URI berbasis ID endpoint PSC

URI berbasis ID endpoint PSC adalah ID aturan penerusan yang baru saja dibuat konsumen. Dalam contoh di atas, 'endpointWithId' adalah URI endpoint PSC yang dibuat oleh konsumen. Anda akan memerlukan URI ini agar produsen dapat membuat kontrol akses berbasis endpoint.

( Perhatikan bahwa ID koneksi PSC bukanlah ID yang kami cari. )

export psc_endpoint_uri=$(gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints.endpointWithId)")

echo $psc_endpoint_uri

Menambahkan URI berbasis ID endpoint PSC dalam daftar penerimaan konsumen

gcloud compute service-attachments update my-psc-service \
    --region=$region \
    --consumer-accept-list=$psc_endpoint_uri

Produsen memeriksa status endpoint PSC

gcloud compute service-attachments describe my-psc-service --region=$region --format="value(connectedEndpoints)"

Anda akan melihat hasil yang serupa seperti di bawah ini. Statusnya telah berubah menjadi 'DITERIMA'.

{'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. Menguji akses dari VM konsumen ke VM produsen

Periksa IP endpoint PSC.

echo $psc_endpoint_ip

SSH ke VM bernama myclient dan uji apakah VM tersebut dapat mengakses myserver di port 80 http.

Di dalam Cloud Shell, lakukan hal berikut:

gcloud compute ssh \
    --zone=$zone "myclient" \
    --tunnel-through-iap 

Gunakan curl untuk mengakses endpoint PSC yang Anda buat.

curl <psc_endpoint_ip>

Anda akan melihat perintah curl berhasil menampilkan respons dari myserver. Klien pengujian dari VPC konsumen telah mengakses server http di VPC produsen.

I am a Http Server.

Kembali ke Cloud Shell dengan keluar dari sesi SSH.

exit

10. Pembersihan

Membersihkan VM

Di dalam Cloud Shell, lakukan hal berikut:

gcloud compute instances delete myserver --zone $zone --quiet
gcloud compute instances delete myclient --zone $zone --quiet

Membersihkan komponen konsumen PSC

gcloud compute forwarding-rules delete myserver-psc-endpoint \
    --region=$region --quiet
gcloud compute addresses delete myserver-psc-endpoint-ip \
    --region=$region --quiet

Membersihkan komponen produser 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

Membersihkan Firewall, Cloud NAT, Cloud Router, dan 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. Selamat

Anda telah berhasil menguji kontrol akses berbasis endpoint produsen Private Service Connect.