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

1. مقدمة

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

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

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

إنّ مشاركة سياسة جدار حماية بين الشبكات على مستوى الشبكات ودمجها مع العلامات المُدارة من "إدارة الهوية وإمكانية الوصول" (IAM) يسهّل إلى حدّ كبير عملية إعداد جدران الحماية وإدارتها.

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

  1. سياسة جدار الحماية الهرمية
  2. قواعد جدار الحماية لشبكة VPC
  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
  • معرفة كيفية نشر الآلات الافتراضية وضبط مكونات الشبكة
  • معرفة كيفية ضبط جدار الحماية في شبكة 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 وشبكة فرعية

شبكة السحابة الخاصة الافتراضية (VPC)

أنشئ 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

أنشئ أجهزة توجيه Cloud Router وبوابات 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 الواردة من نطاقات IAP في حال لم يتم تحديدها بعد كجزء من عملية إعداد IAP:

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 التي كان من المفترض أن يتم إنشاؤها عند إعداد IAP وفقًا لبداية هذا القسم)، وبما أنّه يتم تلقائيًا رفض جميع الزيارات الواردة، لن تتمكّن الأجهزة الافتراضية للعميل من الوصول إلى خوادم الويب المعنية. للتأكّد من أنّ الطلب سينتهي مهلته، افتح نافذة جديدة وابدأ جلسة SSH إلى الجهاز الظاهري fwpolicy-vpc1-client وحاوِل إرسال طلب curl إلى خادم الويب:

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 وحاوِل تنفيذ curl مرة أخرى (يُرجى العِلم أنّ الأمر أدناه يفترض استخدام 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. العلامات المُدارة من "إدارة الهوية وإمكانية الوصول" (IAM)

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

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

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

نفِّذ الأمر أدناه للتحقّق من المستخدمين الذين لديهم دور resourcemanager.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 وحاوِل تنفيذ الأمر curl:

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. علامات مُدارة من "إدارة الهوية وإمكانية الوصول" (IAM) عبر تبادل المعلومات بين شبكات 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 الواردة من نطاقات IAP في حال لم يتم تحديدها بعد كجزء من عملية إعداد IAP:

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) وحاوِل تنفيذ الأمر curl على عنوان 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- تهانينا!

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