أساسيات Cloud NGFW لأجهزة موازنة الحمل

1. مقدمة

يستكشف هذا الدرس التطبيقي حول الترميز Essentials من Cloud Next Generation Firewall (NGFW) لأجهزة موازنة حمل التطبيقات (ALB) الداخلية وأجهزة موازنة الحمل على الشبكة (NLB) المستندة إلى الخادم الوكيل باستخدام سياسات جدار حماية بين الشبكات إقليمية.

‫Cloud NGFW هي خدمة جدار حماية موزّعة بالكامل تتضمّن ميزات متقدّمة للحماية من التهديدات وتقسيم الشبكة إلى شرائح صغيرة لحماية أحمال العمل على Google Cloud. يؤدي تفعيل Cloud NGFW على مستوى جهاز موازنة الحمل إلى تطبيق قواعد سياسة جدار الحماية المتّسقة على أي زيارات TCP واردة إلى أجهزة موازنة الحمل الداخلية المستندة إلى الخادم الوكيل. فهي تبسّط عملية توفير وضع أمان للمؤسسة من خلال فرض السياسات على نطاق أوسع لجميع الخدمات.

تتضمّن هذه الجلسة التدريبية حول الترميز منتجات وميزات Cloud NGFW وCloud Load Balancing التالية:

  • ‫Cloud NGFW Essentials
  • سياسات جدار الحماية بين الشبكات الإقليمية
  • جهاز موازنة حمل التطبيقات الداخلي على مستوى المنطقة
  • مجموعة مثيلات مُدارة (MIG) للخلفية ومجموعة نقاط نهاية الشبكة (NEG) لخدمة Private Service Connect (PSC)

ملاحظة: يُرجى الرجوع إلى مستندات Cloud NFGW لمعرفة أحدث الميزات المتوافقة وقيود قواعد سياسة جدار الحماية للاستخدامات في موازنة التحميل.

ما ستتعلمه

  • تفعيل قواعد سياسات جدار الحماية الأساسية في Cloud NGFW التي تستهدف أجهزة موازنة الحمل
  • حماية خدمة موازنة حمل داخلية للمستهلك باستخدام مثيل آلة افتراضية وخلفيات PSC
  • اختبار وصول العميل والتحقّق من سجلّات جدار الحماية

ما تحتاج إليه

2. المفاهيم

فئات ميزات جدار الحماية

يتضمّن Cloud NGFW ثلاث فئات من الميزات: Essentials وStandard وEnterprise. يوفّر كل مستوى تصاعدي مستويات إضافية من إمكانات فلترة حركة بيانات الشبكة وفحصها.

في ما يلي ملخّص لإمكانات الفلترة في Essentials من Cloud NGFW:

Tier

إمكانية

طبقات الشبكة

أمثلة على مَعلمات القواعد

Essentials

فلترة عناوين IP ونطاقاتها

عنوان IP

--src-ip-ranges=1.1.1.0/24,2.2.2.2/32

Essentials

مجموعات العناوين

عنوان IP

--src-address-groups=special-ranges

Essentials

فلترة البروتوكول والمنفذ

TCP

--layer4-configs=tcp

Essentials

العلامات الآمنة

البيانات الوصفية

--src-secure-tags=tagValues/987654321098

Essentials

فلترة حسب نوع الشبكة

الملكية الفكرية / البيانات الوصفية

--src-network-type=INTRA_VPC

تحدّد قواعد إعادة التوجيه الخاصة بأداة موازنة الحمل منفذ TCP الوجهة بشكلٍ صريح. لا يمكن لمَعلمة قاعدة جدار الحماية --layer4-configs= تحديد سوى tcp. يتم تضمين قيمة المنفذ في قاعدة إعادة التوجيه نفسها.

يمكن أن تكون مجموعات العناوين وأنواع الشبكات مفيدة لجعل قواعد سياسة جدار الحماية أكثر فعالية. يتوافق نوعا الشبكة VPC_NETWORKS وINTRA_VPC مع قواعد سياسة جدار الحماية لموازنات الأحمال.

ملاحظة: لا تتوافق قواعد سياسة جدار الحماية لأجهزة موازنة الحمل إلا مع --direction=INGRESS. تم تصميم هذه القواعد للتحكّم في الوصول إلى الخدمات التي يعرضها موازن التحميل.

فلترة مستوى البيانات

تغطّي ميزات Essentials في Cloud NFGW قواعد جدار الحماية الأساسية ذات الحالة على الطبقة 3 (عنوان IP) والطبقة 4 (منفذ TCP). يتم تنفيذ جميع ميزات قواعد سياسة جدار الحماية هذه بكفاءة في مستوى بيانات موازن التحميل بدون الحاجة إلى فحص الحزمة الكاملة.

يتم فرض قواعد سياسة Essentials في Cloud NGFW التي تستهدف مثيلات الأجهزة الافتراضية في بنية شبكة السحابة الإلكترونية الخاصة الافتراضية الموزّعة كجزء من شبكة Google Cloud الأساسية المعرَّفة برمجيًا (Andromeda). يتم فرض قواعد سياسات جدار الحماية وفلترة الحِزم على مستوى برنامج Hypervisor لكل مثيل من مثيلات الأجهزة الافتراضية، وذلك قبل أن تصل الحزمة إلى واجهة شبكة مثيل الجهاز الافتراضي.

يتم تطبيق قواعد سياسة Essentials في Cloud NGFW التي تستهدف أجهزة موازنة الحمل باستخدام التكنولوجيات الأساسية لأجهزة موازنة الحمل في Google Cloud، وتحديدًا البنية الأساسية لوكيل خدمة Envoy. باستخدام نموذج موارد Cloud NFGW وبنية القواعد نفسها، يتم فرض فلترة الحِزم ذات الحالة مباشرةً في مستوى بيانات موازن التحميل المستند إلى الخادم الوكيل.

استهدافات موازن الحمل

