التحكّم في الوصول المستند إلى نقطة نهاية المنتج في Private Service Connect

1. مقدمة

Private Service Connect

‫Private Service Connect هي إحدى إمكانات شبكات Google Cloud التي تتيح للمستهلكين الوصول إلى الخدمات المُدارة بشكل خاص من داخل شبكة السحابة الإلكترونية الافتراضية الخاصة (VPC). وبالمثل، يتيح لمقدّمي الخدمات المُدارة استضافة هذه الخدمات في شبكات VPC منفصلة وتقديم اتصال خاص للمستهلكين.

50b907b09af4d8ac.png

التحكّم في وصول منتِج Private Service Connect

بدلاً من قبول جميع عمليات الربط تلقائيًا من أي مستهلك، يمكن للمنتجين قبول طلبات الربط الواردة فقط إذا كان المستهلك مدرَجًا في قائمة المستهلكين المقبولين. يمكنك تحديد المستهلكين حسب المشروع أو شبكة VPC أو نقطة نهاية PSC الفردية. لا يمكنك تضمين أنواع مختلفة من المستهلكين في قائمة قبول أو رفض المستهلكين نفسها.

بالنسبة إلى أيّ من إعدادات الاتصال المفضّلة، يمكن تجاوز عمليات الاتصال المقبولة ورفضها من خلال سياسة مؤسسة (compute.restrictPrivateServiceConnectConsumer) تحظر عمليات الاتصال الواردة.

يُرجى العِلم أنّ سياسة المؤسسة (compute.restrictPrivateServiceConnectConsumer) تنطبق على المؤسسة أو المجلد أو المشروع. إذا كنت تريد التحكّم الدقيق في الوصول إلى نقطة نهاية PSC، يمكنك استخدام قائمة القبول الخاصة بالمستهلك لنقاط نهاية PSC الفردية.

التحكّم في الوصول إلى البيانات استنادًا إلى نقاط النهاية

تتيح ميزة التحكّم في الوصول المستند إلى نقاط نهاية PSC للمنتِج منح المستهلكين إذن الوصول من خلال نقاط نهاية PSC الفردية في سياسات ربط الخدمة.

يوفّر هذا النهج، الذي يُنصح به للخدمات المتعددة المستأجرين، إمكانية التحكّم الأكثر دقة في إدارة عمليات الربط.

يركّز هذا الدرس التطبيقي حول الترميز على التعرّف على كيفية ضبط هذه الميزة.

يُرجى العِلم أنّ هذه الطريقة لا تنطبق على الخلفيات المستنِدة إلى Private Service Connect.

2. أهداف الدورة التعليمية

  • كيفية نشر خدمة باستخدام PSC بصفتك مقدّم خدمة
  • بصفتك منتجًا، تعرَّف على كيفية إنشاء عنصر تحكّم في الوصول يستند إلى نقطة نهاية PSC.
  • كيفية الوصول إلى خدمة PSC بصفتك مستهلكًا

3- البنية العامة للمختبر

3d7cbafaffb50d2d.png

4. خطوات التحضير

أدوار "إدارة الهوية وإمكانية الوصول" المطلوبة للعمل على المختبر

تبدأ بإسناد أدوار IAM المطلوبة إلى حساب GCP على مستوى المشروع.

  • مشرف شبكة Cloud Compute (roles/compute.networkAdmin): يمنحك هذا الدور التحكّم الكامل في موارد الشبكات في Compute Engine.
  • مشرف التسجيل (roles/logging.admin): يمنحك هذا الدور إذن الوصول إلى جميع أذونات التسجيل والأذونات التابعة.
  • مشرف استخدام الخدمة (roles/serviceusage.serviceUsageAdmin): يمنحك هذا الدور إمكانية تفعيل حالات الخدمة وإيقافها وفحصها، وفحص العمليات، واستهلاك الحصة والفوترة لمشروع مستهلك.
  • مشرف آلة Compute الافتراضية (roles/compute.instanceAdmin.v1): يمنحك هذا الدور إمكانية التحكّم الكامل في مثيلات Compute Engine ومجموعات المثيلات والأقراص واللقطات والصور. حق الوصول لقراءة جميع موارد شبكات Compute Engine
  • مشرف أمان Compute (roles/compute.securityAdmin): يمنحك هذا الدور أذونات لإنشاء قواعد جدار الحماية وشهادات SSL وتعديلها وحذفها، بالإضافة إلى إعدادات "الجهاز الظاهري المحمي".

تفعيل واجهات برمجة التطبيقات

داخل Cloud Shell، تأكَّد من ضبط مشروعك بشكل صحيح واضبط متغيّرات البيئة.

داخل Cloud Shell، اتّبِع الخطوات التالية:

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

فعِّل جميع واجهات Google APIs اللازمة في المشروع. داخل Cloud Shell، اتّبِع الخطوات التالية:

