السياسة العالمية لجدار الحماية للشبكة مع العلامات

1. مقدمة

سياسات جدار الحماية للشبكة

جدران الحماية هي اللبنات الأساسية لبيئة سحابة إلكترونية آمنة. في السابق، طرحنا سياسات جدار الحماية على مستوى المؤسسة والمجلدات، مع عدم تغيير جدران الحماية المستندة إلى سحابة VPC. في هذا الإصدار، سنوسّع نطاق بنية سياسة جدار الحماية إلى مستوى سحابة VPC، كما سنُجري العديد من التحسينات على الدعم الحالي لسياسة جدار الحماية، وذلك من أجل توفير دعم موحد لجدار الحماية في التدرّج الهرمي لموارد Google Cloud وتقديم تجربة متسقة للمستخدمين في إدارة عناصر التحكم في سياسة جدار الحماية بطريقة آمنة ومرنة وقابلة للتوسع.

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

تؤدي مشاركة سياسة جدار الحماية للشبكة عبر الشبكات والتكامل مع العلامات المُدارة لإدارة الهوية وإمكانية الوصول إلى تبسيط عملية تهيئة جدران الحماية وإدارتها إلى حد كبير.

مع طرح سياسة جدار الحماية للشبكة، أصبحت سياسات جدار الحماية في Google Cloud تتكوّن الآن من العناصر التالية:

  1. سياسة جدار الحماية الهرمي
  2. قواعد جدار الحماية لبرنامج VC
  3. سياسة جدار حماية الشبكة ( عالمية وإقليمية)

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

أخيرًا، لدينا أيضًا قواعد جدار الحماية الضمنية التي تأتي مع كل شبكة VPC:

  • قاعدة خروج تم السماح بإجراءها، وتكون الوجهة 0.0.0.0/0
  • قاعدة دخول يتم الرفض من خلالها، حيث يكون المصدر 0.0.0.0/0

يتم عرض تسلسل إجراء التنفيذ تلقائيًا في المخطّط البياني التالي:

abae4597af782b2b.png

يُرجى ملاحظة أنّه يمكن تبديل ترتيب التنفيذ بين قواعد جدار حماية VPC وسياسة جدار الحماية للشبكة العامة. يمكن للعملاء تحديد أمر التنفيذ في أي وقت باستخدام أمر gcloud.

العلامات

العلامات المُدمَجة في قواعد سياسة جدار الحماية للشبكة الجديدة هي موارد زوجية من المفتاح/القيمة تم تحديدها على مستوى المؤسسة في التدرّج الهرمي لموارد Google Cloud. تحتوي مثل هذه العلامة على عنصر تحكم وصول "إدارة الهوية وإمكانية الوصول" (IAM)، كما يوحي الاسم، يحدد الشخص الذي يمكنه اتخاذ الإجراءات على العلامة. وعلى سبيل المثال، تتيح أذونات "إدارة الهوية وإمكانية الوصول" (IAM) للمسؤول تحديد المبادئ الرئيسية التي يمكنها تخصيص قيم للعلامات والسمات الرئيسية التي يمكنها إرفاق العلامات بالموارد. بعد تطبيق علامة على مورد، يمكن لقواعد جدار الحماية للشبكة استخدامها للسماح بالزيارات ورفضها.

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

يجب عدم الخلط بين العلامات وعلامات الشبكة، إذ إنّها سلاسل يمكن إضافتها إلى مثيلات Compute Engine، ترتبط بالمثيل وتختفي عند إيقاف المثيل. قد تتضمّن قواعد جدار الحماية من سحابة VPC علامات شبكة، ولكن لا يتم اعتبارها موارد السحابة الإلكترونية، وبالتالي لا تخضع للتحكم في الوصول إلى "إدارة الهوية وإمكانية الوصول".

يُرجى العلم أنّ العلامات والعلامات المُدارة لإدارة الهوية وإمكانية الوصول تُستخدَم بالتبادل في هذا المستند.

ما الذي ستنشئه

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

b9acf9823df8be04.jpeg