هناك بعض الاختلافات الرئيسية بين سياسات Cloud NGFW التي تستهدف أجهزة موازنة الحمل والسياسات التي تستهدف مثيلات الأجهزة الافتراضية.

يمكن تطبيق قواعد سياسة جدار الحماية على موازن تحميل واحد من خلال تحديد --target-type=INTERNAL_MANAGED_LB مع الإشارة المحدّدة إلى قاعدة إعادة التوجيه لموازن التحميل --target-forwarding-rules=FR_NAME. لاستهداف جميع قواعد إعادة التوجيه الخاصة بموازنة الحمل في منطقة شبكة VPC (حيث يتم تحديد نطاق المنطقة حسب السياسة)، يجب حذف المرجع المحدّد، وتكون العلامة --target-type=INTERNAL_MANAGED_LB فقط مطلوبة.

إذا لم يتم ضبط المَعلمة --target-type في إعدادات القاعدة، سيتم تلقائيًا تطبيق القاعدة على جميع مثيلات الجهاز الافتراضي وعدم تطبيقها على موازنات التحميل.

شبكة الدروس التطبيقية حول الترميز

يستخدم هذا الدرس التطبيقي مشروعًا واحدًا مع شبكة VPC واحدة والموارد التالية:

  • شبكتان فرعيتان إقليميتان
  • سياسة واحدة إقليمية لجدار الحماية بين الشبكات
  • ثلاثة أجهزة موازنة حمل التطبيقات الداخلية على مستوى المنطقة
    • خدمة HTTP www مع خلفية مجموعة أجهزة افتراضية
    • خدمة HTTP api مع خلفية مجموعة أجهزة افتراضية
    • gcs خدمة HTTPS مع خلفية مجموعة نقاط نهاية الشبكة (NEG) في Private Service Connect (PSC) لواجهات Google APIs
  • مثالا آلتين افتراضيتين لاختبار سياسات السماح والرفض المختلفة

figure1

الشكل 1. شبكة الدروس التطبيقية حول الترميز

يتم ربط قواعد سياسة جدار الحماية التي تستهدف أدوات موازنة الحمل بموارد قواعد إعادة توجيه أدوات موازنة الحمل. تتكوّن موازنات التحميل نفسها من موارد محدّدة بشكل فردي تم إعدادها معًا لتقديم خدمة موازنة تحميل كاملة. يشير تعريف قاعدة إعادة التوجيه مباشرةً إلى مورد وكيل مستهدف محدّد تم تحديده لها.

figure2

الشكل 1. ‫Cloud NFGW لموارد موازنة الحمل

تتم برمجة فلاتر Essentials في Cloud NGFW في مستوى بيانات موازن التحميل، ويتم تنفيذها في طبقة خدمة وكيل الهدف المحدَّد، وهي مشابهة لواجهة مثيل الجهاز الافتراضي، وذلك باستخدام آليات جدار الحماية الموزّعة والمتسقة نفسها لفرض السياسات.

3- إعداد المشروع

الوصول إلى مشروعك

يستخدم هذا الدرس التطبيقي حول الترميز مشروعًا واحدًا على Google Cloud. تستخدم خطوات الإعداد واجهة سطر الأوامر gcloud cli وأوامر واجهة مستخدم Linux.

ابدأ بالوصول إلى سطر الأوامر الخاص بمشروعك على Google Cloud:

تحديد رقم تعريف المشروع

gcloud config set project YOUR_PROJECT_ID_HERE

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

gcloud services enable \
  cloudresourcemanager.googleapis.com \
  compute.googleapis.com \
  dns.googleapis.com \
  networksecurity.googleapis.com \
  certificatemanager.googleapis.com

ضبط متغيرات بيئة shell

# set your region preference
export REGION_1="us-west1"
# set your zone preference
export ZONE_1="us-west1-c"
# fetch project info and verify vars set
export PROJECT_ID=$(gcloud config list --format="value(core.project)")
export PROJECT_NO=$(gcloud projects describe ${PROJECT_ID} --format="value(projectNumber)")
echo ${REGION_1}
echo ${ZONE_1}
echo ${PROJECT_ID}
echo ${PROJECT_NO}

4. أساسيات الشبكة

في هذا القسم، ستنشئ أساسًا للشبكة يتضمّن ما يلي:

  • شبكة VPC عالمية وشبكات فرعية إقليمية
  • سياسة جدار حماية بين الشبكات الإقليمية لتأمين شبكة سحابة VPC
  • ‫Cloud Router وCloud NAT للخوادم من أجل استرداد حِزم البرامج
  • حجوزات عناوين IP وسجلّات نظام أسماء النطاقات (DNS) لعمليات دخول موازن التحميل

إنشاء موارد الشبكة

# create vpc network
gcloud compute networks create vnet-foo --subnet-mode=custom
# create subnet for clients
gcloud compute networks subnets create subnet-foo-1 \
  --network=vnet-foo \
  --region=${REGION_1} \
  --range=10.0.0.0/24 \
  --enable-private-ip-google-access
# create subnet for backend servers
gcloud compute networks subnets create subnet-foo-2 \
  --network=vnet-foo \
  --region=${REGION_1} \
  --range=172.16.0.0/24 \
  --enable-private-ip-google-access
# create proxy subnet
gcloud compute networks subnets create subnet-foo-3 \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --network=vnet-foo \
  --region=${REGION_1} \
  --range=172.16.128.0/23

إنشاء مكوّنات جدار الحماية

سيتم استخدام سياسة جدار حماية بين الشبكات الأساسية على مستوى المنطقة التي تم إنشاؤها هنا لاحقًا عند إضافة أهداف محدّدة لجهاز موازنة الحمل. يجب أن تكون السياسة في المنطقة نفسها التي يتوفّر فيها موازن التحميل.

إنشاء مجموعة عناوين

