۱. مقدمه
سیاستهای فایروال شبکه
فایروالها بلوکهای سازندهی اساسی برای یک محیط ابری امن هستند. پیش از این، ما سیاستهای فایروال را در سطح سازمان و پوشه معرفی میکردیم، در حالی که فایروالهای VPC بدون تغییر باقی میماندند. در این نسخه، ما قصد داریم ساختار سیاست فایروال را تا سطح VPC گسترش دهیم و چندین پیشرفت در پشتیبانی از سیاست فایروال فعلی ایجاد کنیم تا یک پشتیبانی فایروال یکپارچه در سراسر سلسله مراتب منابع Google Cloud و تجربه کاربری مداوم در مدیریت کنترل سیاست فایروال خود به روشی امن، انعطافپذیر و مقیاسپذیر ارائه دهیم.
سیاست فایروال شبکه به عنوان ظرفی برای قوانین فایروال عمل میکند. قوانین تعریف شده در یک سیاست فایروال شبکه تا زمانی که این سیاست با یک شبکه VPC مرتبط نشود، در هیچ کجا اجرا نمیشوند. هر شبکه VPC میتواند یک سیاست فایروال شبکه مرتبط با خود داشته باشد. سیاستهای فایروال شبکه از برچسبهای (یا فقط برچسبها) تحت مدیریت IAM در قوانین فایروال پشتیبانی میکنند که جایگزین برچسبهای شبکه فعلی میشوند و میتوانند برای ارائه هویت به بار کاری مورد استفاده قرار گیرند.
اشتراکگذاری سیاست فایروال شبکه در سراسر شبکهها و ادغام با تگهای تحت مدیریت IAM، پیکربندی و مدیریت فایروالها را تا حد زیادی ساده میکند.
با معرفی سیاست فایروال شبکه، سیاستهای فایروال گوگل کلود اکنون از اجزای زیر تشکیل شده است:
- سیاست سلسله مراتبی فایروال
- قوانین فایروال VPC
- سیاست فایروال شبکه ( جهانی و منطقهای )
سیاستهای سلسله مراتبی فایروال در گرههای سازمان و پوشه در سلسله مراتب منابع پشتیبانی میشوند، در حالی که قوانین فایروال VPC و سیاستهای فایروال شبکه در سطح VPC اعمال میشوند. تفاوت بزرگ بین قوانین فایروال VPC و سیاستهای فایروال شبکه این است که قوانین فایروال VPC فقط میتوانند به یک شبکه VPC واحد اعمال شوند، در حالی که سیاستهای فایروال شبکه میتوانند به یک VPC واحد یا گروهی از VPCها متصل شوند، از جمله مزایای دیگر مانند بهروزرسانی دستهای.
در نهایت، ما همچنین قوانین ضمنی فایروال را داریم که با هر شبکه VPC همراه است:
- یک قانون خروج که اقدام آن allow و مقصد آن 0.0.0.0/0 است.
- یک قانون ورود که عمل آن deny و منبع آن 0.0.0.0/0 است.
به طور پیش فرض، توالی اجرای در نمودار زیر نشان داده شده است:

لطفاً توجه داشته باشید که دستور اجرایی بین قوانین فایروال VPC و سیاست فایروال شبکه جهانی قابل جابجایی است. مشتریان میتوانند دستور اجرایی را در هر زمان با یک دستور gcloud مشخص کنند.
برچسبها
تگهای جدیدی که در قوانین سیاست فایروال شبکه ادغام شدهاند، منابع جفت کلید-مقدار هستند که در سطح سازمانی سلسله مراتب منابع Google Cloud تعریف شدهاند. چنین تگی، همانطور که از نامش پیداست، حاوی یک کنترل دسترسی IAM است که مشخص میکند چه کسی میتواند چه کاری را روی تگ انجام دهد. به عنوان مثال، مجوزهای IAM به فرد اجازه میدهد مشخص کند کدام مدیران میتوانند مقادیر را به تگها اختصاص دهند و کدام مدیران میتوانند تگها را به منابع متصل کنند. پس از اعمال یک تگ به یک منبع، قوانین فایروال شبکه میتوانند از آن برای اجازه دادن و رد کردن ترافیک استفاده کنند.
تگها از مدل ارثبری منابع گوگل کلود پیروی میکنند، به این معنی که تگها و مقادیر آنها از والدینشان در سلسله مراتب به ارث میرسند. در نتیجه، تگها ممکن است در یک مکان ایجاد شوند و سپس توسط پوشهها و پروژههای دیگر در سراسر سلسله مراتب منابع استفاده شوند. برای جزئیات بیشتر در مورد تگها و محدودیت دسترسی، به این صفحه مراجعه کنید.
برچسبها را نباید با برچسبهای شبکه اشتباه گرفت، دومی رشتههایی هستند که میتوانند به نمونههای Compute Engine اضافه شوند؛ آنها با نمونه مرتبط هستند و با از رده خارج شدن نمونه ناپدید میشوند. قوانین فایروال VPC ممکن است شامل برچسبهای شبکه باشند، اما از آنجایی که آنها به عنوان منابع ابری در نظر گرفته نمیشوند، مشمول کنترل دسترسی IAM نمیشوند.
توجه داشته باشید که برچسبها و برچسبهای تحت مدیریت IAM در این سند به جای یکدیگر استفاده میشوند.
آنچه خواهید ساخت
این آزمایشگاه کد دو بخش دارد - بخش اول سیاستهای فایروال شبکه و برچسبها را با استفاده از یک شبکه VPC واحد نشان میدهد و بخش دوم نحوه استفاده از برچسبها را در شبکههای VPC همتا، مطابق نمودار زیر، نشان میدهد. بنابراین، این آزمایشگاه کد به یک پروژه واحد و توانایی ایجاد چندین شبکه VPC نیاز دارد.

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