Private Service Connect: استخدام عناصر التحكّم في خدمة HTTP(S) للمستهلك في واجهات Google APIs الإقليمية

1. مقدمة

باستخدام Private Service Connect، يمكنك إنشاء نقاط نهاية خاصة باستخدام عناوين IP داخلية عمومية داخل شبكة VPC للوصول إلى Google APIs. وبناءً على هذا المفهوم، يمكنك الآن إنشاء نقطة نهاية Private Service Connect مع عناصر تحكُّم في خدمة HTTP(S) للمستهلك باستخدام جهاز موازنة حمل HTTP(S) داخلي. يوفّر لك ذلك الميزات التالية:

  • يمكنك اختيار الخدمات المتاحة باستخدام خريطة عناوين URL. يتيح لك التصفية حسب المسار إجراء المزيد من عمليات التحقق الأكثر دقة.
  • يمكنك إعادة تسمية الخدمات وتعيينها إلى عناوين URL من اختيارك.
  • يمكنك استخدام شهادات بروتوكول أمان طبقة النقل (TLS) التي يديرها العميل.
  • يمكنك تفعيل الخدمة الخاصة بالبيانات أثناء نقلها من خلال الاتصال بنقاط النهاية الإقليمية لواجهات Google APIs من أحمال العمل في المنطقة نفسها.

وتكون هذه الأسماء وعناوين IP داخلية بالنسبة إلى شبكة VPC وأي شبكات داخلية متصلة بها باستخدام أنفاق Cloud VPN أو مرفقات Cloud Interconnect (شبكة VLAN).

ما ستتعرَّف عليه

  • إنشاء نقطة نهاية Private Service Connect باستخدام عناصر التحكّم في خدمة HTTP(S) للمستهلك
  • أنشئ سلسلة مفاتيح ومفتاح في "خدمة إدارة المفاتيح في السحابة الإلكترونية" (KMS).
  • إنشاء منطقة خاصة مُدارة في Cloud DNS وسجلّ A.
  • يمكنك الوصول إلى واجهة برمجة التطبيقات KMS (على مستوى إقليمي وعالمي) تم حلها من خلال واجهة برمجة التطبيقات العامة.
  • يمكنك الوصول إلى واجهة برمجة التطبيقات KMS (على مستوى المنطقة والعالم) من خلال نقطة نهاية PSC.

المتطلبات

  • معرفة نشر المثيلات وتهيئة مكونات الشبكة

2. بيئة الاختبار

سيتم إنشاء شبكة VPC للمستهلك باستخدام شبكة فرعية واحدة في منطقة us-central1 لاستضافة جهاز افتراضي وقاعدة إعادة توجيه لجهاز موازنة الحمل الداخلي لبروتوكول HTTP(S) وشبكة فرعية واحدة فقط للخادم الوكيل للاستخدام مع جهاز موازنة الحمل الداخلي لبروتوكول HTTP(S). سنبدأ بإنشاء سلسلة مفاتيح ومفتاح في "نظام إدارة المفاتيح" (KMS) ثم الانتقال إلى نقطة نهاية واجهة برمجة التطبيقات العامة. سننشئ بعد ذلك نقطة نهاية PSC لحل نقطة نهاية KMS الإقليمية في us-central1.

13681df518662ba.png

3- الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي عبارة عن سلسلة أحرف لا تستخدمها Google APIs، ويمكنك تحديثها في أي وقت.
  • يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الرجوع إلى رقم تعريف المشروع (والذي يتم تحديده عادةً على أنّه PROJECT_ID). لذلك، إذا لم يعجبك، يمكنك إنشاء رقم تعريف عشوائي آخر أو يمكنك تجربة رقم تعريف المشروع الخاص بك ومعرفة ما إذا كان متاحًا. بعد ذلك تكون الحالة "مجمّدة". بعد إنشاء المشروع.
  • هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد أكثر من هذا البرنامج التعليمي، اتبع أي عملية "تنظيف". التعليمات الموجودة في نهاية الدرس التطبيقي حول الترميز. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.

بدء Cloud Shell