ابدأ بإنشاء مجموعة عناوين لتحديد نطاقات عناوين IP الخاصة بالتحقق من الصحة للمصدر التي تتيح وظائف موازنة الحمل. يجب السماح بهذه النطاقات لكي يتم اعتبار الخلفيات الخاصة بأداة موازنة الحمل سليمة. سيتم استخدامها أيضًا لاحقًا مع قواعد سياسة جدار الحماية التي تستهدف موازنات التحميل.

# create address group
gcloud network-security address-groups create uhc-probes \
  --description="health check probes" \
  --type=IPv4 \
  --capacity=42 \
  --location=${REGION_1}
# add ip ranges to address group
gcloud network-security address-groups add-items uhc-probes \
  --items=35.191.0.0/16,130.211.0.0/22 \
  --location=${REGION_1}

إنشاء سياسة جدار الحماية

# create fw policy
gcloud compute network-firewall-policies create fw-policy-foo-${REGION_1} \
  --description="foo fw ${REGION_1}" \
  --region=${REGION_1}
# create fw policy rule to allow in iap
gcloud compute network-firewall-policies rules create 1001 \
  --description="allow iap for ssh" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:22 \
  --src-ip-ranges=35.235.240.0/20
# create fw policy rule to allow in health checks
gcloud compute network-firewall-policies rules create 1002 \
  --description="allow health checks to backends" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp \
  --src-address-groups=projects/${PROJECT_ID}/locations/${REGION_1}/addressGroups/uhc-probes
# create fw policy rule to allow in lb proxies
gcloud compute network-firewall-policies rules create 1003 \
  --description="allow lb proxy" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:80,tcp:443,tcp:8080 \
  --src-ip-ranges=172.16.128.0/23
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
  --name=fw-policy-association-foo-${REGION_1} \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --network=vnet-foo \
  --firewall-policy-region=${REGION_1}

ضبط خدمات الشبكة

إنشاء Cloud Router وبوابة NAT

# create router for nat
gcloud compute routers create cr-nat-foo \
  --network=vnet-foo \
  --asn=16550 \
  --region=${REGION_1}
# create nat gateway
gcloud compute routers nats create natgw-foo \
  --router=cr-nat-foo \
  --region=${REGION_1} \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges

حجز عناوين IP

# reserve vip for lb www service
gcloud compute addresses create vip-foo-www \
  --region=${REGION_1} \
  --subnet=subnet-foo-1 \
  --addresses=10.0.0.101
# reserve vip for lb api service
gcloud compute addresses create vip-foo-api \
  --region=${REGION_1} \
  --subnet=subnet-foo-1 \
  --addresses=10.0.0.102
# reserve vip for lb gcs service
gcloud compute addresses create vip-foo-gcs \
  --region=${REGION_1} \
  --subnet=subnet-foo-1 \
  --addresses=10.0.0.103

إنشاء سجلّات نظام أسماء النطاقات

# create dns zone
gcloud dns managed-zones create zone-foo \
  --description="private zone for foo" \
  --dns-name=foo.com \
  --networks=vnet-foo \
  --visibility=private
# create dns record for www service
gcloud dns record-sets create www.foo.com \
  --zone=zone-foo \
  --type=A \
  --ttl=300 \
  --rrdatas="10.0.0.101"
# create dns record for api service
gcloud dns record-sets create api.foo.com \
  --zone=zone-foo \
  --type=A \
  --ttl=300 \
  --rrdatas="10.0.0.102"
# create dns record for gcs service
gcloud dns record-sets create gcs.foo.com \
  --zone=zone-foo \
  --type=A \
  --ttl=300 \
  --rrdatas="10.0.0.103"

بهذا نختتم جزء إعداد الشبكة... وسنتناول في ما يلي كيفية ضبط موازنات الحمل.

5- خدمات موازنة الحمل

في هذا القسم، ستنفّذ مكوّنات موازنة الحمل (خدمات الخلفية وخرائط عناوين URL والوكلاء المستهدَفون وقواعد إعادة التوجيه) لثلاث خدمات:

  1. www خدمة (ilb-foo-www) على المنفذ 80
  2. api خدمة (ilb-foo-api) على المنفذ 8080
  3. خدمة gcs (ilb-foo-gcs) على المنفذ 443 مع شهادة بروتوكول أمان طبقة النقل (TLS)

بالإضافة إلى مراجع الخلفية الداعمة:

  1. مثيلات الأجهزة الافتراضية التي تشغّل خوادم HTTP في مجموعة مثيلات مُدارة
  2. مجموعة نقاط نهاية الشبكة (NEG) في Private Service Connect (PSC) لواجهات Google APIs
  3. حزمة Google Cloud Storage (GCS)

إعداد مراجع الخلفية

إنشاء خوادم مجموعة مثيلات الأجهزة الافتراضية

سيستخدم موازن الحمل www خوادم الخلفية لمجموعة الأجهزة الافتراضية التي تشغّل خادم الويب Apache الذي يستمع إلى المنفذ 80.

سيستخدم جهاز موازنة الحمل api مجموعة الأجهزة الافتراضية نفسها التي تستمع إلى المنفذ 8080.

# create vm startup config with http server
cat > vm-server-startup.sh << 'OEOF'
#! /bin/bash
set -e
apt-get update
apt-get install apache2 -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone | cut -d/ -f4)"
echo "www served from: $vm_hostname in zone $vm_zone on port 80" | \
tee /var/www/html/index.html
echo "Listen 8080" | tee -a /etc/apache2/ports.conf
mkdir -p /var/www/api
echo "api served from: $vm_hostname in zone $vm_zone on port 8080" | \
tee /var/www/api/index.html
tee /etc/apache2/sites-available/api.conf << EOF
<VirtualHost *:8080>
    DocumentRoot /var/www/api
