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

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 ممکن است شامل برچسب های شبکه باشد، اما از آنجایی که آنها به عنوان منابع ابری در نظر گرفته نمی شوند، تحت کنترل دسترسی IAM نیستند.

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

چیزی که خواهی ساخت

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

b9acf9823df8be04.jpeg

چیزی که یاد خواهید گرفت

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

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

  • پروژه Google Cloud
  • دانش استقرار نمونه ها و پیکربندی اجزای شبکه
  • دانش پیکربندی فایروال VPC

2. قبل از شروع

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

این کد لبه از متغیرهای $ برای کمک به پیاده سازی پیکربندی 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 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 راه اندازی کنید و سعی کنید وب سرور را خم کنید:

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. برچسب های تحت کنترل IAM

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

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

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

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

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

7. برچسب های تحت کنترل IAM از طریق همتاسازی شبکه VPC

از 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

IP fwpolicy-vpc1-www را از طریق دستور gcloud زیر بیابید:

gcloud compute instances list --filter=vpc1-www

از طریق SSH به fwpolicy-vpc2-client متصل شوید و سعی کنید 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 را حذف کنید:

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. تبریک می گویم!

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

،

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 ممکن است شامل برچسب های شبکه باشد، اما از آنجایی که آنها به عنوان منابع ابری در نظر گرفته نمی شوند، تحت کنترل دسترسی IAM نیستند.

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

چیزی که خواهی ساخت

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

b9acf9823df8be04.jpeg

چیزی که یاد خواهید گرفت

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

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

  • پروژه Google Cloud
  • دانش استقرار نمونه ها و پیکربندی اجزای شبکه
  • دانش پیکربندی فایروال VPC

2. قبل از شروع

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

این کد لبه از متغیرهای $ برای کمک به پیاده سازی پیکربندی 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 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 راه اندازی کنید و سعی کنید وب سرور را خم کنید:

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. برچسب های تحت کنترل IAM

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

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

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

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

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

7. برچسب های تحت کنترل IAM از طریق همتاسازی شبکه VPC

از 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

IP fwpolicy-vpc1-www را از طریق دستور gcloud زیر بیابید:

gcloud compute instances list --filter=vpc1-www

از طریق SSH به fwpolicy-vpc2-client متصل شوید و سعی کنید 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 را حذف کنید:

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. تبریک می گویم!

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