1. מבוא
כללי המדיניות של חומת האש של הרשת
חומות אש הן אבני הבניין הבסיסיות לסביבת ענן מאובטחת. בעבר, השקנו מדיניות חומת אש ברמת הארגון וברמת התיקייה, והשארנו את חומות האש של VPC ללא שינוי. בגרסה הזו נרחיב את המבנה של מדיניות חומת האש לרמת ה-VPC, ונבצע כמה שיפורים בתמיכה הנוכחית במדיניות חומת האש, כדי לספק תמיכה מאוחדת בחומת האש בכל היררכיית המשאבים של Google Cloud, וחוויית משתמש עקבית בכל הנוגע לניהול הבקרה של מדיניות חומת האש באופן מאובטח, גמיש וניתנת להתאמה.
מדיניות חומת האש של הרשת משמשת כמאגר כללי של חומת האש. כללים שמוגדרים במדיניות חומת אש של רשת לא נאכפים בשום מקום עד שהמדיניות משויכת לרשת VPC. לכל רשת VPC יכולה להיות מדיניות חומת אש אחת של רשת המשויכת אליה. כללי המדיניות של חומת האש ברשת תומכים בתגים שמנוהלים על ידי IAM (או רק תגים) בכללי חומת אש. הם מחליפים את תגי הרשת הנוכחיים ואפשר להשתמש בהם כדי לספק זהות לעומס העבודה.
שיתוף מדיניות של חומת אש בין רשתות בין רשתות והשילוב עם תגים שמנוהלים על ידי IAM, מפשטים מאוד את ההגדרה והניהול של חומות אש.
בעקבות ההשקה של מדיניות חומת האש ברשת, כללי מדיניות חומת האש של Google Cloud כוללים עכשיו את הרכיבים הבאים:
- מדיניות היררכית בנושא חומת אש
- כללי חומת אש של VPC
- מדיניות חומת האש של הרשת ( גלובלית ואזורית)
מדיניות חומת אש היררכית נתמכת בצמתים של הארגון והתיקיות בהיררכיית המשאבים, ואילו כללי חומת אש של VPC וכללי מדיניות של חומת אש ברשת חלים ברמת ה-VPC. הבדל גדול בין כללי חומת אש של VPC למדיניות חומת האש של הרשת הוא שאפשר להחיל כללי חומת אש של VPC רק על רשת VPC אחת. לעומת זאת, כללי מדיניות של חומת אש של רשת יכולים להיות מצורפים ל-VPC יחיד או לקבוצה של רשתות VPC, בין שאר היתרונות כמו עדכון בכמות גדולה.
לבסוף, יש לנו גם את כללי חומת האש המשתמעים שמגיעים לכל רשת VPC:
- כלל לתעבורת נתונים יוצאת (egress) שהפעולה שלו היא מותרת, היעד הוא 0.0.0.0/0
- כלל תעבורת נתונים נכנסת (ingress) שהפעולה שלו היא דחייה, המקור הוא 0.0.0.0/0
כברירת מחדל, רצף האכיפה מוצג בתרשים הבא:
שימו לב שניתן להחליף את צו האכיפה בין כללי חומת האש של ה-VPC למדיניות חומת האש של הרשת הגלובלית. הלקוחות יכולים לציין את צו האכיפה בכל שלב באמצעות פקודת gcloud.
תגים
התגים החדשים שמשולבים בכללי מדיניות חומת האש ברשת הם משאבים צמדי מפתח-ערך שמוגדרים ברמת הארגון בהיררכיית המשאבים של Google Cloud. תג כזה מכיל בקרת גישה של IAM, כפי שמרמז השם, שמציין מי יכול לבצע מה בתג. הרשאות IAM, למשל, מאפשרות לציין אילו חשבונות משתמשים יכולים להקצות ערכים לתגים ואילו חשבונות משתמשים יכולים לצרף תגים למשאבים. אחרי שמחילים תג על משאב, כללי חומת האש של הרשת יכולים להשתמש בו כדי לאשר ולדחות תנועה.
התגים פועלים בהתאם למודל משאבי הירושה של Google Cloud, והמשמעות היא התגים והערכים שלהם מועברים הלאה בהיררכיה מההורים שלהם. כתוצאה מכך, ניתן ליצור תגים במקום אחד, ולאחר מכן להשתמש בתיקיות ובפרויקטים אחרים בהיררכיית המשאבים. פרטים נוספים על תגים והגבלת הגישה זמינים בדף הזה.
חשוב להבדיל בין תגים לבין תגי רשת. אלה מחרוזות שאפשר להוסיף למכונות של Compute Engine. הם משויכים למכונה ונעלמים כשמוציאים משימוש את המכונה. כללי חומת האש של VPC עשויים לכלול תגי רשת, אבל מאחר שהם לא נחשבים למשאבי ענן, הם לא כפופים לבקרת הגישה ל-IAM.
לתשומת ליבך: במסמך הזה נעשה שימוש לסירוגין בתגים ובתגים שמנוהלים על ידי IAM.
מה תפַתחו
ה-Codelab הזה כולל שני חלקים – החלק הראשון מציג את מדיניות חומת האש של הרשת ואת התגים באמצעות רשת VPC יחידה, והשני יראה איך להשתמש בתגים בין רשתות VPC שכנות (peering), לפי התרשים הבא. לכן, ב-Codelab הזה נדרשים פרויקט יחיד ויכולת ליצור מספר רשתות VPC.
מה תלמדו
- איך יוצרים מדיניות של חומת אש ברשת
- איך יוצרים תגים עם מדיניות של חומת אש ברשת ומשתמשים בהם
- איך משתמשים בתגים באמצעות קישור בין רשתות VPC שכנות (peering)
מה צריך להכין
- פרויקט ב-Google Cloud
- ידע בפריסת מכונות ובהגדרת רכיבי רשת
- מידע על הגדרת חומת אש ב-VPC
2. לפני שמתחילים
יצירה/עדכון של משתנים
ב-Codelab הזה נעשה שימוש ב-$variables כדי לעזור בהטמעת ההגדרות של gcloud ב-Cloud Shell.
Inside 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 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 בתחילת הקטע הזה), וכברירת מחדל כל תעבורת הנתונים הנכנסת (ingress) נדחית, המכונות של הלקוח לא יכולות לגשת לשרתי האינטרנט הרלוונטיים. כדי לוודא שהזמן הקצוב לתפוגה של הבקשה יפוג, פותחים חלון חדש, מתחילים סשן 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 לקוח ומנסים ל-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 מאפשר ליצור תגים חדשים, לעדכן ולמחוק תגים קיימים. מנהל חשבון ארגוני יכול להקצות את התפקיד הזה. מעדכנים את מדיניות IAM ב-Cloud Shell כדי להוסיף את תפקיד ה-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
מעדכנים את הכלל כך שיאפשר תנועה רק ממפתח התג 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
עכשיו נוודא שהכלל הוחל על vpc1 ב-Cloud Shell:
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 (משתמש ב-Tag) לתג ולמשתמש הספציפיים. בדף חומר העזר בנושא הרשאות תוכלו לראות אילו הרשאות נכללות בכל תפקיד מוגדר מראש.
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
יוצרים כלל של חומת אש שמאפשר תעבורת נתונים נכנסת (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
צריך לתאר את הכלל של חומת האש כדי לוודא שהוא הוחל בהצלחה ודיווח עליו כ-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' 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 ומנסים לשנות את כתובת ה-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, רשתות המשנה ורשתות ה-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. מעולה!
מזל טוב, הגדרת בהצלחה ואימתת בהצלחה את מדיניות חומת האש של הרשת הגלובלית עם הגדרת התגים.