1. نظرة عامة
في هذا الدرس العملي، ستنشر بوابة الموظفين التي تتيح للموظفين عرض الطلبات وتعديلها وحذفها من تطبيق Cymbal Eats. ستستخدم الوكيل المدرك للهوية (IAP) لتأمين الوصول إلى البوابة بدون استخدام شبكة خاصة افتراضية (VPN). تعمل تقنية IAP على تبسيط تنفيذ نموذج الوصول بالاستناد إلى مبدأ "الثقة المعدومة" وتستغرق وقتًا أقل من شبكة VPN للموظفين الذين يعملون عن بُعد سواء على الأجهزة الداخلية أو في بيئات السحابة الإلكترونية، وذلك من خلال نقطة تحكّم واحدة لإدارة الوصول إلى تطبيقاتك.
ما هو Identity-Aware Proxy؟
Identity-Aware Proxy (IAP) هي خدمة من Google Cloud تعمل على اعتراض الطلبات المُرسَلة إلى تطبيقك، وتتحقّق من هوية المستخدم الذي يقدّم الطلب باستخدام "خدمة هوية Google"، ولا تسمح بمرور الطلبات إلا إذا كانت واردة من مستخدم مفوَّض بالوصول إلى التطبيق. بالإضافة إلى ذلك، يمكنه تعديل عناوين الطلب لتضمين معلومات عن المستخدم الذي تمّت مصادقة هويته.
ما ستتعرّف عليه
- كيفية ضبط مجموعة نقاط نهاية الشبكة بدون خادم (NEG)
- كيفية ضبط جهاز موازنة الحمولة
- كيفية تفعيل ميزة "الشراء داخل التطبيق" لحظر الوصول
- كيفية حظر الوصول باستخدام ميزة "الشراء داخل التطبيق"
2. الإعداد والمتطلبات
إعداد البيئة حسب وتيرة الطالب واحتياجاته
- سجِّل الدخول إلى Google Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة أحرف لا تستخدمها واجهات برمجة تطبيقات Google. ويمكنك تعديله في أي وقت.
- يكون معرّف المشروع فريدًا في جميع مشاريع 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 وCloud Resource Manager
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 لواجهة المستخدم الخاصة بالموظف. تسمح لك NEGs بدون خادم باستخدام تطبيقات 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].
إنشاء خدمة خلفية وإضافة مجموعة نقاط نهاية الشبكة بدون خادم
تحدِّد خدمة الخلفية كيفية توزيع "موازنة الحمل في السحابة الإلكترونية" للزيارات. تحتوي إعدادات خدمة الخلفية على مجموعة من القيم، مثل البروتوكول المستخدَم للاتصال بخدمات الخلفية وإعدادات التوزيع والجلسات المختلفة وعمليات التحقّق من الصحة والمهلات. توفّر هذه الإعدادات إمكانية التحكّم بشكل دقيق في سلوك موازن الحمولة.
- إنشاء خدمة خلفية
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
- إضافة NEG غير المزوّدة بخادم كخلفية لخدمة الخلفية
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 غير المزوّدة بخادم لتوجيه الطلبات إلى خدمة Cloud Run غير المزوّدة بخادم.
حجز عنوان 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].
حظر الدخول إلى خدمة Cloud Run
حصر عدد الزيارات الواردة لقبول الطلبات الداخلية والطلبات الواردة من خلال "موازنة حمل 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 لنظام IAP
- أنشئ عميلًا باستخدام اسم العلامة التجارية من الخطوة السابقة.
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- حظر الوصول باستخدام ميزة "الدفع داخل التطبيق"
حظِّر الوصول إلى خدمة الخلفية باستخدام IAP، ثم تأكَّد من أنّه لا يمكن الوصول إلى التطبيق.
- تفعيل IAP في خدمة الخلفية
gcloud iap web enable --resource-type=backend-services \
--oauth2-client-id=$CLIENT_ID \
--oauth2-client-secret=$CLIENT_SECRET \
--service=employee-ui-iap-backend
التحقّق من إعدادات IAP
- تأكَّد من أنّ شهادة طبقة المقابس الآمنة نشطة.
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- تهانينا!
تهانينا، لقد أكملت دورة codelab.
الخطوة التالية:
استكشاف الدروس التطبيقية الأخرى حول ترميز Cymbal Eats:
- بدء سير عمل Cloud باستخدام Eventarc
- بدء معالجة الأحداث من Cloud Storage
- الاتصال بخدمة CloudSQL الخاصة من Cloud Run
- الاتصال بقواعد البيانات المُدارة بالكامل من Cloud Run
- بدء مهام Cloud Run باستخدام Cloud Scheduler
- النشر بأمان على Cloud Run
- تأمين حركة مرور الإدخال في Cloud Run
- الربط بخدمة AlloyDB الخاصة من GKE Autopilot
تَنظيم
لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدليل التعليمي، يمكنك إما حذف المشروع الذي يحتوي على الموارد أو الاحتفاظ بالمشروع وحذف الموارد الفردية.
حذف المشروع
إنّ أسهل طريقة لإيقاف الفوترة هي حذف المشروع الذي أنشأته للدليل التعليمي.