خط مشی فایروال شبکه جهانی با برچسب ها، سیاست فایروال شبکه جهانی با برچسب ها

۱. مقدمه

سیاست‌های فایروال شبکه

فایروال‌ها بلوک‌های سازنده‌ی اساسی برای یک محیط ابری امن هستند. پیش از این، ما سیاست‌های فایروال را در سطح سازمان و پوشه معرفی می‌کردیم، در حالی که فایروال‌های VPC بدون تغییر باقی می‌ماندند. در این نسخه، ما قصد داریم ساختار سیاست فایروال را تا سطح VPC گسترش دهیم و چندین پیشرفت در پشتیبانی از سیاست فایروال فعلی ایجاد کنیم تا یک پشتیبانی فایروال یکپارچه در سراسر سلسله مراتب منابع Google Cloud و تجربه کاربری مداوم در مدیریت کنترل سیاست فایروال خود به روشی امن، انعطاف‌پذیر و مقیاس‌پذیر ارائه دهیم.

سیاست فایروال شبکه به عنوان ظرفی برای قوانین فایروال عمل می‌کند. قوانین تعریف شده در یک سیاست فایروال شبکه تا زمانی که این سیاست با یک شبکه VPC مرتبط نشود، در هیچ کجا اجرا نمی‌شوند. هر شبکه VPC می‌تواند یک سیاست فایروال شبکه مرتبط با خود داشته باشد. سیاست‌های فایروال شبکه از برچسب‌های (یا فقط برچسب‌ها) تحت مدیریت IAM در قوانین فایروال پشتیبانی می‌کنند که جایگزین برچسب‌های شبکه فعلی می‌شوند و می‌توانند برای ارائه هویت به بار کاری مورد استفاده قرار گیرند.

اشتراک‌گذاری سیاست فایروال شبکه در سراسر شبکه‌ها و ادغام با تگ‌های تحت مدیریت IAM، پیکربندی و مدیریت فایروال‌ها را تا حد زیادی ساده می‌کند.

با معرفی سیاست فایروال شبکه، سیاست‌های فایروال گوگل کلود اکنون از اجزای زیر تشکیل شده است:

  1. سیاست سلسله مراتبی فایروال
  2. قوانین فایروال VPC
  3. سیاست فایروال شبکه ( جهانی و منطقه‌ای )

سیاست‌های سلسله مراتبی فایروال در گره‌های سازمان و پوشه در سلسله مراتب منابع پشتیبانی می‌شوند، در حالی که قوانین فایروال VPC و سیاست‌های فایروال شبکه در سطح VPC اعمال می‌شوند. تفاوت بزرگ بین قوانین فایروال VPC و سیاست‌های فایروال شبکه این است که قوانین فایروال VPC فقط می‌توانند به یک شبکه VPC واحد اعمال شوند، در حالی که سیاست‌های فایروال شبکه می‌توانند به یک VPC واحد یا گروهی از VPCها متصل شوند، از جمله مزایای دیگر مانند به‌روزرسانی دسته‌ای.

در نهایت، ما همچنین قوانین ضمنی فایروال را داریم که با هر شبکه VPC همراه است:

  • یک قانون خروج که اقدام آن allow و مقصد آن 0.0.0.0/0 است.
  • یک قانون ورود که عمل آن deny و منبع آن 0.0.0.0/0 است.

به طور پیش فرض، توالی اجرای در نمودار زیر نشان داده شده است:

abae4597af782b2b.png

لطفاً توجه داشته باشید که دستور اجرایی بین قوانین فایروال VPC و سیاست فایروال شبکه جهانی قابل جابجایی است. مشتریان می‌توانند دستور اجرایی را در هر زمان با یک دستور gcloud مشخص کنند.

برچسب‌ها

تگ‌های جدیدی که در قوانین سیاست فایروال شبکه ادغام شده‌اند، منابع جفت کلید-مقدار هستند که در سطح سازمانی سلسله مراتب منابع Google Cloud تعریف شده‌اند. چنین تگی، همانطور که از نامش پیداست، حاوی یک کنترل دسترسی IAM است که مشخص می‌کند چه کسی می‌تواند چه کاری را روی تگ انجام دهد. به عنوان مثال، مجوزهای IAM به فرد اجازه می‌دهد مشخص کند کدام مدیران می‌توانند مقادیر را به تگ‌ها اختصاص دهند و کدام مدیران می‌توانند تگ‌ها را به منابع متصل کنند. پس از اعمال یک تگ به یک منبع، قوانین فایروال شبکه می‌توانند از آن برای اجازه دادن و رد کردن ترافیک استفاده کنند.

تگ‌ها از مدل ارث‌بری منابع گوگل کلود پیروی می‌کنند، به این معنی که تگ‌ها و مقادیر آنها از والدینشان در سلسله مراتب به ارث می‌رسند. در نتیجه، تگ‌ها ممکن است در یک مکان ایجاد شوند و سپس توسط پوشه‌ها و پروژه‌های دیگر در سراسر سلسله مراتب منابع استفاده شوند. برای جزئیات بیشتر در مورد تگ‌ها و محدودیت دسترسی، به این صفحه مراجعه کنید.

