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

لمحة عن هذا الدرس التطبيقي حول الترميز
schedule46 دقيقة
subjectتاريخ التعديل الأخير: 10 فبراير 2023
account_circleتأليف: Osvaldo Costa

جدران الحماية هي الوحدات الأساسية لبيئة السحابة الإلكترونية الآمنة. في السابق، طرحنا سياسات جدار الحماية على مستوى المؤسسة والمجلد، مع إبقاء جدران حماية 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. تحتوي هذه العلامة على عنصر تحكّم في الوصول إلى إدارة الهوية وإمكانية الوصول، كما يشير الاسم، والذي يحدّد المستخدمين الذين يمكنهم تنفيذ إجراءات معيّنة على العلامة. على سبيل المثال، تسمح أذونات "إدارة الهوية وإمكانية الوصول" بتحديد المستخدمين الأساسيين الذين يمكنهم منح قيم للعلامات والمستخدمين الأساسيين الذين يمكنهم إرفاق العلامات بالموارد. بعد تطبيق علامة على مورد، يمكن لقواعد جدار حماية الشبكة استخدامها للسماح بمرور البيانات أو رفضها.

تلتزم التصنيفات بنموذج الموارد المكتسَبة في 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 وشبكة فرعية

شبكة 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- العلامات الخاضعة لإدارة "إدارة الهوية وإمكانية الوصول"

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

يتيح لك دور "مشرف العلامات" إنشاء علامات جديدة وتعديل العلامات الحالية وحذفها. يمكن لمشرف المؤسسة منح هذا الدور. من 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- العلامات التي تتبع "إدارة الهوية وإمكانية الوصول" من خلال تبادل المعلومات بين شبكات VPC

من Cloud Shell، أنشئ شبكة سحابة إلكترونية خاصة افتراضية وشبكة فرعية جديدة وإعدادات تبادل المعلومات بين شبكات 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. تهانينا!

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