</VirtualHost>
EOF
a2ensite api.conf
systemctl restart apache2
OEOF
# create managed instance group template
gcloud compute instance-templates create mig-template-foo \
  --machine-type=e2-micro \
  --network=vnet-foo \
  --region=${REGION_1} \
  --subnet=subnet-foo-2 \
  --no-address \
  --shielded-secure-boot \
  --metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-foo \
  --region=${REGION_1} \
  --size=2 \
  --template=mig-template-foo \
  --base-instance-name=service-foo
# create named ports for instance group
gcloud compute instance-groups managed set-named-ports mig-foo \
  --named-ports=www-port:80,api-port:8080 \
  --region=${REGION_1}

إنشاء حزمة تخزين

سيستخدم gcs موازن التحميل خلفية NEG في Private Service Connect للربط من خلال الواجهة الأمامية لواجهات Google APIs بحزمة Cloud Storage.

# create random bucket name
export BUCKET=$(openssl rand -hex 12)
echo ${BUCKET}

ملاحظة: يتم فقدان متغيرات البيئة عند إغلاق جلسة shell. دوِّن اسم الحزمة إذا كنت بحاجة إلى إكمالها في جلسة مستقبلية.

# create bucket
gcloud storage buckets create gs://${BUCKET} --location=${REGION_1}
# give compute sa object admin role on bucket
gcloud storage buckets add-iam-policy-binding gs://${BUCKET} \
  --member=serviceAccount:${PROJECT_NO}-compute@developer.gserviceaccount.com \
  --role=roles/storage.objectAdmin

إنشاء شهادة

سيوقف جهاز موازنة الحمل gcs طلبات HTTPS من العملاء باستخدام شهادة موقَّعة ذاتيًا يتم نشرها على خادم وكيل HTTPS المستهدف.

# create cert
openssl req -x509 -newkey rsa:2048 \
  -nodes \
  -days 365 \
  -keyout foo-gcs-key.pem \
  -out foo-gcs-cert.pem \
  -subj "/CN=Foo, Inc." \
  -addext "subjectAltName=DNS:gcs.foo.com"
# upload to certificate manager
gcloud certificate-manager certificates create cert-foo-gcs \
  --private-key-file=foo-gcs-key.pem \
  --certificate-file=foo-gcs-cert.pem \
  --location=${REGION_1}

إنشاء مكوّنات جهاز موازنة الحمل

استخدِم النص البرمجي التالي لأتمتة عملية نشر مكوّنات موازنة التحميل. سيساعد ذلك في تحسين السرعة والدقة في جميع عناصر الإعدادات المعنية.

نشر نص برمجي لإنشاء جهاز موازنة الحمل

# create script file
cat > create_lbs.sh << EOF
#!/bin/bash
set -e

# --- Create load balancer for www service port 80 ---
echo "--- Creating Load Balancer for WWW Service (ilb-foo-www) on port 80 ---"

echo "ilb-foo-www: creating health check (hc-foo-www)"
gcloud compute health-checks create http hc-foo-www \
  --use-serving-port \
  --region=${REGION_1}

echo "ilb-foo-www: creating backend service (bes-foo-www)"
gcloud compute backend-services create bes-foo-www \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTP \
  --port-name=www-port \
  --health-checks=hc-foo-www \
  --health-checks-region=${REGION_1} \
  --region=${REGION_1}

echo "ilb-foo-www: adding managed instance group (mig-foo) to backend service (bes-foo-www)"
gcloud compute backend-services add-backend bes-foo-www \
  --balancing-mode=UTILIZATION \
  --instance-group=mig-foo \
  --instance-group-region=${REGION_1} \
  --region=${REGION_1}

echo "ilb-foo-www: creating url map (ilb-foo-www)"
gcloud compute url-maps create ilb-foo-www \
  --default-service=bes-foo-www \
  --region=${REGION_1}

echo "ilb-foo-www: creating target http proxy (proxy-foo-www)"
gcloud compute target-http-proxies create proxy-foo-www \
  --url-map=ilb-foo-www \
  --url-map-region=${REGION_1} \
  --region=${REGION_1}

echo "ilb-foo-www: creating forwarding rule (fr-foo-www)"
gcloud compute forwarding-rules create fr-foo-www \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=vnet-foo \
  --subnet=subnet-foo-1 \
  --subnet-region=${REGION_1} \
  --address=vip-foo-www \
  --ports=80 \
  --target-http-proxy=proxy-foo-www \
  --target-http-proxy-region=${REGION_1} \
  --region=${REGION_1}

echo "--- Successfully created Load Balancer for WWW Service (ilb-foo-www) ---"
echo

# --- Create load balancer for api service port 8080 ---
echo "--- Creating Load Balancer for API Service (ilb-foo-api) on port 8080 ---"

echo "ilb-foo-api: creating health check (hc-foo-api)"
gcloud compute health-checks create http hc-foo-api \
  --use-serving-port \
  --region=${REGION_1}

echo "ilb-foo-api: creating backend service (bes-foo-api)"
gcloud compute backend-services create bes-foo-api \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTP \
  --port-name=api-port \
  --health-checks=hc-foo-api \
  --health-checks-region=${REGION_1} \
  --region=${REGION_1}

echo "ilb-foo-api: adding managed instance group (mig-foo) to backend service (bes-foo-api)"
gcloud compute backend-services add-backend bes-foo-api \
  --balancing-mode=UTILIZATION \
  --instance-group=mig-foo \
  --instance-group-region=${REGION_1} \
  --region=${REGION_1}

echo "ilb-foo-api: creating url map (ilb-foo-api)"
gcloud compute url-maps create ilb-foo-api \
  --default-service=bes-foo-api \
  --region=${REGION_1}

echo "ilb-foo-api: creating target http proxy (proxy-foo-api)"
gcloud compute target-http-proxies create proxy-foo-api \
  --url-map=ilb-foo-api \
  --url-map-region=${REGION_1} \
  --region=${REGION_1}