برچسب‌ها را نباید با برچسب‌های شبکه اشتباه گرفت، دومی رشته‌هایی هستند که می‌توانند به نمونه‌های Compute Engine اضافه شوند؛ آن‌ها با نمونه مرتبط هستند و با از رده خارج شدن نمونه ناپدید می‌شوند. قوانین فایروال VPC ممکن است شامل برچسب‌های شبکه باشند، اما از آنجایی که آن‌ها به عنوان منابع ابری در نظر گرفته نمی‌شوند، مشمول کنترل دسترسی IAM نمی‌شوند.

توجه داشته باشید که برچسب‌ها و برچسب‌های تحت مدیریت IAM در این سند به جای یکدیگر استفاده می‌شوند.

آنچه خواهید ساخت

این آزمایشگاه کد دو بخش دارد - بخش اول سیاست‌های فایروال شبکه و برچسب‌ها را با استفاده از یک شبکه VPC واحد نشان می‌دهد و بخش دوم نحوه استفاده از برچسب‌ها را در شبکه‌های VPC همتا، مطابق نمودار زیر، نشان می‌دهد. بنابراین، این آزمایشگاه کد به یک پروژه واحد و توانایی ایجاد چندین شبکه VPC نیاز دارد.

b9acf9823df8be04.jpeg

آنچه یاد خواهید گرفت

  • نحوه ایجاد سیاست فایروال شبکه
  • نحوه ایجاد و استفاده از برچسب‌ها با سیاست فایروال شبکه
  • نحوه استفاده از برچسب‌ها از طریق VPC Network Peering

آنچه نیاز دارید

  • پروژه گوگل کلود
  • آشنایی با پیاده‌سازی نمونه‌ها و پیکربندی اجزای شبکه
  • دانش پیکربندی فایروال VPC

۲. قبل از شروع

ایجاد/به‌روزرسانی متغیرها

این آزمایشگاه کد از $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

۳. ایجاد شبکه و زیرشبکه 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

NAT ابری

روترهای ابری و دروازه‌های 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

۴. ایجاد نمونه‌ها

یک قانون فایروال ایجاد کنید که اجازه ورود ترافیک 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 تعریف نشده است (به غیر از قانون allow 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

به صورت اختیاری، از طریق Cloud Shell تأیید کنید که هیچ قانون فایروال VPC برای fwpolicy-vpc1 تعریف نشده است:

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

۵. سیاست فایروال شبکه جهانی

ایجاد یک سیاست فایروال شبکه جهانی:

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 effective firewalls) است:

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
...

۶. تگ‌های تحت مدیریت IAM

یک برچسب (tag) یک جفت کلید-مقدار است که می‌تواند به یک سازمان، پوشه یا پروژه پیوست شود. برای جزئیات بیشتر به ایجاد و مدیریت برچسب‌ها و مجوزهای مورد نیاز مراجعه کنید.

نقش tagAdmin به شما امکان می‌دهد برچسب‌های جدید ایجاد کنید، برچسب‌های موجود را به‌روزرسانی و حذف کنید. یک مدیر سازمان می‌تواند این نقش را اعطا کند. از Cloud Shell، سیاست IAM را به‌روزرسانی کنید تا نقش 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 مرتبط باشد، قانونی که اجازه ترافیک وب را می‌دهد دیگر به سرور وب اعمال نمی‌شود، زیرا Tag به نمونه‌ها اضافه نشده است:

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

خروجی مورد انتظار (توجه داشته باشید که قانون فایروال با اولویت ۵۰۰ نمایش داده نمی‌شود):

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

نقش کاربر برچسب (Tag User) را به برچسب و کاربر خاص اعطا کنید . برای مشاهده مجوزهای هر نقش از پیش تعریف شده، از صفحه مرجع مجوزها استفاده کنید.

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

به برگه fwpolicy-vpc1-client SSH session برگردید و دوباره امتحان کنید، اکنون باید موفق شوید.

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

۷. تگ‌های تحت مدیریت IAM از طریق VPC Network Peering

از Cloud Shell، یک VPC، زیرشبکه و کلاینت جدید ایجاد کنید و VPC Network Peering را بین شبکه‌ها راه‌اندازی کنید:

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

آی‌پی fwpolicy-vpc1-www را از طریق دستور gcloud زیر پیدا کنید:

gcloud compute instances list --filter=vpc1-www

از طریق SSH به fwpolicy-vpc2-client متصل شوید و سعی کنید IP مربوط به fwpolicy-vpc1 را Curl کنید:

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

شما باید بتوانید به سرور fwpolicy-vpc1-www متصل شوید. برای مراحل پاکسازی به بخش بعدی بروید.

۸. مراحل پاکسازی

از 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 Network Peerings، subnets و شبکه‌های 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

۹. تبریک می‌گویم!

تبریک می‌گوییم، شما با موفقیت یک سیاست فایروال شبکه جهانی را با پیکربندی برچسب‌ها پیکربندی و اعتبارسنجی کردید.