Kiểm soát quyền truy cập dựa trên điểm cuối của nhà cung cấp PSC

1. Giới thiệu

Private Service Connect

Private Service Connect là một tính năng của mạng Google Cloud, cho phép người tiêu dùng truy cập riêng tư vào các dịch vụ được quản lý từ bên trong mạng VPC của họ. Tương tự, tính năng này cho phép nhà sản xuất dịch vụ được quản lý lưu trữ các dịch vụ này trong mạng VPC riêng và cung cấp kết nối riêng tư cho người tiêu dùng.

50b907b09af4d8ac.png

Quyền kiểm soát quyền truy cập của nhà cung cấp dịch vụ Private Service Connect

Thay vì tự động chấp nhận tất cả các kết nối từ mọi người dùng, nhà sản xuất chỉ có thể chấp nhận các yêu cầu kết nối đến nếu người dùng có trong danh sách chấp nhận người dùng. Bạn có thể chỉ định người tiêu dùng theo dự án, mạng VPC hoặc từng điểm cuối PSC. Bạn không thể đưa nhiều loại người tiêu dùng vào cùng một danh sách chấp nhận hoặc từ chối người tiêu dùng.

Đối với cả hai lựa chọn ưu tiên kết nối, các kết nối được chấp nhận có thể bị ghi đè và từ chối bởi chính sách của tổ chức (compute.restrictPrivateServiceConnectConsumer) chặn các kết nối đến.

Xin lưu ý rằng chính sách tổ chức (compute.restrictPrivateServiceConnectConsumer) áp dụng cho tổ chức,thư mục hoặc dự án. Nếu muốn kiểm soát quyền truy cập chi tiết vào điểm cuối PSC, bạn có thể sử dụng danh sách chấp nhận người dùng của từng điểm cuối PSC.

Kiểm soát quyền truy cập dựa trên thiết bị đầu cuối

Kiểm soát quyền truy cập dựa trên điểm cuối PSC là khả năng cho phép nhà sản xuất uỷ quyền cho người dùng thông qua các điểm cuối PSC riêng lẻ trong chính sách đính kèm dịch vụ.

Phương pháp này (nên dùng cho các dịch vụ đa khách hàng) mang đến khả năng kiểm soát chi tiết nhất để quản lý các kết nối.

Lớp học lập trình này tập trung vào việc tìm hiểu cách định cấu hình tính năng này.

Xin lưu ý rằng phương thức này không áp dụng cho các phần phụ trợ Private Service Connect.

2. Kiến thức bạn sẽ học được

  • Là nhà sản xuất, làm cách nào để xuất bản một dịch vụ bằng PSC.
  • Là nhà sản xuất, cách tạo chế độ kiểm soát quyền truy cập dựa trên điểm cuối PSC.
  • Là người tiêu dùng, cách truy cập vào dịch vụ PSC.

3. Cấu trúc tổng thể của phòng thí nghiệm

3d7cbafaffb50d2d.png

4. Các bước chuẩn bị

Các vai trò IAM cần thiết để thực hiện bài thực hành

Bạn bắt đầu bằng cách chỉ định các vai trò IAM bắt buộc cho tài khoản GCP ở cấp dự án.

  • Quản trị viên mạng máy tính (roles/compute.networkAdmin) Vai trò này cho phép bạn kiểm soát hoàn toàn các tài nguyên mạng của Compute Engine.
  • Quản trị viên ghi nhật ký (roles/logging.admin) Vai trò này cho phép bạn truy cập vào tất cả các quyền ghi nhật ký và các quyền phụ thuộc.
  • Quản trị viên sử dụng dịch vụ (roles/serviceusage.serviceUsageAdmin) Vai trò này cho phép bạn bật, tắt và kiểm tra trạng thái dịch vụ, kiểm tra các thao tác, cũng như sử dụng hạn mức và thông tin thanh toán cho một dự án người dùng.
  • Quản trị viên phiên bản Compute (roles/compute.instanceAdmin.v1) Vai trò này cho phép bạn có toàn quyền kiểm soát các thực thể Compute Engine, nhóm thực thể, ổ đĩa, ảnh chụp nhanh và hình ảnh. Có quyền đọc tất cả tài nguyên mạng của Compute Engine.
  • Quản trị viên bảo mật điện toán (roles/compute.securityAdmin) Vai trò này cấp cho bạn quyền tạo, sửa đổi và xoá các quy tắc tường lửa và chứng chỉ SSL, cũng như định cấu hình chế độ cài đặt Máy ảo được bảo vệ.

Bật API

Trong Cloud Shell, hãy đảm bảo dự án của bạn được định cấu hình đúng cách và thiết lập các biến môi trường.