echo "ilb-foo-api: creating forwarding rule (fr-foo-api)"
gcloud compute forwarding-rules create fr-foo-api \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=vnet-foo \
  --subnet=subnet-foo-1 \
  --subnet-region=${REGION_1} \
  --address=vip-foo-api \
  --ports=8080 \
  --target-http-proxy=proxy-foo-api \
  --target-http-proxy-region=${REGION_1} \
  --region=${REGION_1}

echo "--- Successfully created Load Balancer for API Service (ilb-foo-api) ---"
echo

# --- Create load balancer for gcs service port 443 ---
echo "--- Creating Load Balancer for GCS Service (ilb-foo-gcs) on port 443 ---"

echo "ilb-foo-gcs: creating network endpoint group (neg-psc-gcs)"
gcloud compute network-endpoint-groups create neg-psc-gcs \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=storage.${REGION_1}.rep.googleapis.com \
  --region=${REGION_1}

echo "ilb-foo-gcs: creating backend service (bes-foo-gcs)"
gcloud compute backend-services create bes-foo-gcs \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTPS \
  --region=${REGION_1}

echo "ilb-foo-gcs: adding network endpoint group (neg-psc-gcs) to backend service (bes-foo-gcs)"
gcloud compute backend-services add-backend bes-foo-gcs \
  --network-endpoint-group=neg-psc-gcs \
  --network-endpoint-group-region=${REGION_1} \
  --region=${REGION_1}

echo "ilb-foo-gcs: creating url map (ilb-foo-gcs)"
gcloud compute url-maps create ilb-foo-gcs \
  --default-service=bes-foo-gcs \
  --region=${REGION_1}

echo "ilb-foo-gcs: creating target https proxy (proxy-foo-gcs)"
gcloud compute target-https-proxies create proxy-foo-gcs \
  --url-map=ilb-foo-gcs \
  --url-map-region=${REGION_1} \
  --certificate-manager-certificates=cert-foo-gcs \
  --region=${REGION_1}

echo "ilb-foo-gcs: creating forwarding rule (fr-foo-gcs)"
gcloud compute forwarding-rules create fr-foo-gcs \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=vnet-foo \
  --subnet=subnet-foo-1 \
  --subnet-region=${REGION_1} \
  --address=vip-foo-gcs \
  --ports=443 \
  --target-https-proxy=proxy-foo-gcs \
  --target-https-proxy-region=${REGION_1} \
  --region=${REGION_1}

echo "--- Successfully created Load Balancer for GCS Service (ilb-foo-gcs) ---"
echo

echo "All load balancers created successfully."
EOF
# make script executable
chmod +x create_lbs.sh
# run script
./create_lbs.sh

ملاحظة: يستغرق إكمال هذا النص البرمجي عدة دقائق.

التحقّق من إنشاء جهاز موازنة الحمل

تأكَّد من نشر قواعد إعادة التوجيه وخدمات الخلفية.

# check forwarding rules
gcloud compute forwarding-rules list
# check backend services
gcloud compute backend-services list

بهذا نكون قد انتهينا من جزء إعداد موازن الحمل... سننتقل الآن إلى إعداد مثيلات الأجهزة الافتراضية للعميل.

6. وصول العميل

إنشاء موارد عميل الجهاز الافتراضي

في هذا القسم، ستنشر العملاء وتتحقّق من إمكانية الاتصال من البداية إلى النهاية.

إنشاء مثيلات أجهزة افتراضية

# set variables for client ip addresses
export VM_ALLOW_IP="10.0.0.11"
export VM_DENY_IP="10.0.0.12"
echo ${VM_ALLOW_IP}
echo ${VM_DENY_IP}
# create client 1 vm
gcloud compute instances create vm-allow \
  --machine-type=e2-micro \
  --zone=${ZONE_1} \
  --subnet=subnet-foo-1 \
  --no-address \
  --private-network-ip=${VM_ALLOW_IP} \
  --scopes=cloud-platform \
  --shielded-secure-boot
# create client 2 vm
gcloud compute instances create vm-deny \
  --machine-type=e2-micro \
  --zone=${ZONE_1} \
  --subnet=subnet-foo-1 \
  --no-address \
  --private-network-ip=${VM_DENY_IP} \
  --scopes=cloud-platform \
  --shielded-secure-boot

اختبار الخدمة الأساسية

اختبار من العميل vm-allow

ملاحظة: ستصبح مثيلات الأجهزة الافتراضية متاحة على الإنترنت ويمكن الوصول إليها عبر ssh باستخدام IAP بعد فترة قصيرة من إصدار أوامر instances create. قد تحتاج إلى الانتظار قليلاً إذا لم ينجح الطلب من المحاولة الأولى.

# send request to foo www service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  curl -s www.foo.com"
# send request to foo api service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  curl -s api.foo.com:8080"

اختبِر تحميل ملف إلى Google Cloud Storage من خلال أداة موازنة الحمل.

# send request to foo gcs service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  echo 'test one on the way' > test-upload-1.txt
  TOKEN=\$(gcloud auth print-access-token)
  curl -s -k -X POST \"https://gcs.foo.com/upload/storage/v1/b/${BUCKET}/o?uploadType=media&name=test-upload-object-1.txt\" \
  -H \"Authorization: Bearer \${TOKEN}\" \
  -H \"Content-Type: text/plain\" \
  --data-binary @test-upload-1.txt"

يؤكّد ردّ واجهة برمجة التطبيقات Cloud Storage API أنّ مسار الشبكة يعمل بشكل صحيح.

اختبار من العميل vm-deny

# send request to foo www service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  curl -s www.foo.com"
# send request to foo api service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  curl -s api.foo.com:8080"
# send request to foo gcs service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  echo 'test two on the way' > test-upload-2.txt
  TOKEN=\$(gcloud auth print-access-token)
  curl -s -k -X POST \"https://gcs.foo.com/upload/storage/v1/b/${BUCKET}/o?uploadType=media&name=test-upload-object-2.txt\" \
  -H \"Authorization: Bearer \${TOKEN}\" \
  -H \"Content-Type: text/plain\" \
  --data-binary @test-upload-2.txt"

