1. مقدمة
يتم نشر ميزة "موازنة الحمل" في Google Cloud على حافة شبكة Google في نقاط تواجد Google (POP) حول العالم. إنّ زيارات المستخدمين الموجّهة إلى موازن تحميل وكيل بروتوكول النقل (TCP) تدخل إلى خادم بروتوكول مكتب البريد (POP) الأقرب إلى المستخدم، ويتم بعد ذلك موازنة الحمولة على شبكة Google العالمية إلى الخلفية الأقرب التي تتوفّر فيها سعة كافية.
Cloud Armor هو نظام رصد هجمات الحرمان من الخدمة الموزّعة وجدار حماية تطبيقات الويب (WAF) من Google. ترتبط Cloud Armor ارتباطًا وثيقًا بخدمة "موازن تحميل الطلبات باستخدام وكيل بروتوكول النقل (TCP) من Google Cloud"، وتتيح لك استجواب الزيارات الواردة بحثًا عن الطلبات غير المرغوب فيها. تتيح لك ميزة الحدّ من معدّل الإرسال في هذه الخدمة الحدّ من عدد الزيارات إلى موارد الخلفية استنادًا إلى عدد الطلبات، كما تمنع الزيارات غير المرغوب فيها من استهلاك الموارد على شبكة "السحابة الإلكترونية الخاصة الافتراضية" (VPC).
تتيح لك أجهزة موازنة الحمل لخوادم الوكيل TCP/SSL في Google Cloud تمثيل حركة بيانات نوع TCP/ SSL بين خدمات الخلفية.
في هذا الدرس، ستُنشئ جهاز موازنة حمل بروتوكول النقل المتعدّد (TCP)/بروتوكول أمان طبقة النقل (SSL) مع خدمة خلفية، وستحصر الوصول إلى جهاز موازنة الحمل بمجموعة محدّدة من عملاء المستخدمين فقط.
المُعطيات
- كيفية إنشاء موازن تحميل خادم وكيل TCP/SSL
- كيفية إنشاء سياسة أمان Cloud Armor
- كيفية إنشاء قاعدة قائمة حظر عناوين IP لخدمة موازنة الحمولة لوكيل TCP/SSL في Cloud Armor
- كيفية إنشاء قاعدة تقييد معدّل لجهاز موازنة الحمولة الوكيل لبروتوكول TCP في Cloud Armor
- كيفية إضافة سياسة الأمان إلى خدمة خلفية لموازنة الحمل عبر بروتوكول TCP/بروتوكول أمان طبقة النقل
المتطلبات
- معرفة أساسية بخدمة Google Compute Engine ( codelab)
- المعرفة الأساسية بالشبكات وTCP/IP
- المعرفة الأساسية لسطر أوامر Unix/Linux
- من المفيد إكمال جولة في شبكة Google Cloud باستخدام الشبكات في Google Cloud.
2. المتطلبات
إعداد البيئة حسب وتيرة الطالب واحتياجاته
- سجِّل الدخول إلى Cloud Console وأنشئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.
ملاحظة: يمكنك الوصول بسهولة إلى Cloud Console من خلال حفظ عنوان URL الخاص بها، وهو console.cloud.google.com.
تذكَّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون متاحًا لك). وسيتم الإشارة إليه لاحقًا في هذا الدليل التعليمي باسم PROJECT_ID.
ملاحظة: إذا كنت تستخدم حساب Gmail، يمكنك ترك الموقع الجغرافي التلقائي مضبوطًا على "بدون مؤسسة". إذا كنت تستخدم حسابًا على Google Workspace، اختَر موقعًا جغرافيًا مناسبًا لمؤسستك.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.
من المفترض ألا تتطلّب المشاركة في هذا الدليل التعليمي البرمجي أي تكلفة، أو تكلفة قليلة جدًا. احرص على اتّباع أي تعليمات في قسم "التنظيف" التي تنصحك بكيفية إيقاف الموارد حتى لا يتم تحصيل رسوم منك بعد انتهاء هذا البرنامج التعليمي. المستخدمون الجدد في Google Cloud مؤهّلون للاستفادة من برنامج الفترة التجريبية المجانية التي تقدّم رصيدًا بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من أنّه يمكن تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدليل التعليمي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:
من المفترض ألا تستغرق عملية توفير البيئة والاتصال بها سوى بضع لحظات. عند الانتهاء، من المفترض أن يظهر لك ما يلي:
يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. ويقدّم هذا الدليل دليلاً منزليًا دائمًا بسعة 5 غيغابايت، ويتم تشغيله على Google Cloud، ما يُحسِّن بشكل كبير أداء الشبكة والمصادقة. يمكنك تنفيذ جميع أعمالك في هذا البرنامج باستخدام متصفّح فقط.
قبل البدء
في Cloud Shell، تأكَّد من إعداد معرّف مشروعك.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] PROJECT_ID=[YOUR-PROJECT-NAME] echo $PROJECT_ID
تفعيل واجهات برمجة التطبيقات
تفعيل جميع الخدمات اللازمة
gcloud services enable compute.googleapis.com gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
3- إنشاء خدمات الخلفية
أنشئ مثيلَين على النحو التالي: أنشئ المثيل instance1-b1 في المنطقة us-central1-b.
gcloud compute instances create vm-1-b1 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b1 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
إنشاء المثيل 1-b2 في المنطقة us-central1-b
gcloud compute instances create vm-1-b2 \ --image-family debian-9 \ --image-project debian-cloud \ --tags tcp-lb \ --zone us-central1-b \ --metadata startup-script="#! /bin/bash sudo apt-get update sudo apt-get install apache2 -y sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf sudo service apache2 restart echo '<!doctype html><html><body><h1>This is VM1-b2 in central1-b</h1></body></html>' | tee /var/www/html/index.html EOF"
إنشاء مجموعة المثيلات vm-ig1
gcloud compute instance-groups unmanaged create vm-ig1 --zone us-central1-b
أنشئ منفذًا مُعنوَنًا لمجموعة النُسخ. في هذا الدرس العملي، سنستخدم المنفذ 110.
gcloud compute instance-groups set-named-ports vm-ig1 \ --named-ports tcp 110:110 --zone us-central1-b
إضافة النُسخ إلى مجموعة النُسخ
gcloud compute instance-groups unmanaged add-instances vm-ig1 \ --instances vm-1-b1,vm-1-b2 --zone us-central1-b
4. ضبط جهاز موازنة الحمل
بعد ذلك، سننشئ عملية تحقّق من الصحة.
gcloud compute health-checks create tcp my-tcp-health-check --port 110
إنشاء خدمة خلفية
gcloud compute backend-services create my-tcp-lb --global-health-checks --global \ --protocol TCP --health-checks my-tcp-health-check --timeout 5m --port-name tcp110
إضافة مجموعة النُسخ إلى خدمة الخلفية
gcloud compute backend-services add-backend my-tcp-lb --global --instance-group \ vm-ig1 --instance-group-zone us-central1-b --balancing-mode UTILIZATION \ --max-utilization 0.8
ضبط خادم وكيل TCP مستهدف
gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy --backend-service \ my-tcp-lb --proxy-header NONE
حجز عناوين IPv4 ثابتة عالمية
ستستخدم عنوان IP هذا للوصول إلى الخدمة التي تمّ موازنة الحمولة فيها.
gcloud compute addresses create tcp-lb-static-ipv4 --ip-version=IPV4 --global
اضبط قواعد إعادة التوجيه الشاملة لعنوان IP لوحدة التحميل.
gcloud compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \ --global --target-tcp-proxy my-tcp-lb-target-proxy --address LB_STATIC_IPV4 \ --ports 110
5- إنشاء قاعدة جدار حماية لخدمة موازنة الحمولة لوكيل TCP
gcloud compute firewall-rules create allow-tcplb-and-health \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --target-tags tcp-lb \ --allow tcp:110
بعد إنشاء أداة توزيع الأحمال، اختبِرها باستخدام الأمر التالي:
Curl LB_IP:110
بعد ذلك، أنشئ أجهزة افتراضية للتحقّق من رفض الوصول إلى وحدة التحميل.
يجب إنشاء نسختَين، لكل منهما عنوان IP علني واسمَان هما test-server1 وtest-server2.
6- إنشاء سياسة أمان في Cloud Armor
في هذا القسم، ستُنشئ سياسة أمان للخلفية وقاعدتَين في السياسة في Cloud Armor.
ستحظر القاعدة الأولى مجموعة محدودة من عناوين IP من الوصول إلى "موازن تحميل بروتوكول النقل المتعدّد (TCP)" من خلال ضبط سياسة أمان لحظر عناوين IP معيّنة، وستنفّذ القاعدة الثانية الحدّ من معدّل الإرسال.
- في Cloud Shell(راجِع "بدء Cloud Shell" ضمن "الإعداد والمتطلبات" للحصول على تعليمات حول كيفية استخدام Cloud Shell)، أنشئ سياسة أمان لخدمة الخلفية تُسمى rate-limit-and-deny-tcp على النحو التالي:
gcloud compute security-policies create rate-limit-and-deny-tcp \ --description "policy for tcp proxy rate limiting and IP deny"
إضافة قواعد إلى سياسة الأمان
بعد ذلك، أضِف قاعدة قائمة الرفض إلى سياسة Cloud Armor "rate-limit-and-deny-tcp".
gcloud compute security-policies rules create 1000 --action deny --security-policy \ rate-limit-and-deny-tcp --description "deny test-server1" --src-ip-ranges \ "enter-test-server-1ip-here"
إضافة قاعدة تقييد معدّل الإرسال إلى سياسة أمان Cloud Armor "rate-limit-and-deny-tcp"
gcloud compute security-policies rules create 3000 \ --security-policy=rate-limit-and-deny-tcp \ --expression="true" --action=rate-based-ban --rate-limit-threshold-count=5 \ --rate-limit-threshold-interval-sec=60 --ban-duration-sec=300 \ --conform-action=allow --exceed-action=deny-404 --enforce-on-key=IP
إرفاق السياسة بخدمة الخلفية لخادم وكيل TCP:
شغِّل الأمر التالي للتأكّد من إرفاق سياسة الأمان بخدمة الخلفية لخادم الوكيل TCP.
gcloud compute backend-services update my-tcp-lb --security-policy \ rate-limit-and-deny-tcp
تفعيل التسجيل في "موازن تحميل وكيل بروتوكول النقل المتعدّد (TCP)"
gcloud beta compute backend-services update my-tcp-lb \ --enable-logging --logging-sample-rate=1
7- التحقّق من صحة قاعدة قائمة الرفض
تحقَّق من صحة قاعدة قائمة الرفض من خلال تسجيل الدخول إلى الخادم التجريبي الذي تم تحديد عنوان IP الخاص به في قاعدة قائمة الرفض وتنفيذ الأمر التالي:
Curl LB_IP:110
قد تؤدي الطلبات الفورية إلى تلقّي استجابة من وحدة التحميل الموزّعة، ولكن عليك الانتظار إلى أن يتم رفض طلب curl أو إسقاطه، ثم اطّلِع على السجلّات في "سجلّات السحابة الإلكترونية" للتحقّق من إدخال السجلّ لقاعدة حظر عنوان IP التي يتم تفعيلها.
انتقِل إلى "تسجيلات Cloud"، وضمن "الموارد"، اختَر نوع المورد "tcp_ssl_proxy_rule" واضبط استهداف الخلفية على "my-tcp-lb".
باستخدام الموارد المحدّدة للفلترة، يمكننا التحقّق من أنّ قاعدة رفض عنوان IP سارية من قيمة PRIORITY التي تبلغ 1000 في إدخال السجلّ وأنّ الإجراء الذي تم ضبطه "DENY" سارٍ لأنّه تم توجيه كليهما من قاعدة الرفض وعنوان IP الذي يتم رفضه كما هو موضّح أدناه.
8. التحقّق من صحة قاعدة الحدّ من معدّل الإدراج
تأكَّد من أنّ قاعدة الحدّ الأقصى لمعدّل الطلبات سارية من خلال إرسال العديد من الطلبات في إطار زمني قصير يتجاوز الحدّ الأدنى المحدّد (5 طلبات في الدقيقة).
بعد الانتهاء من ذلك، انقر على "عرض السجلات" في خدمة Cloud Armor، وسينقلك ذلك إلى "تسجيلات السحابة الإلكترونية" حيث يمكنك فلترة السجلات حسب جهاز موازنة الحمل للاطّلاع على سجلات Cloud Armor عند وصولها.
يجب أن يكون إدخال الحدّ الأقصى للمعدل كما هو موضّح في لقطة الشاشة أدناه. يمكننا التحقّق من أنّ قاعدة الحدّ الأقصى للمعدل سارية من قيمة PRIORITY التي تبلغ 3000 في إدخال السجلّ ومن الإجراء الذي تمّ ضبطه، وهو الإجراء "حظر استنادًا إلى معدّل الإرسال" سارٍ وفقًا للتعليمات الواردة من قاعدة الحدّ الأقصى للمعدل.
9. تنظيف البيئة
احرص على تنظيف البنية الأساسية التي تم إنشاؤها لتجنُّب تكاليف تشغيل البنية الأساسية غير المستخدَمة.
أسرع طريقة هي حذف المشروع بأكمله في Google Cloud Platform لضمان عدم توفّر أي موارد معلّقة بدون إشراف.ومع ذلك، يمكنك حذف الموارد الفردية باستخدام الأوامر التالية:
جهاز موازنة حمل خادم وكيل TCP
gcloud compute target-tcp-proxies delete my-tcp-lb
مجموعة المثيلات
gcloud compute instance-groups unmanaged delete vm-ig1
تم إنشاء مثيلَي جهاز افتراضي تجريبيَين
gcloud compute instances delete Instance_name --zone=instance_zone
خدمة الخلفية
gcloud compute backend-services delete BACKEND_SERVICE_NAME
قواعد Cloud Armor ضمن السياسة
gcloud compute security-policies rules delete 1000 \ --security-policy=rate-limit-and-deny-tcp && gcloud compute security-policies rules delete 3000 \ --security-policy=rate-limit-and-deny-tcp
سياسة أمان Cloud Armor
gcloud compute security-policies delete rate-limit-and-deny-tcp