gcloud services enable \
  compute.googleapis.com 
  

إنشاء شبكة VPC خاصة بالمنتج

في المشروع، أنشئ شبكة VPC باستخدام وضع الشبكة الفرعية المخصّص. نفِّذ ما يلي داخل Cloud Shell:

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

إنشاء شبكات فرعية في شبكة VPC الخاصة بالمنتج

ستحتاج إلى ثلاث شبكات فرعية: producer-subnet لخدمتك، وproxy-only-subnet لجهاز موازنة الحمل لنشر خدمتك، وpsc-subnet لخدمة Private Service Connect لنشر الخدمة.

في Cloud Shell، اتّبِع الخطوات التالية لإنشاء شبكات فرعية 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

إنشاء Cloud NAT وCloud Router لشبكة VPC الخاصة بالمنتج

يتم استخدام Cloud NAT للسماح للجهاز الافتراضي (VM) بتنزيل التطبيقات وتثبيتها.

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

إنشاء شبكة VPC للمستهلك

في المشروع، أنشئ شبكة VPC باستخدام وضع الشبكة الفرعية المخصّص. نفِّذ ما يلي داخل Cloud Shell:

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

إنشاء شبكة فرعية في شبكة VPC الخاصة بالمستهلك

داخل Cloud Shell، اتّبِع الخطوات التالية لإنشاء شبكة فرعية IPV4:

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

إنشاء سياسة جدار حماية عامة لشبكة VPC الخاصة بالمنتج وشبكة VPC الخاصة بالمستهلك

عليك إنشاء سياسة جدار حماية بين الشبكات عالمية وربطها بشبكة VPC الخاصة بالمنتج وشبكة VPC الخاصة بالمستهلك.

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 

السماح باستخدام بروتوكول النقل الآمن (SSH)

للسماح لخدمة Identity-Aware Proxy (IAP) بالاتصال بمثيلات الأجهزة الافتراضية، أنشئ قاعدة جدار حماية تنفّذ ما يلي:

  • ينطبق على جميع مثيلات الأجهزة الافتراضية التي تريد إتاحتها باستخدام IAP.
  • يسمح بحركة البيانات الواردة من نطاق عناوين IP ‏35.235.240.0/20. يحتوي هذا النطاق على جميع عناوين IP التي تستخدمها خدمة IAP لإعادة توجيه بروتوكول 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

إضافة قواعد جدار الحماية Ingress إلى خدمتك

ستستخدم "موازن الحمل الداخلي الإقليمية للتطبيقات" لنشر الخدمة.يجب أن تسمح قاعدة جدار الحماية الواردة 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

السماح لجهاز موازنة الحمل بإجراء التحقق من الصحة لخدمتك

تستخدِم عمليات التحقّق من الصحة في جهاز موازنة الحمل الداخلي للتطبيقات على مستوى منطقة واحدة النطاقات 35.191.0.0/16 و130.211.0.0/22. عليك إنشاء قاعدة جدار حماية للسماح بالتحقّق من الصحة من خلال عمليات التحقّق. لمزيد من التفاصيل، راجِع هذا المستند.

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

إنشاء جهاز افتراضي كعميل http في شبكة VPC الخاصة بالمستهلك

داخل Cloud Shell، اتّبِع الخطوات التالية لإنشاء مثيل جهاز افتراضي كعميل اختبار:

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

إنشاء جهاز افتراضي كخادم http في شبكة VPC الخاصة بالمنتج

داخل Cloud Shell، نفِّذ ما يلي لإنشاء مثيل جهاز افتراضي كخادم 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- نشر خدمة PSC من خلال مقدّم الخدمة

إنشاء جهاز موازنة حمل التطبيقات الداخلي الإقليمي

ستنشئ موازن تحميل تطبيق داخلي إقليمية كواجهة أمامية للخدمة، وستكون الخلفية هي مجموعة الأجهزة الافتراضية غير المُدارة التي تكون نقطة نهايتها هي خادم http الذي أنشأناه سابقًا.

حجز عنوان IP الخاص بجهاز موازنة الحمل

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

إنشاء مجموعة مثيلات

ستنشئ مجموعة أجهزة افتراضية غير مُدارة وتضيف الجهاز الافتراضي 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

إنشاء عملية تحقّق من الصحة عبر HTTP

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

إنشاء خدمة الخلفية

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

إضافة الخلفية إلى خدمة الخلفية

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

إنشاء خريطة عناوين URL

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

إنشاء الخادم الوكيل المستهدف

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

إنشاء قاعدة إعادة التوجيه

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

يجب أن ينشر منتج PSC الخدمة

ستستخدم Private Service Connect لنشر الخدمة مع connection-preference=ACCEPT_MANUAL وقوائم مستهلكين فارغة.

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. ينشئ المستهلك نقطة نهاية Private Service Connect