ملاحظة: يجب أن تنجح هذه الاختبارات أيضًا لأنّه لم يتم استهداف موازن التحميل بأي قواعد جدار حماية حتى الآن.

بهذا نكون قد انتهينا من جميع أجزاء الإعداد الرئيسية... لننتقل الآن إلى إنشاء قواعد جدار الحماية لموازنة التحميل.

7. جدار الحماية لجهاز موازنة الحمل

في هذا القسم، ستنفّذ قواعد سياسة جدار الحماية التي تستهدف موازنات التحميل. سيتم إنشاء تسلسل الإعدادات للوصول إلى وضع أمان يسمح بالوصول إلى vm-allow ويحظر زيارات vm-deny لجميع الخدمات.

السماح لعدد محدّد من الزيارات بالوصول إلى fr-foo-www

إضافة قاعدة جديدة لسياسة جدار الحماية إلى سياسة جدار الحماية الحالية fw-policy-foo-${REGION_1}

  • السماح بنطاق عناوين IP المصدر الذي يتضمّن vm-allow ويستبعد عناوين IP vm-deny
  • أضِف فلتر مصدر إضافيًا INTRA_VPC للاستفادة من نوع الشبكة في قاعدة سياسة جدار الحماية التي تستهدف موازن التحميل

يتوفّر نوع الشبكة المصدر INTRA_VPC وVPC_NETWORKS في قواعد سياسات جدار الحماية التي تستهدف موازنات التحميل عند استخدامها بالاشتراك مع مَعلمة مصدر أخرى. منطق التقييم هو AND بين مَعلمتَي المصدر. في هذه الحالة، يجب أن تستوفي الزيارات معايير INTRA_VPC و --src-ip-ranges=${VM_ALLOW_IP}/32 ليتم السماح بها.

إنشاء قاعدة للسماح باستهداف vm-allow fr-foo-www

# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2001 \
  --description="allow vm traffic to fr-www" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --enable-logging \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp \
  --src-network-type=INTRA_VPC \
  --src-ip-ranges=${VM_ALLOW_IP}/32 \
  --target-type=INTERNAL_MANAGED_LB \
  --target-forwarding-rules=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo-www

اختبار من العميل vm-allow

# send request to foo www service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  curl -s www.foo.com"

اختبار من العميل vm-deny

# send request to foo www service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  curl -s www.foo.com"

ملاحظة: ينجح ذلك لأنّ السلوك الضمني التلقائي لقاعدة سياسة جدار الحماية لموازنات التحميل هو --action=allow. يجب توفُّر قاعدة رفض تلقائية (شاملة) لتغيير ذلك.

رفض الزيارات التلقائية إلى fr-foo-www

أضِف قاعدة جديدة لسياسة جدار الحماية ذات أولوية أقل (رقم أعلى).

  • رفض جميع الزيارات الواردة من أيّ عنوان IP مصدر
  • سيتم السماح بالزيارات من vm-allow إلى fr-foo-www قبل تطبيق قاعدة الرفض

إنشاء قاعدة لرفض استهداف الزيارات fr-foo-www

# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2999 \
  --description="allow vm traffic to fr-www" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --enable-logging \
  --action=deny \
  --direction=INGRESS \
  --layer4-configs=tcp \
  --src-ip-ranges=0.0.0.0/0 \
  --target-type=INTERNAL_MANAGED_LB \
  --target-forwarding-rules=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo-www

اعتبارات عمليات التحقّق من الصحة

كما هو الحال مع قواعد سياسة جدار الحماية التي تستهدف مثيلات الأجهزة الافتراضية، فإنّ قاعدة الرفض التلقائي (الضمني) الشاملة التلقائية تمنع الزيارات الواردة من نطاقات اختبار التحقّق من الصحة المتجهة إلى الخوادم الخلفية لموازنة الحمل. لذلك، تم ضبط قاعدة سماح صريحة للسماح بنطاقات فحص صحة الدخول (راجِع القاعدة 1002).

ملاحظة مهمة: وبالمثل، عند إنشاء قاعدة رفض شاملة (صريحة) للسماح بالدخول إلى استهدافات موازنة الحمل، يجب إنشاء قاعدة أخرى ذات أولوية أعلى (رقم أولوية أقل) للسماح بالدخول من نطاق التحقق من الصحة. يجب أن تستهدف هذه القاعدة أدوات موازنة الحمل.

# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2002 \
  --description="allow health checks to fr-www" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp \
  --src-address-groups=projects/${PROJECT_ID}/locations/${REGION_1}/addressGroups/uhc-probes \
  --target-type=INTERNAL_MANAGED_LB \
  --target-forwarding-rules=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo-www

اختبار من العميل vm-deny

# send request to foo www service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  curl -s www.foo.com"

من المفترض أن يتعذّر ذلك الآن لأنّ قاعدة جدار الحماية 2999 ترفض جميع الزيارات الواردة من شبكة VPC. لم تسمح قاعدة الأولوية الأعلى (الرقم ذو الأولوية الأقل) 2001 إلا بنطاق مصدر يتضمّن vm-allow.

أوقِف عملية curl بالضغط على Ctrl+C.

# send request to foo api service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  curl -s api.foo.com:8080"

سيظل بإمكان vm-deny الوصول إلى خدمة واجهة برمجة التطبيقات. وقد نجح ذلك لأنّ قاعدة جدار الحماية تم تطبيقها على قاعدة إعادة التوجيه fr-foo-www فقط ولم تستهدف fr-foo-api.

تعديل القواعد لاستهداف جميع أجهزة موازنة الحمل

ملاحظة: يمكن تطبيق قواعد سياسة جدار الحماية على جميع موازنات التحميل في شبكة VPC عن طريق حذف --target-forwarding-rules=FR_NAME.

