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.

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

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.