حجز عنوان IP لنقطة نهاية PSC

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

إنشاء نقطة نهاية PSC

أنشِئ نقطة نهاية PSC واحصل على عنوان IP الخاص بنقطة نهاية PSC لإجراء الاختبار في الخطوة التالية.

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

يتحقّق المستهلك من حالة نقطة نهاية PSC

قبل أن يضيف المنتج نقطة نهاية PSC إلى قائمة المستهلك، يظهر الاتصال في نقطة النهاية المرتبطة على جهة المستهلك بالحالة "في انتظار المراجعة".

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

ستظهر لك نتيجة مشابهة لما يلي.

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. اختبار إمكانية الوصول من الجهاز الافتراضي للمستهلك إلى الجهاز الافتراضي للمنتج

تحقَّق من عنوان IP لنقطة نهاية PSC.

echo $psc_endpoint_ip

استخدِم بروتوكول SSH للوصول إلى الجهاز الافتراضي الذي يحمل الاسم myclient واختبِر ما إذا كان بإمكانه الوصول إلى myserver على منفذ http 80.

داخل Cloud Shell، اتّبِع الخطوات التالية:

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

استخدِم curl للوصول إلى نقطة نهاية PSC التي أنشأتها.

curl -m 10 <psc_endpoint_ip> 

سيظهر لك أنّ المهلة المحدّدة لتنفيذ أمر curl قد انتهت. لا يمكن لعميل الاختبار من شبكة VPC الخاصة بالمستهلك الوصول إلى خادم http في شبكة VPC الخاصة بالمنتج.

curl: (28) Connection timed out after 10001 milliseconds

ارجع إلى Cloud Shell من خلال الخروج من جلسة SSH.

exit

8. يوافق المنتج على نقطة نهاية PSC

يتحقّق المنتج من حالة نقطة نهاية PSC

قبل أن يضيف المنتج نقطة نهاية PSC إلى قائمة المستهلك، يظهر الاتصال في مرفق الخدمة بالحالة "في انتظار المراجعة".

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

ستظهر لك نتيجة مشابهة لما يلي.

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

الحصول على معرّف الموارد المنتظم (URI) المستند إلى المعرّف لنقطة نهاية PSC

معرّف URI المستند إلى المعرّف لنقطة نهاية PSC هو معرّف قاعدة إعادة التوجيه التي أنشأها المستهلك للتو. في المثال أعلاه، يشير endpointWithId إلى معرّف الموارد المنتظم (URI) لنقطة نهاية PSC التي أنشأها المستهلك. ستحتاج إلى معرّف الموارد المنتظم هذا ليتمكّن المنتج من إنشاء عناصر تحكّم في الوصول تستند إلى نقاط النهاية.

( يُرجى العلم أنّ رقم تعريف اتصال PSC ليس رقم التعريف الذي نبحث عنه. )

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

echo $psc_endpoint_uri

إضافة معرّف موارد منتظم (URI) يستند إلى معرّف نقطة نهاية PSC في قائمة القبول الخاصة بالمستهلك

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

يتحقّق المنتج من حالة نقطة نهاية PSC

gcloud compute service-attachments describe my-psc-service --region=$region --format="value(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/47564871796017232', 'pscConnectionId': '54547416268144643', 'status': 'ACCEPTED'}

9- اختبار إمكانية الوصول من الجهاز الافتراضي للمستهلك إلى الجهاز الافتراضي للمنتج

تحقَّق من عنوان IP لنقطة نهاية PSC.

echo $psc_endpoint_ip

استخدِم بروتوكول SSH للوصول إلى الجهاز الافتراضي الذي يحمل الاسم myclient واختبِر ما إذا كان بإمكانه الوصول إلى myserver على منفذ http 80.

داخل Cloud Shell، اتّبِع الخطوات التالية:

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

استخدِم curl للوصول إلى نقطة نهاية PSC التي أنشأتها.

curl <psc_endpoint_ip>

سيظهر لك أمر curl يعرض الردّ من myserver بنجاح. تمكّن العميل التجريبي من شبكة VPC للمستهلك من الوصول إلى خادم http في شبكة VPC للمنتج.

I am a Http Server.

ارجع إلى Cloud Shell من خلال الخروج من جلسة SSH.

exit

10. تَنظيم

تنظيف الأجهزة الافتراضية

داخل Cloud Shell، اتّبِع الخطوات التالية:

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

تنظيف مكوّنات المستهلك في PSC

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

إخلاء مساحة مكوّنات منتج 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

تنظيف جدار الحماية وCloud NAT وCloud Router وشبكات 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. تهانينا

لقد اختبرت بنجاح ميزة التحكّم في الوصول المستندة إلى نقطة نهاية المنتج في Private Service Connect.