1. مقدمه
سیاست های فایروال شبکه
فایروال ها بلوک های اساسی برای یک محیط ابری امن هستند. قبلاً، سیاستهای فایروال را در سطح سازمان و پوشه معرفی کردیم، در حالی که فایروالهای VPC را بدون تغییر باقی گذاشتیم. در این نسخه، ما میخواهیم ساختار خطمشی فایروال را تا سطح VPC گسترش دهیم و چندین پیشرفت را در پشتیبانی خطمشی فایروال فعلی انجام دهیم تا پشتیبانی از فایروال یکپارچه در سلسله مراتب منابع Google Cloud و تجربه کاربر ثابت در مدیریت خطمشی فایروال آنها ارائه شود. کنترل به روشی ایمن، انعطاف پذیر و مقیاس پذیر.
خط مشی فایروال شبکه به عنوان محفظه ای برای قوانین فایروال عمل می کند. قوانین تعریف شده در یک خط مشی فایروال شبکه تا زمانی که این خط مشی با شبکه VPC مرتبط نشود، در هیچ کجا اجرا نمی شوند. هر شبکه VPC می تواند یک خط مشی فایروال شبکه مرتبط با خود داشته باشد. خطمشیهای فایروال شبکه از برچسبهای تحت کنترل IAM (یا فقط برچسبها) در قوانین فایروال پشتیبانی میکنند، که جایگزین برچسبهای شبکه فعلی میشوند و میتوانند برای ارائه هویت به حجم کار استفاده شوند.
به اشتراک گذاری یک خط مشی فایروال شبکه در بین شبکه ها و ادغام با برچسب های تحت کنترل IAM، پیکربندی و مدیریت فایروال ها را بسیار ساده می کند.
با معرفی خط مشی فایروال شبکه، خط مشی های فایروال Google Cloud اکنون از اجزای زیر تشکیل شده است:
- خط مشی فایروال سلسله مراتبی
- قوانین فایروال VPC
- خط مشی فایروال شبکه ( جهانی و منطقه ای )
خطمشیهای فایروال سلسله مراتبی در سازمان و گرههای پوشه در سلسله مراتب منابع پشتیبانی میشوند، در حالی که قوانین فایروال VPC و سیاستهای فایروال شبکه در سطح VPC اعمال میشوند. تفاوت بزرگ بین قوانین فایروال VPC و سیاست های فایروال شبکه این است که قوانین فایروال VPC را می توان تنها برای یک شبکه VPC اعمال کرد، در حالی که سیاست های فایروال شبکه می تواند به یک VPC یا گروهی از VPC ها متصل شود، از جمله مزایای دیگری مانند به روز رسانی دسته ای.
در نهایت، ما قوانین فایروال ضمنی را نیز داریم که با هر شبکه VPC همراه است:
- یک قانون خروج که عمل آن مجاز است، مقصد 0.0.0.0/0 است
- یک قانون ورود که عمل آن رد می شود، منبع 0.0.0.0/0 است
به طور پیش فرض، دنباله اجرا در نمودار زیر نشان داده شده است:
لطفاً توجه داشته باشید که دستور اجرایی بین قوانین فایروال VPC و خط مشی فایروال شبکه جهانی قابل تعویض است. مشتریان می توانند در هر زمان با دستور gcloud دستور اجرایی را مشخص کنند.
برچسب ها
برچسبهای جدید که در قوانین خطمشی فایروال شبکه یکپارچه شدهاند، منابع جفت کلید-مقدار هستند که در سطح سازمانی سلسله مراتب منابع Google Cloud تعریف شدهاند. چنین برچسبی همانطور که از نامش پیداست شامل یک کنترل دسترسی IAM است که مشخص میکند چه کسی میتواند چه کاری را روی برچسب انجام دهد. به عنوان مثال، مجوزهای IAM به شخص اجازه می دهد تا مشخص کند که چه اصولی می توانند مقادیری را به برچسب ها اختصاص دهند و چه مدیرانی می توانند برچسب ها را به منابع متصل کنند. هنگامی که یک برچسب بر روی یک منبع اعمال شد، قوانین فایروال شبکه می توانند از آن برای اجازه و رد ترافیک استفاده کنند.
برچسبها به مدل منابع ارثی Google Cloud پایبند هستند، به این معنی که برچسبها و مقادیر آنها در سراسر سلسله مراتب از والدینشان منتقل میشوند. در نتیجه، برچسب ها ممکن است در یک مکان ایجاد شوند و سپس توسط پوشه ها و پروژه های دیگر در سراسر سلسله مراتب منابع استفاده شوند. برای جزئیات بیشتر در مورد برچسب ها و محدودیت دسترسی به این صفحه مراجعه کنید.
برچسب ها را نباید با تگ های شبکه اشتباه گرفت، دومی رشته هایی هستند که می توانند به نمونه های Compute Engine اضافه شوند. آنها با نمونه مرتبط می شوند و زمانی که نمونه از کار افتاده ناپدید می شوند. قوانین فایروال VPC ممکن است شامل برچسب های شبکه باشد، اما از آنجایی که آنها به عنوان منابع ابری در نظر گرفته نمی شوند، تحت کنترل دسترسی IAM نیستند.
توجه داشته باشید که برچسبها و برچسبهای تحت کنترل IAM به جای یکدیگر در این سند استفاده میشوند.
چیزی که خواهی ساخت
این کد لبه دارای دو بخش است - قسمت اول سیاستهای فایروال شبکه و برچسبها را با استفاده از یک شبکه VPC نشان میدهد و دومی نحوه استفاده از برچسبها را در شبکههای VPC همتا مطابق نمودار زیر نشان میدهد. بنابراین، این کد لبه نیاز به یک پروژه واحد و توانایی ایجاد چندین شبکه VPC دارد.
چیزی که یاد خواهید گرفت
- نحوه ایجاد خط مشی فایروال شبکه
- نحوه ایجاد و استفاده از برچسب ها با خط مشی فایروال شبکه
- نحوه استفاده از برچسب ها در شبکه 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. تبریک می گویم!
تبریک می گوییم، شما با موفقیت یک خط مشی فایروال شبکه جهانی را با پیکربندی برچسب ها پیکربندی و تأیید کردید.