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.
הערה: במסמך הזה אנחנו משתמשים לסירוגין במונחים Tags ו-IAM-governed Tags.
מה תפַתחו
ב-codelab הזה יש שני חלקים – בחלק הראשון מוצגות מדיניות חומת אש ותגים ברשת VPC אחת, ובחלק השני מוצג שימוש בתגים ברשתות VPC מקושרות, כמו שמוצג בתרשים שלמטה. לכן, כדי לבצע את ה-Codelab הזה צריך פרויקט יחיד ואפשרות ליצור כמה רשתות VPC.

מה תלמדו
- איך יוצרים מדיניות חומת אש בין רשתות
- איך יוצרים תגים ומשתמשים בהם עם מדיניות חומת אש בין רשתות
- איך משתמשים בתגים בקישור בין רשתות VPC שכנות (peering)
מה תצטרכו
- פרויקט ב-Google Cloud
- ידע בפריסת מופעים ובהגדרת רכיבי רשת
- ידע בהגדרת חומות אש של VPC
2. לפני שמתחילים
יצירה או עדכון של משתנים
ב-Codelab הזה נעשה שימוש במשתנים כדי להקל על הטמעת הגדרות 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
Create fwpolicy-vpc1:
gcloud compute networks create $prefix-vpc1 --subnet-mode=custom
Subnets
יוצרים את רשתות המשנה המתאימות באזור שנבחר:
gcloud compute networks subnets create $prefix-vpc1-subnet \ --range=10.0.0.0/24 --network=$prefix-vpc1 --region=$region
Cloud NAT
יוצרים את ה-Cloud Routers ואת שערי Cloud NAT עבור fwpolicy-pc1:
gcloud compute routers create $prefix-vpc1-cr \ --region=$region --network=$prefix-vpc1 gcloud compute routers nats create $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges
4. יצירת מופעים
יוצרים כלל חומת אש שמאפשר תעבורת נתוני SSH נכנסת מהטווחים של IAP, אם הוא עדיין לא הוגדר כחלק מההגדרה של IAP:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap-vpc1 \ --direction=INGRESS \ --action=allow \ --network=$prefix-vpc1 \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
יוצרים את המכונות של הלקוח fwpolicy-vpc1 ושל שרת האינטרנט:
gcloud compute instances create $prefix-vpc1-www \
--subnet=$prefix-vpc1-subnet --no-address --zone $zone \
--metadata startup-script='#! /bin/bash
apt-get update
apt-get install apache2 -y
a2ensite default-ssl
a2enmod ssl
# Read VM network configuration:
md_vm="http://169.254.169.254/computeMetadata/v1/instance/"
vm_hostname="$(curl $md_vm/name -H "Metadata-Flavor:Google" )"
filter="{print \$NF}"
vm_network="$(curl $md_vm/network-interfaces/0/network \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
vm_zone="$(curl $md_vm/zone \
-H "Metadata-Flavor:Google" | awk -F/ "${filter}")"
# Apache configuration:
echo "Page on $vm_hostname in network $vm_network zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2'
gcloud compute instances create $prefix-vpc1-client \
--subnet=$prefix-vpc1-subnet --no-address --zone $zone
מכיוון שלא הוגדרו כללים של חומת אש ב-VPC (מלבד הכלל שמאפשר SSH, שאמור היה להיווצר כשמגדירים IAP בהתאם לתחילת הקטע הזה), ומכיוון שכל תעבורת הנתונים הנכנסת נדחית כברירת מחדל, מכונות הלקוח לא יוכלו לגשת לשרתי האינטרנט המתאימים. כדי לוודא שהבקשה תסתיים בזמן קצוב לתפוגה, פותחים חלון חדש ומתחילים סשן SSH למכונת fwpolicy-vpc1-client ומנסים להפעיל curl לשרת האינטרנט:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
הפלט אמור להיראות כך:
curl: (28) Connection timed out after 2001 milliseconds
אופציונלי: כדי לוודא שלא הוגדרו כללים של חומת אש ב-VPC עבור fwpolicy-vpc1, מריצים את הפקודה הבאה ב-Cloud Shell:
gcloud compute firewall-rules list --filter="network:$prefix-vpc1"
5. מדיניות חומת אש גלובלית ברשת
יוצרים מדיניות גלובלית של חומת אש ברשת:
gcloud compute network-firewall-policies create \ $prefix-example --description \ "firewall-policy-description" --global
מוסיפים כלל שמאפשר תנועה באינטרנט:
gcloud compute network-firewall-policies rules create 500 \
--action allow \
--description "allow-web" \
--layer4-configs tcp:80,tcp:443 \
--firewall-policy $prefix-example \
--src-ip-ranges 10.0.0.0/16 \
--global-firewall-policy --enable-logging
מתארים את מדיניות חומת האש של הרשת ומוודאים שהכלל added:
gcloud compute network-firewall-policies describe \
$prefix-example --global
הפלט הצפוי (צריך לגלול למעלה לתחילת הפלט; שימו לב שגם הכללים המרומזים מוצגים):
creationTimestamp: '2022-09-23T12:46:53.677-07:00'
description: "firewall-policy-description"
fingerprint: Np1Rup09Amc=
id: '7021772628738421698'
kind: compute#firewallPolicy
name: fwpolicy-example
ruleTupleCount: 13
rules:
- action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: true
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcIpRanges:
- 10.0.0.0/16
priority: 500
ruleTupleCount: 5
...
משייכים את מדיניות חומת האש בין רשתות ל-fwpolicy-vpc1:
gcloud compute network-firewall-policies associations create \
--firewall-policy $prefix-example \
--network $prefix-vpc1 \
--name $prefix-vpc1-association \
--global-firewall-policy
מוודאים שהיא הוחלה בהצלחה על הרשת fwpolicy-vpc1:
gcloud compute networks get-effective-firewalls $prefix-vpc1
פלט צפוי (שימו לב: אם יש מדיניות היררכית של חומת אש שקודמת למדיניות הזו, הכללים הרלוונטיים יוצגו בחלק העליון):
TYPE FIREWALL_POLICY_NAME PRIORITY ACTION DIRECTION IP_RANGES network-firewall-policy fwpolicy-example 500 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
מוודאים שהיא הוחלה בהצלחה גם על שרת האינטרנט fwpolicy-vpc1:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
הפלט הצפוי דומה לזה של הפקודה הקודמת (fwpolicy-vpc1 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 ...
6. תגים שמנוהלים על ידי IAM
תג הוא צמד מפתח/ערך שאפשר לצרף לארגון, לתיקייה או לפרויקט. מידע נוסף זמין במאמרים בנושא יצירה וניהול של תגים וההרשאות הנדרשות.
התפקיד tagAdmin מאפשר ליצור תגים חדשים, לעדכן ולמחוק תגים קיימים. אדמין ארגוני יכול להקצות את התפקיד הזה. מ-Cloud Shell, מעדכנים את מדיניות IAM כדי להוסיף את התפקיד tagAdmin למשתמש. בדף permissions reference אפשר לראות אילו הרשאות כלולות בכל תפקיד מוגדר מראש.
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, מתארים את הכלל הקיים במדיניות חומת האש בין רשתות כדי לוודא שהתגים הוחלו בהצלחה ושהם מדווחים כEFFECTIVE:
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
נותנים את התפקיד Tag User לתג ולמשתמש הספציפיים. בדף permissions reference אפשר לראות אילו הרשאות כלולות בכל תפקיד מוגדר מראש.
gcloud resource-manager tags keys add-iam-policy-binding \ $org_id/tags-vpc1 \ --member user:[email] --role roles/resourcemanager.tagUser gcloud projects add-iam-policy-binding $project_id \ --member user:[email] --role roles/resourcemanager.tagUser
מוודאים שהתפקיד נוסף בהצלחה:
gcloud resource-manager tags keys get-iam-policy $org_id/tags-vpc1 gcloud projects get-iam-policy $project_id --flatten=bindings \ --filter=bindings.role:roles/resourcemanager.tagUser
הפלט אמור להיראות כך:
bindings: - members: - user:[user] role: roles/resourcemanager.tagUser ...
מחילים את התג על המכונה fwpolicy-vpc1-www:
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-servers \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
הפלט אמור להיראות כך:
Waiting for TagBinding for parent [//compute.googleapis.com/projects/PROJECT_ID/zones/us-central1-a/instances/38369703403698502] and tag value [tagValues/34 9564376683] to be created with [operations/rctb.us-central1-a.6144808968019372877]...done. done: true metadata: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.CreateTagBindingMetadata name: operations/rctb.us-central1-a.6144808968019372877 response: '@type': type.googleapis.com/google.cloud.resourcemanager.v3.TagBinding name: tagBindings/%2F%2Fcompute.googleapis.com%2Fprojects%2FPROJECT_NUMBER%2Fzones%2Fus-central1-a%2Finstances%2F38369703403698502/tagValues/349564376683 parent: //compute.googleapis.com/projects/PROJECT_NUMBER/zones/us-central1-a/instances/38369703403698502 tagValue: tagValues/349564376683
מאמתים את הקישורים:
gcloud resource-manager tags bindings list --location $zone --effective --parent //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-www
הפלט אמור להיראות כך:
namespacedTagKey: ORGANIZATION_ID/tags-vpc1 namespacedTagValue: ORGANIZATION_ID/tags-vpc1/web-servers tagKey: tagKeys/622132302133 tagValue: tagValues/349564376683
מאמתים שוב את הכללים של חומת האש:
gcloud compute instances network-interfaces \ get-effective-firewalls $prefix-vpc1-www --zone $zone
הפלט אמור להיראות כך:
network-firewall-policy fwpolicy-example 490 ALLOW INGRESS 10.0.0.0/16 network-firewall-policy fwpolicy-example 2147483645 GOTO_NEXT INGRESS ::/0 network-firewall-policy fwpolicy-example 2147483647 GOTO_NEXT INGRESS 0.0.0.0/0 network-firewall-policy fwpolicy-example 2147483644 GOTO_NEXT EGRESS ::/0 network-firewall-policy fwpolicy-example 2147483646 GOTO_NEXT EGRESS 0.0.0.0/0
חוזרים לכרטיסייה של סשן ה-SSH fwpolicy-vpc1-client ומנסים להשתמש בפקודה curl:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
הצלחת להתחבר?
כדי לוודא זאת, מעדכנים את הכלל כדי להסיר את הקריטריונים של ה-CIDR של המקור דרך Cloud Shell.
gcloud compute network-firewall-policies rules update 500 \
--firewall-policy $prefix-example \
--src-ip-ranges "" \
--global-firewall-policy
gcloud compute network-firewall-policies rules describe 500 \
--firewall-policy $prefix-example \
--global-firewall-policy
action: allow
description: allow-web
direction: INGRESS
disabled: false
enableLogging: false
kind: compute#firewallPolicyRule
match:
layer4Configs:
- ipProtocol: tcp
ports:
- '80'
- ipProtocol: tcp
ports:
- '443'
srcSecureTags:
- name: tagValues/479619031616
state: EFFECTIVE
priority: 490
ruleTupleCount: 7
targetSecureTags:
- name: tagValues/230424970229
state: EFFECTIVE
חוזרים לכרטיסייה של סשן ה-SSH fwpolicy-vpc1-client ומנסים שוב:
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
החיבור אמור להגיע לזמן קצוב לתפוגה הפעם, כי התג לא נוסף ל-fwpolicy-vpc1-client. מוסיפים אותו מ-Cloud Shell ומנסים שוב.
gcloud resource-manager tags bindings create \ --location $zone \ --tag-value $org_id/tags-vpc1/web-clients \ --parent \ //compute.googleapis.com/projects/$project_id/zones/$zone/instances/$prefix-vpc1-client
עוברים חזרה לכרטיסייה של סשן ה-SSH fwpolicy-vpc1-client ומנסים שוב. הפעם הפעולה אמורה להצליח.
user@fwpolicy-vpc1-client$ curl fwpolicy-vpc1-www --connect-timeout 2
7. תגים שמנוהלים על ידי IAM בקישור בין רשתות VPC שכנות (peering)
מ-Cloud Shell, יוצרים VPC, רשת משנה ולקוח חדשים, ומגדירים קישור בין רשתות VPC שכנות (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
מתחברים אל fwpolicy-vpc2-client באמצעות SSH ומנסים להשתמש בפקודה curl כדי להגיע לכתובת ה-IP של fwpolicy-vpc1:
user@fwpolicy-vpc2-client$ curl [fwpolicy-vpc1-www_IP] --connect-timeout 2
אפשר להתחבר לשרת fwpolicy-vpc1-www. בקטע הבא מפורטים השלבים לניקוי.
8. שלבי הניקוי
ב-Cloud Shell, מסירים את המכונות, Cloud NAT ו-Cloud Router:
gcloud -q compute instances delete $prefix-vpc2-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-client --zone=$zone gcloud -q compute instances delete $prefix-vpc1-www --zone=$zone gcloud -q compute routers nats delete $prefix-vpc1-cloudnat \ --router=$prefix-vpc1-cr --router-region=$region gcloud -q compute routers delete $prefix-vpc1-cr --region=$region
מסירים את מדיניות חומת האש ברשת הגלובלית ואת התגים:
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc2/web-clients
gcloud -q resource-manager tags keys delete $org_id/tags-vpc2
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc1/web-servers
gcloud -q resource-manager tags values delete \
$org_id/tags-vpc1/web-clients
gcloud -q resource-manager tags keys delete $org_id/tags-vpc1
gcloud -q compute network-firewall-policies associations delete \
--firewall-policy $prefix-example \
--name $prefix-vpc1-association \
--global-firewall-policy
gcloud -q compute network-firewall-policies delete \
$prefix-example --global
gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc1
gcloud -q compute firewall-rules delete allow-ssh-ingress-from-iap-vpc2
אם התפקידים tagAdmin ו-tagUsers השתנו, צריך לבצע את השלבים הבאים:
gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagAdmin gcloud organizations remove-iam-policy-binding $org_id \ --member user:[email] --role roles/resourcemanager.tagUser
לבסוף, מסירים את הקישור בין רשתות שכנות (peering) של VPC, את רשתות המשנה ואת רשתות ה-VPC:
gcloud -q compute networks peerings delete vpc1-to-vpc2 \
--network $prefix-vpc1
gcloud -q compute networks peerings delete vpc2-to-vpc1 \
--network $prefix-vpc2
gcloud -q compute networks subnets delete $prefix-vpc1-subnet \
--region $region
gcloud -q compute networks subnets delete $prefix-vpc2-subnet \
--region $region
gcloud -q compute networks delete $prefix-vpc1
gcloud -q compute networks delete $prefix-vpc2
9. מעולה!
ברכות, הגדרתם ואימתתם בהצלחה מדיניות חומת אש גלובלית בין רשתות עם הגדרת תגים.