مع أنّه يمكن إدارة Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي Google Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في السحابة الإلكترونية.

من Google Cloud Console، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

55efc1aaa7a4d3ad.png

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بالبيئة بضع لحظات فقط. عند الانتهاء، من المفترض أن يظهر لك شيء مثل هذا:

7ffe5cbb04455448.png

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل على Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ كل أعمالك في هذا التمرين من خلال متصفح.

4. قبل البدء

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

داخل Cloud Shell، تأكَّد من إعداد رقم تعريف مشروعك.

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
export project=YOUR-PROJECT-NAME
export region=us-central1
export zone=us-central1-a
echo $project
echo $region
echo $zone

تفعيل جميع الخدمات اللازمة

gcloud services enable compute.googleapis.com
gcloud services enable servicedirectory.googleapis.com
gcloud services enable dns.googleapis.com
gcloud services enable cloudkms.googleapis.com

5- إنشاء شبكة VPC والشبكات الفرعية وقواعد جدار الحماية

شبكة سحابة VPC

من Cloud Shell

gcloud compute networks create consumer-vpc --subnet-mode custom

إنشاء شبكات فرعية

من Cloud Shell

gcloud compute networks subnets create consumer-subnet-1 \
--network consumer-vpc \
--range 10.0.0.0/24 \
--region $region \
--enable-private-ip-google-access

في هذا التمرين المعملي، عليك إنشاء جهاز موازنة حمولة محلي L7 للإشارة إلى الخلفيات الإقليمية لواجهة برمجة التطبيقات. إن جهاز موازنة حمولة L7 من Google هو جهاز موازنة حمل الخادم الوكيل، لذا ستحتاج إلى إنشاء شبكة فرعية للخادم الوكيل مخصصة لجهاز موازنة الحمل لتنفيذ الخادم الوكيل. يمكنك العثور على مزيد من المعلومات حول الشبكة الفرعية للخادم الوكيل فقط هنا.

من Cloud Shell

gcloud compute networks subnets create proxy-subnet1 \
--purpose=INTERNAL_HTTPS_LOAD_BALANCER \
--role=ACTIVE \
--network consumer-vpc \
--range 10.100.100.0/24 \
--region $region

إنشاء قواعد جدار الحماية

في هذا التمرين المعملي، ستستخدم الشراء داخل التطبيق للاتصال بالمثيلات التي تنشئها. ستتيح لك قاعدة جدار الحماية التالية الاتصال بالمثيلات من خلال الشراء داخل التطبيق. إذا كنت تفضل عدم استخدام IAP، فيمكنك تخطي هذه الخطوة، وإضافة عناوين IP عامة على المثيل وإنشاء قاعدة جدار حماية تسمح بدخول منفذ TCP رقم 22 من 0.0.0.0/0.

للسماح لعمليات الشراء داخل التطبيق بالاتصال بمثيلات الأجهزة الافتراضية، أنشِئ قاعدة جدار حماية تعمل على:

  • ينطبق ذلك على جميع مثيلات الأجهزة الافتراضية التي تريد أن تتوفّر إمكانية الوصول إليها من خلال استخدام الشراء داخل التطبيق.
  • يسمح بالزيارات الواردة من نطاق IP 35.235.240.0/20. يحتوي هذا النطاق على جميع عناوين IP التي يستخدمها بروتوكول IAP لإعادة توجيه بروتوكول التحكم بالنقل.

من Cloud Shell

gcloud compute firewall-rules create allow-ssh-iap \
    --network consumer-vpc \
--allow tcp:22 \
--source-ranges=35.235.240.0/20

إنشاء مثيل Cloud NAT

يجب إنشاء ترجمة عنوان الشبكة في السحابة الإلكترونية لتنزيل توزيعات حزمة Linux.

إنشاء Cloud Router

من Cloud Shell

gcloud compute routers create crnat \
    --network consumer-vpc \
    --region $region

إنشاء Cloud NAT

من Cloud Shell

gcloud compute routers nats create central-nat \
    --router=crnat \
    --auto-allocate-nat-external-ips \
    --nat-all-subnet-ip-ranges \
    --enable-logging \
    --region $region