Trong Cloud Shell, hãy thực hiện các bước sau:

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

Bật tất cả các API cần thiết của Google trong dự án. Trong Cloud Shell, hãy thực hiện các bước sau:

gcloud services enable \
  compute.googleapis.com 
  

Tạo VPC của nhà sản xuất

Trong dự án, hãy tạo một mạng VPC ở chế độ mạng con tuỳ chỉnh. Thực hiện các thao tác sau trong Cloud Shell:

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

Tạo mạng con trong VPC của nhà sản xuất

Bạn sẽ cần 3 mạng con: producer-subnet cho dịch vụ của bạn; proxy-only-subnet để bộ cân bằng tải xuất bản dịch vụ của bạn; psc-subnet cho PSC để xuất bản dịch vụ.

Trong Cloud Shell, hãy thực hiện các bước sau để tạo mạng con 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

Tạo Cloud NAT và Cloud Router cho VPC của nhà sản xuất

Cloud NAT được dùng để cho phép VM tải xuống và cài đặt các ứng dụng.

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

Tạo VPC người tiêu dùng

Trong dự án, hãy tạo một mạng VPC ở chế độ mạng con tuỳ chỉnh. Thực hiện các thao tác sau trong Cloud Shell:

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

Tạo mạng con trong VPC của người tiêu dùng

Trong Cloud Shell, hãy thực hiện các bước sau để tạo một mạng con IPV4:

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

Tạo chính sách tường lửa chung cho VPC của nhà sản xuất và VPC của người dùng

Bạn sẽ tạo một chính sách tường lửa mạng toàn cầu và liên kết chính sách đó với VPC của nhà sản xuất và VPC của người tiêu dùng.

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 

Cho phép SSH

Để cho phép Proxy nhận biết danh tính (IAP) kết nối với các thực thể máy ảo, hãy tạo một quy tắc tường lửa có:

  • Áp dụng cho tất cả các phiên bản máy ảo mà bạn muốn có thể truy cập bằng IAP.
  • Cho phép lưu lượng truy cập vào từ dải IP 35.235.240.0/20. Dải này chứa tất cả địa chỉ IP mà IAP sử dụng để chuyển tiếp 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

Thêm quy tắc tường lửa Ingress vào dịch vụ của bạn

Bạn sẽ sử dụng Bộ cân bằng tải ứng dụng nội bộ theo khu vực để xuất bản dịch vụ.Quy tắc tường lửa đầu vào y phải cho phép proxy-only-subnet truy cập vào dịch vụ. Để biết thông tin chi tiết, hãy xem tài liệu này.

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

Cho phép trình cân bằng tải kiểm tra tình trạng của dịch vụ

Các lệnh kiểm tra tình trạng của Trình cân bằng tải ứng dụng nội bộ theo khu vực sử dụng các dải 35.191.0.0/16 và 130.211.0.0/22. Bạn sẽ tạo một quy tắc tường lửa cho phép lưu lượng vào để cho phép các lệnh kiểm tra tình trạng từ các lệnh kiểm tra. Để biết thêm thông tin, hãy xem tài liệu này.

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

Tạo một máy ảo làm máy khách http trong VPC của người dùng

Trong Cloud Shell, hãy thực hiện các bước sau để tạo một thực thể máy ảo làm ứng dụng kiểm thử:

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

Tạo một máy ảo làm máy chủ http trong VPC của nhà sản xuất

Trong Cloud Shell, hãy thực hiện các bước sau để tạo một thực thể máy ảo làm máy chủ 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. Nhà cung cấp xuất bản dịch vụ PSC

Tạo Trình cân bằng tải ứng dụng nội bộ theo khu vực

Bạn sẽ tạo một Trình cân bằng tải ứng dụng nội bộ theo khu vực làm giao diện người dùng của dịch vụ và phần phụ trợ là nhóm thực thể không được quản lý có điểm cuối là máy chủ HTTP mà chúng ta đã tạo trước đó.

Dự trữ địa chỉ IP của trình cân bằng tải

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

Tạo một nhóm phiên bản

Bạn sẽ tạo một nhóm thực thể không được quản lý và thêm thực thể máy ảo, myserver vào nhóm thực thể đó.

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

Tạo một quy trình kiểm tra tình trạng HTTP

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

Tạo dịch vụ phụ trợ

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

Thêm phần phụ trợ vào dịch vụ phụ trợ

gcloud compute backend-services add-backend l7-ilb-backend-service \
    --balancing-mode=UTILIZATION \
    --instance-group=my-service-ig \
    --instance-group-zone=$zone \
    --region=$region