غيِّر قواعد سياسة جدار الحماية لتسري الآن على جميع أهداف قاعدة إعادة التوجيه لموازنة التحميل في شبكة السحابة الافتراضية الخاصة.

  1. أنشئ قاعدة سماح جديدة للزيارات الواردة 2003 تستهدف جميع قواعد إعادة التوجيه للسماح بزيارات الجهاز الافتراضي (نطاق عناوين IP vm-allow)
  2. أنشئ قاعدة سماح جديدة للدخول 2004 تستهدف جميع قواعد إعادة التوجيه للسماح بزيارات عمليات التحقّق من الصحة (مجموعة العناوين uhc-probes).
  3. إنشاء قاعدة رفض جديدة للدخول 2998 تستهدف جميع قواعد إعادة التوجيه كرفض شامل لجميع الزيارات الأخرى

تعديل قواعد جدار الحماية لاستهداف جميع موازنات التحميل

# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2003 \
  --description="allow vm traffic to all vnet lb fr" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --enable-logging \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp  \
  --src-ip-ranges=${VM_ALLOW_IP}/32 \
  --target-type=INTERNAL_MANAGED_LB
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2004 \
  --description="allow health checks to all vnet lb fr" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --enable-logging \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp \
  --src-address-groups=projects/${PROJECT_ID}/locations/${REGION_1}/addressGroups/uhc-probes \
  --target-type=INTERNAL_MANAGED_LB
# create fw policy rule
gcloud beta compute network-firewall-policies rules create 2998 \
  --description="deny all vnet traffic to all vnet lb fr" \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1} \
  --enable-logging \
  --action=deny \
  --direction=INGRESS \
  --layer4-configs=tcp \
  --src-ip-ranges=0.0.0.0/0 \
  --target-type=INTERNAL_MANAGED_LB

يمكن إزالة قواعد سياسة جدار الحماية السابقة التي تستهدف قواعد إعادة توجيه موازنة التحميل الصريحة لأنّها أصبحت الآن مكرّرة مع القواعد التي تستهدف جميع قواعد إعادة التوجيه في شبكة السحابة الافتراضية الخاصة (VPC).

# delete redundant fw policy rules
gcloud beta compute network-firewall-policies rules delete 2001 \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1}

gcloud beta compute network-firewall-policies rules delete 2002 \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1}

gcloud beta compute network-firewall-policies rules delete 2999 \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1}

اختبار من العميل vm-deny

# send request to foo api service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  curl -s api.foo.com:8080"

من المفترض أن يفشل ذلك الآن لأنّ fr-foo-api يستهدفه أيضًا جميع قواعد سياسة جدار الحماية التي تتضمّن --target-type=INTERNAL_MANAGED_LB.

أوقِف عملية curl بالضغط على Ctrl+C.

اختبِر تنزيل ملف من Google Cloud Storage من خلال أداة موازنة الحمل.

# send request to foo gcs service
gcloud compute ssh vm-deny --zone=${ZONE_1} --command="
  TOKEN=\$(gcloud auth print-access-token)
  curl -s -k \"https://gcs.foo.com/storage/v1/b/${BUCKET}/o/test-upload-object.txt?alt=media\" \
  -H \"Authorization: Bearer \${TOKEN}\" \
  -o test-download.txt"

أوقِف عملية curl بالضغط على Ctrl+C.

اختبار من العميل vm-allow

# send request to foo www service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  curl -s www.foo.com"
# send request to foo api service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  curl -s api.foo.com:8080"
# send request to foo gcs service
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  TOKEN=\$(gcloud auth print-access-token)
  curl -s -k \"https://gcs.foo.com/storage/v1/b/${BUCKET}/o/test-upload-object-1.txt?alt=media\" \
  -H \"Authorization: Bearer \${TOKEN}\" \
  -o test-download-1.txt"

التحقّق من محتوى التنزيل

# send request from vm
gcloud compute ssh vm-allow --zone=${ZONE_1} --command="
  cat test-download-1.txt"

تتوفّر جميع خدمات موازنة التحميل لـ vm-allow ويتم حظرها بنجاح لـ vm-deny.

بهذا ينتهي جزء الاختبار... وسنلقي نظرة موجزة على التسجيل.

8. تسجيل قواعد جدار الحماية

يحتوي تنسيق سجلّ جدار الحماية على حقول وسجلات للقواعد التي تستهدف موازنات التحميل (--target-type=INTERNAL_MANAGED_LB).

ستحتوي السجلات على حقل إضافي يحمل التصنيف load_balancer_details ويتضمّن المزيد من المعلومات حول موازن التحميل الذي استهدفته قاعدة سياسة جدار الحماية. وهذا مشابه لتنسيق الحقل InstanceDetails عند استهداف مثيلات الأجهزة الافتراضية في قواعد سياسة جدار الحماية.

  • تعرض load_balancer_details.forwarding_rule_name قاعدة إعادة التوجيه المستهدَفة لقاعدة سياسة جدار الحماية
  • يشير load_balancer_details.type إلى نوع موازن التحميل المستند إلى الخادم الوكيل المستهدف
  • تسجّل load_balancer_details.url_map_name مورد خريطة عناوين URL المستخدَم عندما يكون النوع موازن تحميل تطبيق

عرض السجلات

استخدِم طلب بحث في سجلّات جدار الحماية للاطّلاع على نتائج قواعد سياسة جدار الحماية.

gcloud logging read \
  "logName=projects/${PROJECT_ID}/logs/compute.googleapis.com%2Ffirewall \
  AND (jsonPayload.connection.src_ip=\"${VM_ALLOW_IP}\" OR jsonPayload.connection.src_ip=\"${VM_DENY_IP}\")" \
  --project=${PROJECT_ID} \
  --freshness=30m \
  --limit=50 \
  --format="table(
    timestamp:label=TIMESTAMP,
    jsonPayload.connection.src_ip:label=SRC_IP,
    jsonPayload.connection.src_port:label=SRC_PORT,
    jsonPayload.connection.dest_ip:label=DEST_IP,
    jsonPayload.connection.dest_port:label=DEST_PORT,
    jsonPayload.disposition:label=ACTION,
    jsonPayload.rule_details.priority:label=PRIORITY,
    jsonPayload.load_balancer_details.forwarding_rule_name:label=FWD_RULE
  )"