6- إنشاء حلقة ومفتاح لإدارة المفاتيح

من Cloud Shell

gcloud kms keyrings create central-keyring \
    --location $region

gcloud kms keyrings create global-keyring \
    --location global

من Cloud Shell

gcloud kms keys create central-key \
    --location $region \
    --keyring central-keyring \
    --purpose encryption

gcloud kms keys create global-key \
    --location global \
    --keyring global-keyring \
    --purpose encryption

من Cloud Shell، تأكَّد من إنشاء سلسلة المفاتيح والمفتاح بنجاح في منطقة us-central1.

gcloud kms keys list \
    --location $region \
    --keyring central-keyring

نتيجة متوقَّعة

NAME: projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

من Cloud Shell

gcloud kms keys list \
    --location global \
    --keyring global-keyring

نتيجة متوقَّعة

NAME: projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key
PURPOSE: ENCRYPT_DECRYPT
ALGORITHM: GOOGLE_SYMMETRIC_ENCRYPTION
PROTECTION_LEVEL: SOFTWARE
LABELS:
PRIMARY_ID: 1
PRIMARY_STATE: ENABLED

انتبه إلى أسماء المسار الكامل المحددة للمفاتيح إذ ستستخدمها للاتصال لاحقًا.

7. إنشاء جهاز افتراضي للعميل والربط بنقطة النهاية الإقليمية لخدمة KMS

بعد ذلك، ستنشئ جهاز عميل افتراضي وبروتوكول النقل الآمن (SSH) في الجهاز الافتراضي وستختبر دقة نقطة نهاية واجهة برمجة التطبيقات us-central1 الإقليمية KMS API.

من Cloud Shell

gcloud compute instances create client-vm \
    --network=consumer-vpc \
    --subnet=consumer-subnet-1 \
    --zone=$zone \
    --no-address \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --metadata startup-script='#! /bin/bash
    sudo apt-get update
    sudo apt-get install dnsutils -y
    sudo apt-get install tcpdump -y'

بعد ذلك، عليك تعديل حساب خدمة Compute Engine التلقائي لتتمكّن من الوصول إلى مفتاح KMS الذي أنشأته. سيكون حساب خدمة الحوسبة التلقائي بالتنسيق <Project_Number> -compute@developer.gserviceaccount.com. للحصول على رقم المشروع، قم بتشغيل الأمر التالي من Cloud Shell وانسخ الرقم في السطر الأخير من النتائج المعروضة.

 gcloud projects describe $project

عدِّل حساب خدمة Compute Engine التلقائي للوصول إلى مفتاح KMS الذي أنشأته.

من Cloud Shell

 gcloud kms keys add-iam-policy-binding central-key \
    --location $region \
    --keyring central-keyring \
    --member serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
    --role roles/cloudkms.admin


gcloud kms keys add-iam-policy-binding global-key \
    --location global \
    --keyring global-keyring \
    --member serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
    --role roles/cloudkms.admin

أنشئ وحدة طرفية إضافية في Cloud Shell عبر النقر على + (لقطة شاشة أدناه).

a36edc967333315a.png

في علامة التبويب 2، نفق من خلال IAP إلى بروتوكول النقل الآمن للعميل. لاحظ أن متغيرات البيئة لن يتم تنفيذها وستحتاج إلى إضافة معرف المشروع إلى الأمر أدناه.

من Cloud Shell

gcloud beta compute ssh --zone us-central1-a "client-vm" \
--tunnel-through-iap \
--project <PROJECT_ID>

الاتصال بنقطة نهاية KMS Regional API باستخدام اسم مفتاح KMS الذي ذكرته سابقًا.

من علامة التبويب 2، client-vm

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
--resolve cloudkms.googleapis.com:443:us-central1-cloudkms.googleapis.com \
https://cloudkms.googleapis.com/v1/projects/<YOUR_PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key

نتيجة متوقَّعة

{
  "name": "projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key",
  "primary": {
    "name": "projects/<PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-12T17:41:21.543348620Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-12T17:41:21.543348620Z"
  },
  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-12T17:41:21.543348620Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"
}