Tạo bản đồ URL

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

Tạo proxy đích

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

Tạo quy tắc chuyển tiếp

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

Nhà cung cấp PSC xuất bản dịch vụ

Bạn sẽ sử dụng PSC để xuất bản dịch vụ với connection-preference=ACCEPT_MANUAL và danh sách người dùng trống.

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. Người dùng tạo điểm cuối PSC

Dành riêng một IP cho điểm cuối PSC

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

Tạo điểm cuối PSC

Tạo điểm cuối PSC và lấy IP của điểm cuối PSC để kiểm thử ở bước tiếp theo.

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

Người tiêu dùng kiểm tra trạng thái điểm cuối PSC

Trước khi nhà sản xuất thêm điểm cuối PSC vào danh sách người dùng, kết nối sẽ xuất hiện trong Điểm cuối được kết nối ở phía người dùng với trạng thái Đang chờ xử lý.

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

Bạn sẽ thấy kết quả tương tự như bên dưới.

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. Kiểm tra quyền truy cập từ máy ảo người dùng đến máy ảo nhà sản xuất

Kiểm tra IP điểm cuối PSC.

echo $psc_endpoint_ip

SSH đến VM có tên myclient và kiểm tra xem VM đó có thể truy cập vào myserver tại cổng http 80 hay không.

Trong Cloud Shell, hãy thực hiện các bước sau:

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

Dùng curl để truy cập vào điểm cuối PSC mà bạn đã tạo.

curl -m 10 <psc_endpoint_ip> 

Bạn sẽ thấy lệnh curl hết thời gian chờ. Ứng dụng thử nghiệm từ VPC của người dùng không thể truy cập vào máy chủ http trong VPC của nhà sản xuất.

curl: (28) Connection timed out after 10001 milliseconds

Quay lại Cloud Shell bằng cách thoát phiên SSH.

exit

8. Nhà sản xuất phê duyệt điểm cuối PSC

Producer kiểm tra trạng thái điểm cuối PSC

Trước khi nhà sản xuất thêm điểm cuối PSC vào danh sách người dùng, kết nối sẽ xuất hiện trong tệp đính kèm dịch vụ với trạng thái Đang chờ xử lý.

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

Bạn sẽ thấy kết quả tương tự như bên dưới.

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

Nhận URI dựa trên mã nhận dạng của điểm cuối PSC

URI dựa trên mã nhận dạng của điểm cuối PSC là mã nhận dạng của quy tắc chuyển tiếp mà người dùng vừa tạo. Trong ví dụ trên, "endpointWithId" là URI của điểm cuối PSC do người dùng tạo. Nhà sản xuất sẽ cần URI này để tạo chế độ kiểm soát quyền truy cập dựa trên điểm cuối.

( Xin lưu ý rằng mã kết nối PSC không phải là mã mà chúng tôi đang tìm kiếm. )

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

echo $psc_endpoint_uri

Thêm URI dựa trên mã nhận dạng điểm cuối PSC vào danh sách chấp nhận của người tiêu dùng

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

Producer kiểm tra trạng thái điểm cuối PSC

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

Bạn sẽ thấy kết quả tương tự như bên dưới. Trạng thái đã thay đổi thành "ĐƯỢC CHẤP NHẬN".

{'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. Kiểm tra quyền truy cập từ máy ảo người dùng đến máy ảo nhà sản xuất

Kiểm tra IP điểm cuối PSC.

echo $psc_endpoint_ip

SSH đến VM có tên myclient và kiểm tra xem VM đó có thể truy cập vào myserver tại cổng http 80 hay không.

Trong Cloud Shell, hãy thực hiện các bước sau:

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

Dùng curl để truy cập vào điểm cuối PSC mà bạn đã tạo.

curl <psc_endpoint_ip>

Bạn sẽ thấy lệnh curl trả về phản hồi thành công từ myserver. Ứng dụng kiểm thử từ VPC của người tiêu dùng đã truy cập vào máy chủ http trong VPC của nhà cung cấp.

I am a Http Server.

Quay lại Cloud Shell bằng cách thoát phiên SSH.

exit

10. Dọn dẹp

Dọn dẹp các VM

Trong Cloud Shell, hãy thực hiện các bước sau:

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

Dọn dẹp các thành phần người dùng PSC

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

Dọn dẹp các thành phần của nhà sản xuất 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

Dọn dẹp Tường lửa, Cloud NAT, Cloud Router và 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. Xin chúc mừng

Bạn đã kiểm thử thành công chế độ kiểm soát quyền truy cập dựa trên điểm cuối của nhà cung cấp Private Service Connect.