1. نظرة عامة
وفي هذا التمرين المعملي، ستقوم بنشر بوابة الموظفين التي تسمح للموظفين بعرض الطلبات وتحديثها وحذفها من تطبيق Cymbal Eats. عليك استخدام الخادم الوكيل Identity Aware (IAP) لتأمين الوصول إلى البوابة بدون استخدام شبكة افتراضية خاصة (VPN). تساعد عمليات الشراء داخل التطبيق في تبسيط تنفيذ نموذج الوصول المعدوم، وتستغرق وقتًا أقل من استخدام شبكة VPN للعاملين عن بُعد في البيئات داخل الشركة وفي البيئات السحابية مع توفّر نقطة تحكُّم واحدة لإدارة الوصول إلى التطبيقات.
ما هو Identity-Aware Proxy؟
IAP (الخادم الوكيل للهوية) هي خدمة من Google Cloud تعترض الطلبات المُرسَلة إلى تطبيقك، وتصادق على المستخدم الذي يُجري الطلب باستخدام "خدمة تحديد الهوية من Google"، ولا تسمح بإرسال الطلبات إلا إذا كانت واردة من مستخدم مصرَّح له بالوصول إلى التطبيق. بالإضافة إلى ذلك، يمكنه تعديل رؤوس الطلبات لتضمين معلومات عن المستخدم الذي تمت مصادقته.
ما سوف تتعلمه
- طريقة ضبط مجموعة نقاط نهاية لشبكة بدون خادم (NEG)
- كيفية ضبط جهاز موازنة الحمل
- كيفية تمكين الشراء داخل التطبيق لتقييد الوصول
- كيفية تقييد الوصول باستخدام الشراء داخل التطبيق
2. الإعداد والمتطلبات
إعداد بيئة ذاتية
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها Google APIs. ويمكنك تعديله في أي وقت.
- يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud وغير قابل للتغيير (لا يمكن تغييره بعد تحديده). تنشئ Cloud Console سلسلة فريدة تلقائيًا. فعادةً لا تهتم بما هو. في معظم الدروس التطبيقية حول الترميز، يجب الإشارة إلى رقم تعريف المشروع (يتم تحديده عادةً على أنّه
PROJECT_ID
). وإذا لم يعجبك المعرّف الذي تم إنشاؤه، يمكنك إنشاء رقم تعريف عشوائي آخر. ويمكنك بدلاً من ذلك تجربة طلبك الخاص ومعرفة ما إذا كان متوفّرًا. ولا يمكن تغييره بعد هذه الخطوة وسيبقى طوال مدة المشروع. - لمعلوماتك، هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. اطّلِع على مزيد من المعلومات حول هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات في Cloud. إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. لإيقاف تشغيل الموارد حتى لا تتحمل الفوترة بعد هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع بالكامل. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج فترة تجريبية مجانية بقيمة 300 دولار أمريكي.
إعداد البيئة
- إنشاء متغيرات بيئة ذات صلة بالمشروع والموارد
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')
export REGION=us-east1
export ORDER_SERVICE_URL=order-service
export INVENTORY_SERVICE_URL=inventory-service
export MENU_SERVICE_URL=menu-service
- تفعيل واجهات برمجة التطبيقات لخدمة "IAP" (عمليات الشراء داخل التطبيق) وخدمة "إدارة موارد السحابة الإلكترونية"
gcloud services enable \
iap.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudidentity.googleapis.com \
compute.googleapis.com
- استنسِخ نموذج مستودع التطبيقات وانتقِل إلى الدليل.
git clone https://github.com/GoogleCloudPlatform/cymbal-eats.git && cd cymbal-eats/employee-ui
- انشر بوابة الموظفين باستخدام النص البرمجي للإعداد. يُرجى الانتظار حتى اكتمال النص البرمجي قبل الانتقال إلى الخطوة التالية.
./setup.sh
مثال على الناتج
... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- النقر على رابط "عنوان URL للخدمة"
3- ضبط مجموعة نقاط نهاية شبكة بدون خادم (NEG)
عليك إنشاء مجموعة نقاط نهاية في شبكة بدون خادم( Serverless NEG) لخدمة Cloud Run الخاصة بواجهة مستخدم المستخدم. تسمح لك مجموعات نقاط النهاية (NEG) بدون خادم باستخدام تطبيقات Google Cloud بدون خادم مع موازنة التحميل لبروتوكول HTTP(S) الخارجي.
- أنشئ مجموعة نقاط نهاية للشبكة لخدمة واجهة المستخدم للموظفين.
gcloud compute network-endpoint-groups create employee-ui-iap-neg \
--project $PROJECT_ID \
--region=$REGION \
--network-endpoint-type=serverless \
--cloud-run-service=employee-ui-service
مثال على الإخراج
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/regions/us-east1/networkEndpointGroups/employee-ui-iap-neg]. Created network endpoint group [employee-ui-iap-neg].
إنشاء خدمة خلفية وإضافة مجموعة نقاط نهاية الشبكة بدون خادم
وتحدِّد خدمة الخلفية كيفية توزيع Cloud Load Balancing لعدد الزيارات. تحتوي إعدادات خدمة الخلفية على مجموعة من القيم، مثل البروتوكول المستخدَم للاتصال بالخلفيات وإعدادات الجلسة والتوزيع المختلفة وعمليات التحقّق من الصحة والمهل. توفر هذه الإعدادات تحكمًا أكثر دقة في طريقة عمل جهاز موازنة الحمل.
- إنشاء خدمة خلفية
gcloud compute backend-services create employee-ui-iap-backend \
--global
مثال على الإخراج
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend]. NAME: employee-ui-iap-backend BACKENDS: PROTOCOL: HTTP
- إضافة مجموعة نقاط نهاية الشبكة بدون خادم كخلفية لخدمة الخلفية
gcloud compute backend-services add-backend employee-ui-iap-backend \
--global \
--network-endpoint-group=employee-ui-iap-neg \
--network-endpoint-group-region=$REGION
مثال على الإخراج
Updated [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/backendServices/employee-ui-iap-backend].
- إنشاء خريطة عنوان URL لتوجيه الطلبات الواردة إلى خدمة الخلفية
gcloud compute url-maps create employee-ui-iap-url-map \
--default-service employee-ui-iap-backend
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/urlMaps/employee-ui-iap-url-map]. NAME: employee-ui-iap-url-map DEFAULT_SERVICE: backendServices/employee-ui-iap-backend
4. تكوين مكونات جهاز موازنة الحمل
يوضح المخطّط التالي أن جهاز موازنة الحمل يستخدم خلفية NEG بدون خادم لتوجيه الطلبات إلى خدمة تشغيل سحابي بدون خادم.
حجز عنوان IP ثابت
- حجز عنوان IPv4 ثابت وتخزين النطاق
gcloud compute addresses create employee-ui-iap-ip \
--network-tier=PREMIUM \
--ip-version=IPV4 \
--global
مثال على الإخراج
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/addresses/employee-ui-iap-ip].
- تخزين نطاق nip.io
export DOMAIN=$(gcloud compute addresses list --filter employee-ui-iap-ip --format='value(ADDRESS)').nip.io
إنشاء مورد شهادة طبقة المقابس الآمنة (SSL) المُدارة من قِبل Google
- إنشاء مورد شهادة طبقة المقابس الآمنة (SSL) المُدارة من قِبل Google
gcloud compute ssl-certificates create employee-ui-iap-cert \
--description=employee-ui-iap-cert \
--domains=$DOMAIN \
--global
مثال على الإخراج
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/sslCertificates/employee-ui-iap-cert]. NAME: employee-ui-iap-cert TYPE: MANAGED CREATION_TIMESTAMP: 2022-04-18T06:39:37.474-07:00 EXPIRE_TIME: MANAGED_STATUS: PROVISIONING 34.102.234.98.nip.io: PROVISIONING
إنشاء خادم وكيل HTTPS مستهدف
- أنشِئ خادم وكيل HTTPS المستهدف لتوجيه الطلبات إلى خريطة عناوين URL.
gcloud compute target-https-proxies create employee-ui-iap-http-proxy \
--ssl-certificates employee-ui-iap-cert \
--url-map employee-ui-iap-url-map
مثال على الإخراج
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/targetHttpsProxies/employee-ui-iap-http-proxy]. NAME: employee-ui-iap-http-proxy SSL_CERTIFICATES: employee-ui-iap-cert URL_MAP: employee-ui-iap-url-map CERTIFICATE_MAP:
إعداد قواعد إعادة التوجيه
- إنشاء قاعدة إعادة توجيه لتوجيه الطلبات الواردة إلى الخادم الوكيل
gcloud compute forwarding-rules create employee-ui-iap-forwarding-rule \
--load-balancing-scheme=EXTERNAL \
--network-tier=PREMIUM \
--address=employee-ui-iap-ip \
--global \
--ports=443 \
--target-https-proxy employee-ui-iap-http-proxy
مثال على الناتج
Created [https://www.googleapis.com/compute/v1/projects/cymbal-eats-18147-25762/global/forwardingRules/employee-ui-iap-forwarding-rule].
تقييد الدخول إلى خدمة تشغيل السحابة الإلكترونية
يمكنك تقييد عدد الزيارات الواردة من أجل قبول الطلبات الداخلية والطلبات الواردة من خلال موازنة الحمل لبروتوكول HTTP(S) فقط.
- تعديل الخدمة للسماح فقط بالزيارات الواردة من الطلبات والطلبات الداخلية من خلال جهاز موازنة الحمل لبروتوكول HTTP(S)
gcloud run services update employee-ui-service \
--ingress internal-and-cloud-load-balancing \
--region $REGION
مثال على الناتج
OK Deploying... Done. OK Creating Revision... OK Routing traffic... Done. Service [employee-ui-service] revision [employee-ui-service-00001-quw] has been deployed and is serving 100 percent of traffic. Service URL: https://employee-ui-service-gbtuuy5eda-uk.a.run.app
- النقر على رابط "عنوان URL للخدمة"
يظهر الآن الوصول إلى عنوان URL لخدمة Cloud Run على أنّه محظور.
5- تفعيل خادم Cloud Identity-Aware Proxy (IAP) على جهاز موازنة الحمل
يتيح لك الشراء داخل التطبيق إنشاء طبقة تفويض مركزية للتطبيقات التي يتم الوصول إليها عن طريق HTTPS. يمكنك استخدام نموذج التحكم في الوصول على مستوى التطبيقات بدلاً من جدران الحماية على مستوى الشبكة.
ضبط شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth
العلامة التجارية هي شاشة طلب موافقة OAuth التي تحتوي على معلومات حول العلامة التجارية للمستخدمين. قد تقتصر العلامات التجارية على المستخدمين الداخليين أو العامين. تتيح العلامة التجارية الداخلية وصول عضو في مؤسسة Google Workspace نفسها مثل المشروع إلى مسار OAuth. تتيح العلامة التجارية العامة الوصول إلى مسار OAuth لأي شخص لديه إمكانية الوصول إلى الإنترنت.
- إنشاء علامة تجارية
export USER_EMAIL=$(gcloud config list account --format "value(core.account)")
gcloud alpha iap oauth-brands create \
--application_title="Cymbal Eats" \
--support_email=$USER_EMAIL
مثال على الإخراج
Created [462858740426]. applicationTitle: Cymbal Eats name: projects/462858740426/brands/462858740426 orgInternalOnly: true
إنشاء عميل OAuth OAuth
- إنشاء عميل باستخدام اسم العلامة التجارية الوارد في الخطوة السابقة
gcloud alpha iap oauth-clients create \
projects/$PROJECT_ID/brands/$PROJECT_NUMBER \
--display_name=cymbal-eats-employee-ui
مثال على الإخراج
Created [462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com]. displayName: cymbal-eats-employee-ui name: projects/462858740426/brands/462858740426/identityAwareProxyClients/462858740426-tkpv8n03opijg7erd3s9ccued2pfllsd.apps.googleusercontent.com secret: [secret-removed]
- تخزين اسم العميل والمعرّف والسر
export CLIENT_NAME=$(gcloud alpha iap oauth-clients list \
projects/$PROJECT_NUMBER/brands/$PROJECT_NUMBER --format='value(name)' \
--filter="displayName:cymbal-eats-employee-ui")
export CLIENT_ID=${CLIENT_NAME##*/}
export CLIENT_SECRET=$(gcloud alpha iap oauth-clients describe $CLIENT_NAME --format='value(secret)')
- في Cloud Console، اختَر المشروع من قائمة اختيار المشروع المنسدلة.
- انتقِل إلى شاشة موافقة OAuth في Cloud Console.
- انقر على "إنشاء خارجي" ضمن "نوع المستخدم".
- اختيار "اختبار" على أنّه "حالة النشر"
- انقر على "تأكيد".
6- تقييد الوصول من خلال الشراء داخل التطبيق
تقييد الوصول إلى خدمة الخلفية باستخدام الشراء داخل التطبيق ثم التحقُّق من عدم إمكانية الوصول إلى التطبيق.
- تفعيل الشراء داخل التطبيق في خدمة الخلفية
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
التحقّق من ضبط الشراء داخل التطبيق
- التحقق من أن شهادة طبقة المقابس الآمنة (SSL) نشطة
gcloud compute ssl-certificates list --format='value(MANAGED_STATUS)'
- الحصول على عنوان URL للخدمة
echo https://$DOMAIN
مثال على الناتج
https://34.102.234.98.nip.io
- انقر على عنوان URL للخدمة لفتح بوابة الموظفين.
- سجِّل الدخول باستخدام بيانات اعتماد المختبر.
- إغلاق المتصفّح
منح المستخدم إمكانية الوصول إلى بوابة الموظفين
- إضافة التزام سياسة إدارة الهوية وإمكانية الوصول لدور "
'roles/iap.httpsResourceAccessor'
" للمستخدم الذي تم إنشاؤه في الخطوة السابقة
gcloud iap web add-iam-policy-binding \
--resource-type=backend-services \
--service=employee-ui-iap-backend \
--member=user:$USER_EMAIL \
--role='roles/iap.httpsResourceAccessor'
مثال على الناتج
Updated IAM policy for backend service [projects/462858740426/iap_web/compute/services/employee-ui-iap-backend].
اختبار الوصول إلى الخدمة
تأكيد منح إذن الوصول إلى بوابة الموظفين
- الحصول على عنوان URL للخدمة
echo https://$DOMAIN
مثال على الناتج
https://34.102.234.98.nip.io
- انقر على عنوان URL للخدمة لفتح بوابة الموظفين.
من المفترض أن يكون لديك الآن إذن بالوصول إلى بوابة الموظفين.
(اختياري) نشر جميع الاعتماديات، قد يستغرق نشر هذه الخدمات المصغَّرة حوالي 20 دقيقة.
unset ORDER_SERVICE_URL
unset INVENTORY_SERVICE_URL
unset MENU_SERVICE_URL
cd ~/cymbal-eats
./setup.sh
./get-site-urls.sh
7. تهانينا
تهانينا، لقد أنهيت الدرس التطبيقي حول الترميز.
الخطوة التالية:
اطّلع على الدروس التطبيقية الأخرى حول الترميز في Cymbal Eats:
- تشغيل Cloud Workflows باستخدام Eventarc
- بدء معالجة الأحداث من Cloud Storage
- الاتصال بـ Private CloudSQL من خلال Cloud Run
- الاتصال بقواعد بيانات مُدارة بالكامل من خلال تشغيل السحابة الإلكترونية
- تشغيل مهام تشغيل السحابة الإلكترونية باستخدام أداة جدولة المهام في السحابة الإلكترونية
- النشر الآمن إلى التشغيل في السحابة الإلكترونية
- تأمين الزيارات الواردة من تشغيل السحابة الإلكترونية
- الاتصال بـ AlloyDB الخاص من GKE Autopilot
تَنظيم
لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud مقابل الموارد المُستخدَمة في هذا الدليل التوجيهي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية.
حذف المشروع
أسهل طريقة لإزالة الفوترة هي حذف المشروع الذي أنشأته للبرنامج التعليمي.