من علامة التبويب 2، client-vm

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
--resolve cloudkms.googleapis.com:443:cloudkms.googleapis.com \
https://cloudkms.googleapis.com/v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key

نتيجة متوقَّعة

{
  "name": "projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key",
  "primary": {
    "name": "projects/<PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-22T19:19:43.271238847Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-22T19:19:43.271238847Z"
  },  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-22T19:19:43.271238847Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"}

تحقَّق لمعرفة المكان الذي يحلّ فيه نظام أسماء النطاقات نقطة نهاية KMS المركزية الأمريكية مقارنةً بنقطة النهاية العالمية.

من tab2، client-vm

dig us-central1-cloudkms.googleapis.com

نتيجة متوقَّعة

; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> us-central1-cloudkms.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4383
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-cloudkms.googleapis.com. IN        A

;; ANSWER SECTION:
us-central1-cloudkms.googleapis.com. 300 IN A   142.250.125.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Fri Nov 12 20:40:05 UTC 2021
;; MSG SIZE  rcvd: 80

من علامة التبويب 2، client-vm

dig cloudkms.googleapis.com

نتيجة متوقَّعة

; <<>> DiG 9.11.5-P4-5.1+deb10u6-Debian <<>> cloudkms.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49528
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;cloudkms.googleapis.com.       IN      A

;; ANSWER SECTION:
cloudkms.googleapis.com. 300    IN      A       209.85.200.95

;; Query time: 8 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon Nov 22 15:26:17 UTC 2021
;; MSG SIZE  rcvd: 68

من خلال نتائج البحث، يمكننا ملاحظة أنّ دقة نظام أسماء النطاقات لنقطة نهاية us-central1 الإقليمية KMS ونقطة نهاية Global KMS يتم تحويلها إلى عنوان IP خارجي. (ملاحظة: قد يكون عنوان IP الذي يظهر لك عنوان IP خارجيًا مختلفًا. وهذا سلوك طبيعي لـ Google APIs.)

بالنسبة إلى القسم التالي، ارجع إلى علامة التبويب الأولى في Cloud Shell.

8. إنشاء نقطة نهاية Private Service Connect

ستنشئ جهاز موازنة حمل HTTP(S) الداخلي مع مجموعة نقاط نهاية في الشبكة تشير إلى نقطة نهاية KMS الإقليمية لـ us-central1 كخدمة خلفية. تعمل قاعدة إعادة التوجيه لجهاز موازنة الحمل كنقطة نهاية Private Service Connect.

عليك إنشاء مجموعة نقاط نهاية الشبكة (NEG) من خلال نوع الاتصال Privet Service Connect والخدمة المستهدفة us-central1-cloudkms.googleapis.com.

من Cloud Shell

gcloud beta compute network-endpoint-groups create l7psc-kms-neg \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=us-central1-cloudkms.googleapis.com \
  --region=$region

إنشاء خدمة الخلفية لجهاز موازنة الحمل

من Cloud Shell

gcloud compute backend-services create l7-psc-kms \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTP \
  --region=$region

إضافة مجموعة نقاط النهاية (NEG) إلى الخدمة الخلفية

من Cloud Shell

gcloud beta compute backend-services add-backend l7-psc-kms \
  --network-endpoint-group=l7psc-kms-neg \
  --region=$region

أنشِئ خريطة عنوان URL لجهاز موازنة الحمل.

من Cloud Shell

gcloud compute url-maps create l7-psc-url-map \
  --default-service=l7-psc-kms \
  --region=$region

أنشئ مطابقة المسار لعنوان URL المخصّص الذي ستستخدمه نقطة النهاية.

من Cloud Shell

gcloud compute url-maps add-path-matcher l7-psc-url-map \
 --path-matcher-name=example \
 --default-service=l7-psc-kms \
 --region=$region

أنشئ قاعدة المضيف لعنوان URL المخصص us-central1-cloudkms.example.com.

من Cloud Shell

gcloud compute url-maps add-host-rule l7-psc-url-map \
--hosts=us-central1-cloudkms.example.com \
--path-matcher-name=example \
--region=$region

إنشاء الخوادم الوكيلة المستهدفة لجهاز موازنة الحمل بالنسبة إلى حالة استخدام الإنتاج، من المستحسن استخدام HTTP(S) والشهادات المخصصة للمضيف الذي هيأته في الأمر الأخير.

من Cloud Shell

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

أنشئ قاعدة إعادة التوجيه لجهاز موازنة الحمل الذي سيعمل كنقطة نهاية Private Service Connect.

من Cloud Shell

gcloud beta compute forwarding-rules create l7-psc-forwarding-rule \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=consumer-vpc \
  --subnet=consumer-subnet-1 \
  --address=10.0.0.100 \
  --ports=80 \
  --region=$region \
  --target-http-proxy=psc-http-proxy \
  --target-http-proxy-region=$region

9. إعداد نظام أسماء النطاقات

في هذا القسم، ستُنشئ منطقة خاصة لنظام أسماء النطاقات للنطاق example.com، وسجلّ A يشير إلى قاعدة إعادة التوجيه التي أنشأناها في الخطوة الأخيرة.

إنشاء منطقة خاصة لنظام أسماء النطاقات المُدار.

من Cloud Shell

gcloud dns managed-zones create example \
    --description="example domain for KMS" \
    --dns-name=example.com \
    --networks=consumer-vpc \
    --visibility=private

أنشئ سجلّ A لـ us-central1-cloudkms.example.com.

من Cloud Shell

gcloud dns record-sets transaction start \
   --zone=example

gcloud dns record-sets transaction add 10.0.0.100 \
   --name=us-central1-cloudkms.example.com \
   --ttl=300 \
   --type=A \
   --zone=example

gcloud dns record-sets transaction execute \
   --zone=example

10. الاتصال بنقطة نهاية KMS الإقليمية من خلال PSC

عُد إلى العميل-vm في علامة التبويب 2 لتشغيل الأداة tcpdump للاطّلاع على جميع تفاصيل الاتصال واختبار الاتصالات بنقاط النهاية الإقليمية والعالمية من خلال نقطة نهاية PSC.

sudo tcpdump -i any net 10.0.0.100 or port 53 -n

افتح علامة تبويب ثالثة في Cloud Shell وبروتوكول SSH في client-vm.

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
http://us-central1-cloudkms.example.com/v1/projects/<YOUR_PROJECT_ID>/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key

النتيجة المتوقعة + TCPDUMP

{
  "name": "projects/psc-2-321213/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key",
  "primary": {
    "name": "projects/psc-2-321213/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key/cryptoKeyVersions/1",
    "state": "ENABLED",
    "createTime": "2021-11-12T17:41:21.543348620Z",
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION",
    "generateTime": "2021-11-12T17:41:21.543348620Z"
  },
  "purpose": "ENCRYPT_DECRYPT",
  "createTime": "2021-11-12T17:41:21.543348620Z",
  "versionTemplate": {
    "protectionLevel": "SOFTWARE",
    "algorithm": "GOOGLE_SYMMETRIC_ENCRYPTION"
  },
  "destroyScheduledDuration": "86400s"
}

---

19:54:42.924923 IP 10.0.0.3.55290 > 169.254.169.254.53: 26132+ A? cloudkms.googleapis.com. (41)
19:54:42.925137 IP 10.0.0.3.55290 > 169.254.169.254.53: 40734+ AAAA? cloudkms.googleapis.com. (41)
19:54:42.931480 IP 169.254.169.254.53 > 10.0.0.3.55290: 26132 1/0/0 A 10.0.0.100 (57)
19:54:42.931781 IP 169.254.169.254.53 > 10.0.0.3.55290: 40734 1/0/0 AAAA 2607:f8b0:4001:c0d::5f (69)
19:54:42.932285 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [S], seq 3382081170, win 65320, options [mss 1420,sackOK,TS val 1907763603 ecr 0,nop,wscale 7], length 0
19:54:42.934951 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [S.], seq 3147938658, ack 3382081171, win 65535, options [mss 1420,sackOK,TS val 3206048204 ecr 1907763603,nop,wscale 8], length 0
19:54:42.934978 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1, win 511, options [nop,nop,TS val 1907763606 ecr 3206048204], length 0
19:54:42.935182 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [P.], seq 1:422, ack 1, win 511, options [nop,nop,TS val 1907763606 ecr 3206048204], length 421: HTTP: GET /v1/projects/<PROJECT_ID/locations/us-central1/keyRings/central-keyring/cryptoKeys/central-key HTTP/1.1
19:54:42.935614 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [.], ack 422, win 261, options [nop,nop,TS val 3206048205 ecr 1907763606], length 0
19:54:43.010268 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [P.], seq 1:1072, ack 422, win 261, options [nop,nop,TS val 3206048280 ecr 1907763606], length 1071: HTTP: HTTP/1.1 200 OK
19:54:43.010295 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1072, win 503, options [nop,nop,TS val 1907763681 ecr 3206048280], length 0
19:54:43.011545 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [F.], seq 422, ack 1072, win 503, options [nop,nop,TS val 1907763683 ecr 3206048280], length 0
19:54:43.012013 IP 10.0.0.100.80 > 10.0.0.3.57136: Flags [F.], seq 1072, ack 423, win 261, options [nop,nop,TS val 3206048282 ecr 1907763683], length 0
19:54:43.012021 IP 10.0.0.3.57136 > 10.0.0.100.80: Flags [.], ack 1073, win 503, options [nop,nop,TS val 1907763683 ecr 3206048282], length 0

يُرجى التحقّق مرة أخرى من نافذة علامة التبويب 2 وفحص معلومات tcpdump. سترى أنّك تمكّنت من الوصول إلى نقطة نهاية Cloud KMS الإقليمية من خلال نقطة نهاية PSC التي أنشأتها وأنّ نقطة النهاية us-central1 الإقليمية يتم نقلها بشكل خاص إلى منطقة Managed Cloud DNS التي أنشأتها.

من علامة التبويب 3، client-vm

curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" \
http://us-central1-cloudkms.example.com/v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key

النتيجة المتوقعة + TCPDUMP

{
  "error": {
    "code": 404,
    "message": "The request concerns location 'global' but was sent to location 'us-central1'. Either Cloud KMS is not available in 'global' or the request was misrouted. gRPC clients must ensure that 'x-goog-request-params' is specified in request metadata. See https://cloud.google.com/kms/docs/grpc for more information.",
    "status": "NOT_FOUND"
  }
}

---

20:04:32.199247 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [S], seq 2782317346, win 65320, options [mss 1420,sackOK,TS val 1908352831 ecr 0,nop,wscale 7], length 0
20:04:32.201643 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [S.], seq 1927472124, ack 2782317347, win 65535, options [mss 1420,sackOK,TS val 3731555085 ecr 1908352831,nop,wscale 8], length 0
20:04:32.201666 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 1, win 511, options [nop,nop,TS val 1908352834 ecr 3731555085], length 0
20:04:32.201812 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [P.], seq 1:415, ack 1, win 511, options [nop,nop,TS val 1908352834 ecr 3731555085], length 414: HTTP: GET /v1/projects/<YOUR_PROJECT_ID>/locations/global/keyRings/global-keyring/cryptoKeys/global-key HTTP/1.1
20:04:32.202308 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [.], ack 415, win 261, options [nop,nop,TS val 3731555086 ecr 1908352834], length 0
20:04:32.237629 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [P.], seq 1:760, ack 415, win 261, options [nop,nop,TS val 3731555121 ecr 1908352834], length 759: HTTP: HTTP/1.1 404 Not Found
20:04:32.237656 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 760, win 506, options [nop,nop,TS val 1908352870 ecr 3731555121], length 0
20:04:32.238283 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [F.], seq 415, ack 760, win 506, options [nop,nop,TS val 1908352870 ecr 3731555121], length 0
20:04:32.238833 IP 10.0.0.100.80 > 10.0.0.3.57162: Flags [F.], seq 760, ack 416, win 261, options [nop,nop,TS val 3731555122 ecr 1908352870], length 0
20:04:32.238851 IP 10.0.0.3.57162 > 10.0.0.100.80: Flags [.], ack 761, win 506, options [nop,nop,TS val 1908352871 ecr 3731555122], length 0

ستؤدي محاولة الوصول إلى مفتاح/حلقة مفاتيح عمومية من Cloud KMS إلى حدوث خطأ. سترى أيضًا محاولات الربط هذه في tcpdump.

في علامة التبويب 3، client-vm

dig us-central1-cloudkms.example.com

نتيجة متوقَّعة

; <<>> DiG 9.11.5-P4-5.1+deb10u7-Debian <<>> us-central1-cloudkms.example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27474
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-cloudkms.example.com. IN   A

;; ANSWER SECTION:
us-central1-cloudkms.example.com. 300 IN A      10.0.0.100

;; Query time: 7 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Mon May 23 16:22:12 UTC 2022
;; MSG SIZE  rcvd: 77

عند إجراء عملية البحث، سيتبيّن لك الآن أنّ عنوان URL المخصّص الذي أنشأناه لـ us-central1-cloudkms.googleapis.com يشير الآن إلى نقطة النهاية PSC ولا يعالج سوى الموارد التي تم إنشاؤها في تلك المنطقة.

يمكنك الآن إغلاق علامتَي تبويب SSH (بروتوكول النقل الآمن) لـ client-vm.

11. خطوات التنظيف

حذف مكونات التمرين المعملي من وحدة طرفية واحدة في Cloud Shell

gcloud dns record-sets transaction start --zone=example

gcloud dns record-sets transaction remove 10.0.0.100 \
    --name=us-central1-cloudkms.example.com \
    --ttl=300 \
    --type=A \
    --zone=example

gcloud dns record-sets transaction execute --zone=example

gcloud dns managed-zones delete example

gcloud compute forwarding-rules delete l7-psc-forwarding-rule --region=$region --quiet

gcloud compute target-http-proxies delete psc-http-proxy --region=$region --quiet

gcloud compute url-maps delete l7-psc-url-map --region=$region --quiet

gcloud compute backend-services delete l7-psc-kms --region=$region --quiet

gcloud compute network-endpoint-groups delete l7psc-kms-neg --region=$region --quiet

gcloud compute instances delete client-vm --zone=$zone --quiet

#Replace PROJECT_NUMBER
gcloud kms keys remove-iam-policy-binding global-key --keyring=global-keyring --location=global \
--member=serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
--role roles/cloudkms.admin

#Replace PROJECT_NUMBER
gcloud kms keys remove-iam-policy-binding central-key --keyring=central-keyring --location=$region \
--member=serviceAccount:<PROJECT_NUMBER>-compute@developer.gserviceaccount.com \
--role roles/cloudkms.admin

gcloud kms keys versions destroy 1 --location=global --keyring=global-keyring --key=global-key

gcloud kms keys versions destroy 1 --location=$region --keyring=central-keyring --key=central-key

gcloud compute routers nats delete central-nat --router=crnat --region=$region --quiet

gcloud compute routers delete crnat --region=$region --quiet

gcloud compute firewall-rules delete allow-ssh-iap --quiet

gcloud compute networks subnets delete proxy-subnet1 --region=$region --quiet

gcloud compute networks subnets delete consumer-subnet-1 --region=$region --quiet

gcloud compute networks delete consumer-vpc --quiet

12. تهانينا!

تهانينا على إكمال الدرس التطبيقي حول الترميز.

المواضيع التي تناولناها

  • إنشاء نقطة نهاية Private Service Connect باستخدام عناصر التحكّم في خدمة HTTP(S) للمستهلك
  • إنشاء سلسلة مفاتيح ومفتاح في "خدمة إدارة المفاتيح في السحابة الإلكترونية" (KMS)
  • إنشاء منطقة خاصة مُدارة في Cloud DNS وسجلّ A.
  • تم حلّ مشكلة الوصول إلى واجهة برمجة التطبيقات KMS (على المستوى الإقليمي والعالمي) من خلال واجهة برمجة التطبيقات العامة.
  • الوصول إلى واجهة برمجة التطبيقات KMS (على المستوى الإقليمي والعالمي) من خلال نقطة نهاية PSC