المعلومات التي ستطّلع عليها

  • كيفية إنشاء سياسة جدار حماية للشبكة
  • كيفية إنشاء العلامات واستخدامها بسياسة جدار الحماية للشبكة
  • كيفية استخدام العلامات على تبادل المعلومات بين شبكات VPC

المتطلبات

  • مشروع Google Cloud
  • معرفة نشر المثيلات وتهيئة مكونات الشبكة
  • معرفة إعدادات جدار الحماية سحابة VPC

2. قبل البدء

إنشاء/تعديل المتغيّرات

يستخدم هذا الدرس التطبيقي حول الترميز $variables للمساعدة في تنفيذ إعدادات gcloud في Cloud Shell.

داخل Cloud Shell، يمكنك تنفيذ ما يلي:

gcloud config set project [project-id]
export project_id=`gcloud config list --format="value(core.project)"`
export org_id=[org]
export region=us-central1
export zone=us-central1-a
export prefix=fwpolicy

3- إنشاء شبكة VPC وشبكة فرعية

شبكة VC

إنشاء fwpolicy-vpc1:

gcloud compute networks create $prefix-vpc1 --subnet-mode=custom 

الشبكات الفرعية

أنشئ الشبكات الفرعية المعنية في المنطقة المحددة:

gcloud compute networks subnets create $prefix-vpc1-subnet \
   --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region

Cloud NAT

أنشئ أجهزة توجيه السحابة الإلكترونية وبوابات "ترجمة عنوان الشبكة" في السحابة الإلكترونية لـ fwpolicy-pc1:

gcloud compute routers create $prefix-vpc1-cr \
  --region=$region --network=$prefix-vpc1

gcloud compute routers nats create $prefix-vpc1-cloudnat \
   --router=$prefix-vpc1-cr --router-region=$region \
   --auto-allocate-nat-external-ips \
   --nat-all-subnet-ip-ranges

4. إنشاء مثيلات

أنشئ قاعدة جدار حماية تسمح بدخول حركة بيانات SSH الواردة من نطاقات عمليات الشراء داخل التطبيق في حال لم يتم تحديدها بعد كجزء من إعداد الشراء داخل التطبيق:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc1 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

أنشئ مثيلات العميل وخادم الويب fwpolicy-vpc1:

gcloud compute instances create $prefix-vpc1-www \
   --subnet=$prefix-vpc1-subnet --no-address --zone $zone \
   --metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'

gcloud compute instances create $prefix-vpc1-client \
    --subnet=$prefix-vpc1-subnet --no-address --zone $zone

بسبب عدم توفّر قواعد جدار حماية VPC محدّدة (بخلاف قاعدة السماح SSH التي كان يجب إنشاؤها عند ضبط الشراء داخل التطبيق مع بداية هذا القسم)، ويتم تلقائيًا رفض جميع زيارات الدخول، لن تتمكّن مثيلات العميل من الوصول إلى خوادم الويب المعنيّة. للتحقّق من انتهاء مهلة الطلب، افتح نافذة جديدة وابدأ جلسة SSH على المثيل fwpolicy-vpc1-client وجرِّب خادم الويب:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

المخرجات المتوقعة:

curl: (28) Connection timed out after 2001 milliseconds

اختياريًا، تحقَّق من عدم توفّر قواعد جدار حماية VPC محدّدة لـ fwpolicy-vpc1 من خلال Cloud Shell:

gcloud compute firewall-rules list --filter="network:$prefix-vpc1"

5- السياسة العامة لجدار الحماية للشبكة الشبكية

إنشاء سياسة عامة لجدار الحماية للشبكة:

gcloud compute network-firewall-policies create \
   $prefix-example --description \
   "firewall-policy-description" --global

إضافة قاعدة تسمح بزيارات الويب:

gcloud compute network-firewall-policies rules create 500 \
    --action allow \
    --description "allow-web" \
    --layer4-configs tcp:80,tcp:443 \
    --firewall-policy $prefix-example \
    --src-ip-ranges 10.0.0.0/16 \
    --global-firewall-policy --enable-logging