تعرض نتيجة السجلّ القواعد السارية التي تفرضها السياسة:

  • يتم السماح بجميع زيارات vm-allow إلى جميع موازنات التحميل بموجب القاعدة 2011
  • يتم رفض جميع الزيارات المتّجهة إلى موازنات التحميل بموجب القاعدة 2998
TIMESTAMP                       SRC_IP     SRC_PORT  DEST_IP     DEST_PORT  ACTION   PRIORITY  FWD_RULE
YYYY-MM-DDTHH:MM:SS.850967068Z  10.0.0.11  48480     10.0.0.103  443        ALLOWED  2003      fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.418613380Z  10.0.0.11  37340     10.0.0.101  80         ALLOWED  2003      fr-foo-www
YYYY-MM-DDTHH:MM:SS.213234118Z  10.0.0.12  55950     10.0.0.103  443        DENIED   2998      fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.981484412Z  10.0.0.11  41738     10.0.0.101  80         ALLOWED  2003      fr-foo-www
YYYY-MM-DDTHH:MM:SS.189358071Z  10.0.0.12  55950     10.0.0.103  443        DENIED   2998      fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.061463883Z  10.0.0.12  55950     10.0.0.103  443        DENIED   2998      fr-foo-gcs
YYYY-MM-DDTHH:MM:SS.965498098Z  10.0.0.12  53284     10.0.0.102  8080       DENIED   2998      fr-foo-api

يمكن أيضًا عرض السجلّات في Google Cloud Console باستخدام "مستكشف السجلّات". انتقِل إلى console.cloud.google.com/logs/query واستخدِم سجلّ جدار الحماية العادي في شبكة VPC compute.googleapis.com/firewall.

logName=projects/${PROJECT_ID}/logs/compute.googleapis.com%2Ffirewall

بهذا نكون قد انتهينا من جزء التسجيل... لننتقل إلى التنظيف!

9- تنظيف

# delete client compute resources
gcloud -q compute instances delete vm-deny --zone=${ZONE_1}

gcloud -q compute instances delete vm-allow --zone=${ZONE_1}

# next
# delete load balancer resources for gcs
gcloud -q compute forwarding-rules delete fr-foo-gcs --region=${REGION_1}

gcloud -q compute target-https-proxies delete proxy-foo-gcs --region=${REGION_1}

gcloud -q compute url-maps delete ilb-foo-gcs --region=${REGION_1}

gcloud -q compute backend-services delete bes-foo-gcs --region=${REGION_1}

gcloud -q compute addresses delete vip-foo-gcs --region=${REGION_1}

# next
# delete load balancer resources for api
gcloud -q compute forwarding-rules delete fr-foo-api --region=${REGION_1}

gcloud -q compute target-http-proxies delete proxy-foo-api --region=${REGION_1}

gcloud -q compute url-maps delete ilb-foo-api --region=${REGION_1}

gcloud -q compute backend-services delete bes-foo-api --region=${REGION_1}

gcloud -q compute health-checks delete hc-foo-api --region=${REGION_1}

gcloud -q compute addresses delete vip-foo-api --region=${REGION_1}

# next
# delete load balancer resources for www
gcloud -q compute forwarding-rules delete fr-foo-www --region=${REGION_1}

gcloud -q compute target-http-proxies delete proxy-foo-www --region=${REGION_1}

gcloud -q compute url-maps delete ilb-foo-www --region=${REGION_1}

gcloud -q compute backend-services delete bes-foo-www --region=${REGION_1}

gcloud -q compute health-checks delete hc-foo-www --region=${REGION_1}

gcloud -q compute addresses delete vip-foo-www --region=${REGION_1}

# next
# delete service backend resources
gcloud -q storage rm --recursive gs://${BUCKET}

gcloud -q certificate-manager certificates delete cert-foo-gcs --location=${REGION_1}

gcloud -q compute network-endpoint-groups delete neg-psc-gcs --region=${REGION_1}

gcloud -q compute instance-groups managed delete mig-foo --region=${REGION_1}

gcloud -q compute instance-templates delete mig-template-foo --global

# next
# delete dns, nat, fw resources
gcloud -q dns record-sets delete gcs.foo.com --type=A --zone=zone-foo

gcloud -q dns record-sets delete api.foo.com --type=A --zone=zone-foo

gcloud -q dns record-sets delete www.foo.com --type=A --zone=zone-foo

gcloud -q dns managed-zones delete zone-foo

gcloud -q compute routers delete cr-nat-foo --region=${REGION_1}

gcloud -q compute network-firewall-policies associations delete \
  --firewall-policy=fw-policy-foo-${REGION_1} \
  --name=fw-policy-association-foo-${REGION_1} \
  --firewall-policy-region=${REGION_1}

gcloud -q compute network-firewall-policies delete fw-policy-foo-${REGION_1} --region=${REGION_1}

gcloud -q network-security address-groups delete uhc-probes --location=${REGION_1}

# next
# delete network resources
gcloud -q compute networks subnets delete subnet-foo-3 --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-foo-2 --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-foo-1 --region=${REGION_1}

gcloud -q compute networks delete vnet-foo

# next
# delete shell variables and local files
unset PROJECT_ID REGION_1 ZONE_1 VM_ALLOW_IP VM_DENY_IP BUCKET

rm vm-server-startup.sh create_lbs.sh foo-gcs-key.pem foo-gcs-cert.pem

# end

10. الخاتمة

تهانينا! لقد أعددتَ Essentials في Cloud NGFW لأجهزة موازنة الحمل بنجاح.

يمكنك تقديم أي تعليقات أو أسئلة أو تصحيحات باستخدام نموذج الملاحظات هذا.

شكرًا