1. מבוא
מדיניות חומת אש בין רשתות
חומות אש הן אבני הבניין הבסיסיות של סביבת ענן מאובטחת. בעבר הוספנו מדיניות חומת אש ברמת הארגון והתיקייה, בלי לשנות את חומות האש של VPC. בגרסה הזו נרחיב את המבנה של מדיניות חומת האש עד לרמת ה-VPC, ונבצע כמה שיפורים בתמיכה הנוכחית במדיניות חומת האש כדי לספק תמיכה מאוחדת בחומת אש בהיררכיית המשאבים של Google Cloud וחוויית משתמש עקבית בניהול אמצעי הבקרה של מדיניות חומת האש באופן מאובטח, גמיש וניתן להתאמה.
מדיניות חומת האש ברשת משמשת כקונטיינר לכללי חומת האש. כללים שמוגדרים במדיניות של חומת אש ברשת לא נאכפים בשום מקום עד שהמדיניות משויכת לרשת VPC. לכל רשת VPC יכולה להיות מדיניות חומת אש אחת. כללי המדיניות של חומת האש ברשת תומכים בתגים (או פשוט בתגים) שמנוהלים על ידי IAM בכללי חומת האש. התגים האלה מחליפים את תגי הרשת הנוכחיים, וניתן להשתמש בהם כדי לספק זהות לעומס העבודה.
שיתוף של מדיניות חומת אש ברשתות שונות והשילוב עם תגים שמנוהלים על ידי IAM מפשטים מאוד את ההגדרה והניהול של חומות האש.
בעקבות ההשקה של מדיניות חומת אש ברשת, כללי המדיניות של חומת האש ב-Google Cloud מורכבים עכשיו מהרכיבים הבאים:
- מדיניות היררכית של חומת אש
- כללי חומת אש ב-VPC
- מדיניות חומת האש של הרשת ( גלובלית ואזורית)
מדיניות חומת אש היררכית נתמכת בצמתים של הארגון והתיקייה בהיררכיית המשאבים, ואילו כללי חומת האש של VPC וכללי מדיניות חומת האש ברשת חלים ברמת ה-VPC. ההבדל הגדול בין כללי חומת האש של VPC לבין כללי מדיניות חומת האש של הרשת הוא שאפשר להחיל את כללי חומת האש של VPC רק על רשת VPC אחת, בעוד שאפשר לצרף את כללי מדיניות חומת האש של הרשת ל-VPC יחיד או לקבוצה של VPC, בין היתר, לצורך עדכון באצווה.
לבסוף, יש לנו גם את כללי חומת האש המשתמעים שמגיעים עם כל רשת VPC:
- כלל תעבורת נתונים יוצאת (egress) שהפעולה שלו היא allow והיעד שלו הוא 0.0.0.0/0
- כלל תעבורת נתונים נכנסת (ingress) שהפעולה שלו היא דחייה, והמקור הוא 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 Network
יוצרים את 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 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. יצירת מכונות
יוצרים כלל של חומת אש שמאפשר תעבורת נתונים נכנסת (ingress) מסוג 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):
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. בדף חומר העזר בנושא הרשאות תוכלו לראות אילו הרשאות כלולות בכל אחד מהתפקידים המוגדרים מראש.
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 ומנסים להריץ את הפקודה 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 שכנות
ב-Cloud Shell, יוצרים VPC, תת-רשת ולקוח חדשים ומגדירים קישור בין רשתות VPC בין הרשתות:
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
יוצרים כלל של חומת אש שמאפשר תעבורת נתונים נכנסת (ingress) מסוג 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 NAT ואת Cloud Router מ-Cloud Shell:
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 שכנות (peering), את רשתות המשנה ואת רשתות ה-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. מעולה!
מזל טוב, הגדרתם ואימתתם מדיניות חומת אש גלובלית ברשת באמצעות הגדרת תגים.