وصف سياسة جدار الحماية للشبكة وتحقَّق من أن القاعدة تم added بنجاح:

gcloud compute network-firewall-policies describe \
    $prefix-example --global

الناتج المتوقّع (مرِّر للأعلى إلى بداية الناتج، مع العلم أنّه يتم أيضًا عرض القواعد الضمنية):

creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
  description: allow-web
  direction: INGRESS
  disabled: false
  enableLogging: true
  kind: compute#firewallPolicyRule
  match:
    layer4Configs:
    - ipProtocol: tcp
      ports:
      - '80'
    - ipProtocol: tcp
      ports:
      - '443'
    srcIpRanges:
    - 10.0.0.0/16
  priority: 500
  ruleTupleCount: 5
...

اربط سياسة جدار الحماية للشبكة بـ fwpolicy-vpc1:

gcloud compute network-firewall-policies associations create \
     --firewall-policy $prefix-example \
     --network $prefix-vpc1 \
     --name $prefix-vpc1-association \
     --global-firewall-policy

تحقَّق من تطبيقه بنجاح على شبكة fwpolicy-vpc1:

gcloud compute networks get-effective-firewalls $prefix-vpc1

الناتج المتوقَّع (يُرجى العلم أنّه في حال توفُّر سياسات جدار حماية هرمي لها الأولوية، سيتم عرض القواعد ذات الصلة في أعلى الصفحة):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

تحقَّق من أنّه تم تطبيقه بنجاح على خادم الويب fwpolicy-vpc1:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

تشبه النتيجة المتوقعة للأمر السابق (fwpolicy-vpc1 جدران الحماية الفعالة):

TYPE                     FIREWALL_POLICY_NAME     PRIORITY    ACTION     DIRECTION  IP_RANGES
network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

ارجِع إلى جلسة بروتوكول النقل الآمن (SSH) لـ vpc1-client وجرِّب إجراء تجعيد الصوت مرة أخرى (يُرجى العلم أنّ الأمر أدناه يفترض أنّه تم استخدام fwpolicy كبادئة، لذا يُرجى تعديل الأمر curl وفقًا لذلك في حال استخدام اسم مختلف):

user@vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
Page on vpc1-www in network vpc1 zone us-central1-a

من Cloud Shell، تحقَّق من تطبيق سياسة جدار الحماية للشبكة على fwpolicy-vpc1:

gcloud compute network-firewall-policies describe \
   $prefix-example --global

الناتج المتوقّع (مرِّر للأعلى إلى بداية الإخراج):

---
associations:
- attachmentTarget: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/fwpolicy-vpc1
  name: fwpolicy-vpc1-association
...

6- علامات إدارة الهوية وإمكانية الوصول

العلامة هي زوج المفتاح/القيمة التي يمكن إرفاقها بمؤسسة أو مجلد أو مشروع. راجِع إنشاء العلامات وإدارتها والأذونات المطلوبة للحصول على مزيد من التفاصيل.

يتيح لك دور TagAdmin إنشاء علامات جديدة وتعديل العلامات الحالية وحذفها. ويمكن لمشرف المؤسسة منح هذا الدور. من Cloud Shell، عدِّل سياسة "إدارة الهوية وإمكانية الوصول" لإضافة دور "مشرف العلامة" إلى المستخدِم. استخدِم صفحة مرجع الأذونات لمعرفة الأذونات التي يتم تضمينها في كل دور محدَّد مسبقًا.

gcloud organizations add-iam-policy-binding $org_id \
  --member user:[user@example.com] --role roles/resourcemanager.tagAdmin

شغِّل الأمر أدناه للتحقّق من المستخدمين الذين لديهم دور resourcesmanager.tagAdmin:

gcloud organizations get-iam-policy $org_id --flatten=bindings \
  --filter=bindings.role:roles/resourcemanager.tagAdmin

إنشاء مفتاح علامة جديد:

gcloud resource-manager tags keys create tags-vpc1 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc1

المخرجات المتوقعة:

Waiting for TagKey [tags-vpc1] to be created...done.                                                                                                                
createTime: '2022-09-23T20:49:01.162228Z'
etag: PwvmFuHO4wK1y6c5Ut2n5w==
name: tagKeys/622132302133
namespacedName: ORGANIZATION_ID/tags-vpc1
parent: organizations/ORGANIZATION_ID
purpose: GCE_FIREWALL
purposeData:
  network: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/6749205358365096383
shortName: tags-vpc1
updateTime: '2022-09-23T20:49:03.873776Z'

إنشاء قيم علامات جديدة:

gcloud resource-manager tags values create web-servers \
   --parent=$org_id/tags-vpc1

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc1

تحقَّق من إنشاء قيم العلامات بنجاح:

gcloud resource-manager tags values list \
   --parent=$org_id/tags-vpc1

المخرجات المتوقعة:

NAME                    SHORT_NAME   DESCRIPTION
tagValues/349564376683  web-servers
tagValues/780363571446  web-clients

من Cloud Shell، يمكنك وصف قاعدة سياسة جدار الحماية للشبكة الحالية للتأكُّد من عدم استخدام العلامات:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

المخرجات المتوقعة:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
priority: 500
ruleTupleCount: 5

من Cloud Shell، عدِّل القاعدة للسماح بالزيارات الواردة من مفتاح العلامة vpc1-tags/web-clients فقط، وتثبيت القاعدة على المثيلات باستخدام مفتاح العلامة vpc1-tags/web-servers.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients \
    --target-secure-tags $org_id/tags-vpc1/web-servers \
    --global-firewall-policy

من Cloud Shell، يمكنك وصف قاعدة سياسة جدار الحماية للشبكة الحالية للتأكّد من أنّه تم تطبيق العلامات بنجاح وأنّه يتم إعداد تقارير عنها بأنّها مؤثرة:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

المخرجات المتوقعة:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcIpRanges:
  - 10.0.0.0/16
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

من Cloud Shell، تأكَّد من تطبيق القاعدة على vpc1:

gcloud compute networks get-effective-firewalls $prefix-vpc1

المخرجات المتوقعة:

network-firewall-policy  fwpolicy-example      500         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

تأكَّد من أنّه على الرغم من أنّ سياسة جدار الحماية للشبكة لا تزال مرتبطة بشبكة VPC، لم تعُد القاعدة التي تسمح بزيارات الويب سارية على خادم الويب، لأنّه لم تتم إضافة العلامة إلى المثيلات:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

الإخراج المتوقع (لاحظ أنه لا يتم عرض قاعدة جدار الحماية ذات الأولوية 500):

network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

امنح دور "مستخدم العلامة" إلى العلامة والمستخدم المحدَّدين. استخدِم صفحة مرجع الأذونات لمعرفة الأذونات التي يتم تضمينها في كل دور محدَّد مسبقًا.

gcloud resource-manager tags keys add-iam-policy-binding \
  $org_id/tags-vpc1 \
  --member user:[email] --role roles/resourcemanager.tagUser

gcloud projects add-iam-policy-binding $project_id \
  --member user:[email] --role roles/resourcemanager.tagUser

تأكَّد من إضافة الدور بنجاح:

gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1

gcloud projects get-iam-policy $project_id --flatten=bindings \
   --filter=bindings.role:roles/resourcemanager.tagUser

المخرجات المتوقعة:

bindings:
- members:
  - user:[user]
  role: roles/resourcemanager.tagUser
...

طبِّق العلامة على المثيل fwpolicy-vpc1-www:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-servers \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www

المخرجات المتوقعة:

Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34
9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done.                                                                            
done: true
metadata:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata
name: operations/rctb.us-central1-a.6144808968019372877
response:
  '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding
  name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683
  parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502
  tagValue: tagValues/349564376683

التحقّق من عمليات الربط:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www 

المخرجات المتوقعة:

namespacedTagKey: ORGANIZATION_ID/tags-vpc1
namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers
tagKey: tagKeys/622132302133
tagValue: tagValues/349564376683

تحقق من قواعد جدار الحماية الفعالة مرة أخرى:

gcloud compute instances network-interfaces \
   get-effective-firewalls $prefix-vpc1-www --zone $zone

المخرجات المتوقعة:

network-firewall-policy  fwpolicy-example      490         ALLOW      INGRESS    10.0.0.0/16
network-firewall-policy  fwpolicy-example      2147483645  GOTO_NEXT  INGRESS    ::/0
network-firewall-policy  fwpolicy-example      2147483647  GOTO_NEXT  INGRESS    0.0.0.0/0
network-firewall-policy  fwpolicy-example      2147483644  GOTO_NEXT  EGRESS     ::/0
network-firewall-policy  fwpolicy-example      2147483646  GOTO_NEXT  EGRESS     0.0.0.0/0

عُد إلى علامة تبويب جلسة بروتوكول النقل الآمن (SSH) fwpolicy-vpc1-client وحاوِل تنفيذ ما يلي:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

هل تمكنت من الاتصال؟

للتحقّق من ذلك، عليك تعديل القاعدة لإزالة معايير CIDR المصدر من خلال Cloud Shell.

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-ip-ranges "" \
    --global-firewall-policy

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

ارجِع إلى علامة تبويب جلسة SSH fwpolicy-vpc1-client ثم أعِد المحاولة:

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

من المفترض أن تنتهي مهلة الاتصال هذه المرة، نظرًا لعدم إضافة العلامة إلى fwpolicy-vpc1-client. من Cloud Shell، أضِفه وأعِد المحاولة.

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc1/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client

عد إلى علامة تبويب جلسة SSH fwpolicy-vpc1-client ثم أعِد المحاولة، من المفترض أن تتم العملية بنجاح.

user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2

7. العلامات المُدارة لإدارة الهوية وإمكانية الوصول مقابل تبادل المعلومات بين شبكات VPC

من Cloud Shell، أنشِئ شبكة VPC وشبكة فرعية وعميل جديدة، واضبط تبادل المعلومات بين الشبكات في VPC بين الشبكتين:

gcloud compute networks create $prefix-vpc2 --subnet-mode=custom 

gcloud compute networks subnets create $prefix-vpc2-subnet \
   --range=10.0.1.0/24 --network=$prefix-vpc2 --region=$region

gcloud compute instances create $prefix-vpc2-client \
   --subnet=$prefix-vpc2-subnet --no-address --zone $zone

gcloud compute networks peerings create vpc1-to-vpc2 \
   --network=$prefix-vpc1 \
   --peer-project $project_id \
   --peer-network $prefix-vpc2

gcloud compute networks peerings create vpc2-to-vpc1 \
    --network=$prefix-vpc2 \
    --peer-project $project_id \
    --peer-network $prefix-vpc1

أنشئ قاعدة جدار حماية تسمح بدخول حركة بيانات SSH الواردة من نطاقات عمليات الشراء داخل التطبيق في حال لم يتم تحديدها بعد كجزء من إعداد الشراء داخل التطبيق:

gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc2 \
  --direction=INGRESS \
  --action=allow \
  --network=$prefix-vpc2 \
  --rules=tcp:22 \
  --source-ranges=35.235.240.0/20

على الرغم من أنّ العلامات هي عناصر على مستوى المؤسسة، فإنّ مفاتيح العلامات مرتبطة بوحدة VPC معيّنة، وبالتالي لا يمكن تطبيقها على المثيلات في شبكات مختلفة. بالتالي، يجب إنشاء مفتاح علامة جديد وقيمة تنطبق على الإصدار vpc2:

gcloud resource-manager tags keys create tags-vpc2 \
   --parent organizations/$org_id \
   --purpose GCE_FIREWALL \
   --purpose-data network=$project_id/$prefix-vpc2

gcloud resource-manager tags values create web-clients \
   --parent=$org_id/tags-vpc2

طبِّق العلامة الجديدة على المثيل fwpolicy-vpc2-client:

gcloud resource-manager tags bindings create \
  --location $zone \
  --tag-value $org_id/tags-vpc2/web-clients \
  --parent \
//compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

يمكنك اختياريًا إدراج روابط fwpolicy-vpc2-client:

gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc2-client

المخرجات المتوقعة:

namespacedTagKey: ORGANIZATION_ID/tags-vpc2
namespacedTagValue: ORGANIZATION_ID/tags-vpc2/web-clients
tagKey: tagKeys/916316350251
tagValue: tagValues/633150043992

من Cloud Shell، يمكنك وصف قاعدة سياسة جدار الحماية للشبكة الحالية للتأكُّد من عدم استخدام العلامات الجديدة:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

المخرجات المتوقعة:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
priority: 500
ruleTupleCount: 6
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

عدِّل قاعدة جدار الحماية الحالية من أجل السماح بالعلامات من شبكة VPC المتبادلة بين الشبكات:

gcloud compute network-firewall-policies rules update 500 \
    --firewall-policy $prefix-example \
    --src-secure-tags $org_id/tags-vpc1/web-clients,$org_id/tags-vpc2/web-clients \
    --global-firewall-policy

صف قاعدة جدار الحماية للتأكد من تطبيقها بنجاح والإبلاغ عنها بأنها فعالة:

gcloud compute network-firewall-policies rules describe 500 \
    --firewall-policy $prefix-example \
    --global-firewall-policy

المخرجات المتوقعة:

---
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
  layer4Configs:
  - ipProtocol: tcp
    ports:
    - '80'
  - ipProtocol: tcp
    ports:
    - '443'
  srcSecureTags:
  - name: tagValues/479619031616
    state: EFFECTIVE
  - name: tagValues/633150043992
    state: EFFECTIVE
priority: 500
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
  state: EFFECTIVE

يمكنك معرفة عنوان IP لـ fwpolicy-vpc1-www من خلال الأمر gcloud أدناه:

gcloud compute instances list --filter=vpc1-www

اتصِل بـ fwpolicy-vpc2-client من خلال SSH وجرِّب عنوان IP لـ fwpolicy-vpc1:

user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2

من المفترض أن يكون بإمكانك الاتصال بخادم fwpolicy-vpc1-www. انتقِل إلى القسم التالي للتعرّف على خطوات إزالة البرامج غير المرغوب فيها.

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

من Cloud Shell، أزِل المثيلات وCloud NAT وCloud Router:

gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone

gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone

gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \
--router=$prefix-vpc1-cr --router-region=$region

gcloud -q compute routers delete $prefix-vpc1-cr --region=$region

إزالة سياسة جدار الحماية للشبكة العامة والعلامات:

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc2/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc2

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-servers

gcloud -q resource-manager tags values delete \
   $org_id/tags-vpc1/web-clients

gcloud -q resource-manager tags keys delete $org_id/tags-vpc1

gcloud -q compute network-firewall-policies associations delete \
     --firewall-policy $prefix-example \
     --name $prefix-vpc1-association \
     --global-firewall-policy

gcloud -q compute network-firewall-policies delete \
   $prefix-example --global

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1

gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2

نفِّذ الخطوات التالية في حال تغيير دورتَي TagAdmin وtagUsers:

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagAdmin

gcloud organizations remove-iam-policy-binding $org_id \
  --member user:[email] --role roles/resourcemanager.tagUser

أخيرًا، أزِل شبكات سحابة VPC والشبكات الفرعية وشبكات VPC:

gcloud -q compute networks peerings delete vpc1-to-vpc2 \
    --network $prefix-vpc1

gcloud -q compute networks peerings delete vpc2-to-vpc1 \
    --network $prefix-vpc2

gcloud -q compute networks subnets delete $prefix-vpc1-subnet \
    --region $region

gcloud -q compute networks subnets delete $prefix-vpc2-subnet \
    --region $region

gcloud -q compute networks delete $prefix-vpc1

gcloud -q compute networks delete $prefix-vpc2

9. تهانينا!

تهانينا، لقد تمت تهيئة سياسة جدار حماية الشبكة العامة والتحقّق منها بنجاح من خلال إعداد العلامات.