בדף הזה נסביר איך לאפשר תעבורה מכתובות IP פנימיות ברשת VPC לגבולות גזרה לשירות באמצעות כללים לתעבורת נתונים נכנסת ויוצאת.
סקירה כללית
אתם יכולים להשתמש ב-VPC Service Controls כדי לציין תנאים שיאפשרו לטווחים ספציפיים של כתובות IP ברשת ה-VPC לגשת לפרויקטים ולרשתות ה-VPC המוגנים. התכונה הזו מאפשרת לכם לבצע את המשימות הבאות:
תמיכה בתנאים של רמת גישה בסיסית כדי לאפשר טווחי כתובות IP פנימיות של רשתות VPC.
האם לאפשר שימוש בתנאים האלה של רמת הגישה לקריאות API של תעבורת נתונים נכנסת או יוצאת אל גבולות הגזרה לשירות או מתוכם.
התכונה הזו מספקת את היתרונות הבאים:
אתם יכולים לציין תנאים בהגדרות של VPC Service Controls כדי לאפשר גישה מכתובת IP פנימית ברשת VPC.
תהליכי עבודה שדורשים שקריאות ל-API יעברו דרך כמה גבולות שירות יכולים להגביל את הגישה כך שתתאפשר רק לכמה רשתות משנה, במקום לאפשר גישה לכל רשת ה-VPC או הפרויקט.
אתם יכולים להגדיר משאבים שונים מהסביבה המקומית כך שתהיה להם גישה רק למשאבים ספציפיים ב- Cloud de Confiance by S3NS . כחלק מרמת הגישה, צריך להשתמש בטווח כתובות ה-IP של רשת המשנה שמשויך למשאבים המקומיים האלה ולרשת ה-VPC של אזור הנחיתה.
איור 1 מציג דוגמה להגדרה שמאפשרת גישה לשירות מוגן ספציפי מכתובת IP פנימית מורשית.
מגבלות בשימוש בכתובת IP פנימית
כשמשתמשים בכתובת IP פנימית ב-VPC Service Controls, חלות ההגבלות הבאות:
אפשר להפעיל כתובת IP פנימית רק עם רמות גישה בסיסיות, ולא עם רמות גישה מותאמות אישית.
מומלץ לא לשלול רמות גישה באמצעות תנאים שמבוססים על כתובות IP פנימיות, כי זה עלול לגרום להתנהגויות לא צפויות.
חלות גם המגבלות על הוספת רשתות VPC ל-service perimeters.
כש-VPC Service Controls רושם ביומן הביקורת מדיניות שנדחתה, הוא מצנזר את השם של רשת ה-VPC כ-
__UNKNOWN__ביומן הביקורת.אין תמיכה ברשתות VPC שהערך של
SUBNET_MODEמוגדר בהן כ-customאבל אין להן תת-רשתות. כדי להפעיל כתובת IP פנימית, רשת ה-VPC צריכה להכיל לפחות רשת משנה אחת.אתם יכולים לציין רק 500 רשתות VPC בכל רמות הגישה במדיניות הגישה שלכם.
כשמוחקים רשת VPC שאליה מתייחסת רמת גישה או גבולות גזרה לשירות, ואז יוצרים מחדש רשת VPC אחרת עם אותו שם, מערכת VPC Service Controls לא מפעילה באופן אוטומטי כתובות IP פנימיות ברשת ה-VPC שנוצרה מחדש. כדי לעקוף את המגבלה הזו, יוצרים רשת VPC עם שם אחר ומוסיפים אותה לגבולות הגזרה.
אי אפשר להשתמש בכתובת IP פנימית כדי לאפשר גישה משירותים שמנוהלים על ידי Google. לדוגמה, Cloud SQL.
אם אתם משתמשים ברמת גישה עם תנאים שמבוססים על כתובות IP פנימיות עם כלל יציאה, מומלץ לא להוסיף לרמת הגישה תנאים אחרים, כמו סוג המכשיר או זהות המשתמש.
כתובת ה-IP הפנימית לא תואמת לרמות הגישה שמתייחסות לאזורים גיאוגרפיים.
שימוש בכתובת IP פנימית ברמות גישה
מציינים את שם רשת ה-VPC ואת טווח כתובות ה-IP בשדה
vpcNetworkSourcesשל תנאי בסיסי של רמת גישה.השם של רשת ה-VPC. צריך להגדיר את שם רשת ה-VPC בפורמט הבא:
//compute.googleapis.com/projects/PROJECT_ID/global/networks/NETWORK_NAME
לדוגמה,
//compute.googleapis.com/projects/my-project/global/networks/my-vpc.טווח כתובות IP. טווח כתובות ה-IP שצוין בשדה
VpcSubNetworkשלVpcNetworkSourceחייב להיות בהתאם למפרט של רשת משנה של כתובות IP בפורמט בלוקים של CIDR. אפשר להשתמש בכל טווח כתובות IP שהוא טווח IPv4 תקין עבור רשתות משנה.
אפשר להשתמש ברמת הגישה הזו עם תנאי הרשאה ב-
IngressSourceאו ב-EgressSource.
בקטעים הבאים מוסבר איך לבצע את השלבים האלה כדי להפעיל כתובת IP פנימית, באמצעות תרחיש לדוגמה.
דוגמה לשימוש בכתובת IP פנימית כדי להגדיר גישה לתת-רשת
בדוגמה הבאה יש שני פרויקטים:
פרויקט מארח של רשת:
Project1מארח רשת VPC:default. שתי המכונות הווירטואליות ב-Project1, ב-VM1וב-VM2משתמשות ברשת הזו כממשק רשת לשליחת תנועה דרכה.פרויקט Cloud Storage:
Project2מכיל קטגוריה של Cloud Storage.
אתם יכולים להשתמש ב-VPC Service Controls כדי לאפשר רק ל-VM1 מ-Project1 לגשת לקטגוריה של Cloud Storage ב-Project2 באמצעות כתובת IP פנימית.
כדי להגדיר את ההגדרה הזו, צריך לבצע את השלבים הבאים:
יוצרים גבולות גזרה לשירות
sp1סביבProject1ועוד גבולות גזרה לשירותsp2סביבProject2.לאחר מכן, תוכלו להוסיף כללים לתעבורת נתונים נכנסת ויוצאת לגבולות הגזרה של השירות כדי לאפשר גישה לרשת המשנה של
VM1לקטגוריית Cloud Storage בלבד.
בתרשים הבא מוצגת ההגדרה שמתוארת בדוגמה הזו.
הגדרת מדיניות גישה ברמת הארגון
מוודאים שיש לכם מדיניות גישה ברמת הארגון. אם אין לכם מדיניות גישה ברמה הזו, מריצים את הפקודה הבאה ב-CLI של gcloud:
gcloud access-context-manager policies create \ --organization=ORGANIZATION_ID --title=POLICY_TITLEמחליפים את מה שכתוב בשדות הבאים:
ORGANIZATION_ID: המזהה המספרי של הארגון.
POLICY_TITLE: שם קריא לאנשים של מדיניות הגישה.
מידע נוסף זמין במאמר יצירת מדיניות גישה ברמת הארגון.
כדי להגדיר את מדיניות הגישה הזו כמדיניות ברירת המחדל, מריצים את הפקודה הבאה ב-CLI של gcloud:
gcloud config set access_context_manager/policy POLICY_NAME
מחליפים את POLICY_NAME בשם המספרי של מדיניות הגישה.
מידע נוסף זמין במאמר בנושא הגדרת מדיניות ברירת המחדל לגישה לכלי שורת הפקודה
gcloud.
יצירת גבולות גזרה להגנה על פרויקט המארח של הרשת ועל פרויקט Cloud Storage
כדי ליצור גבולות גזרה
sp1סביבProject1, מריצים ב-CLI של gcloud את הפקודה הבאה:gcloud access-context-manager perimeters create sp1 --title="sp1" --resources=PROJECT_NUMBER \ --restricted-services=storage.googleapis.com --policy=POLICY_NAMEמחליפים את מה שכתוב בשדות הבאים:
PROJECT_NUMBER: מספר הפרויקט של פרויקט המארח של הרשת. לדוגמה,
projects/111.POLICY_NAME: השם המספרי של מדיניות הגישה. לדוגמה,
1234567890.
כדי ליצור גבולות גזרה
sp2סביבProject2שמגבילים את שירות Cloud Storage, מריצים את הפקודה הבאה ב-CLI של gcloud:gcloud access-context-manager perimeters create sp2 --title="sp2" --resources=PROJECT_NUMBER \ --restricted-services=storage.googleapis.com --policy=POLICY_NAMEמחליפים את מה שכתוב בשדות הבאים:
PROJECT_NUMBER: מספר הפרויקט של Cloud Storage. לדוגמה,
projects/222.POLICY_NAME: השם המספרי של מדיניות הגישה. לדוגמה,
1234567890.
מידע נוסף על יצירת גבולות גזרה לשירות זמין במאמר יצירת גבולות גזרה לשירות.
אחרי שיוצרים את שני גבולות הגזרה האלה, אי אפשר יותר לגשת לקטגוריה של Cloud Storage משתי המכונות הווירטואליות.
יצירת רמת גישה עם תנאי גישה שמבוסס על כתובת IP פנימית
יוצרים רמת גישה שמאפשרת רק תעבורה שמגיעה מתת-הרשת של VM1.
יוצרים קובץ YAML שמגדיר את תנאי הגישה. בדוגמה הבאה מוצגים רק המאפיינים שנדרשים להפעלת כתובת IP פנימית:
echo """ - vpcNetworkSources: - vpcSubnetwork: network: VPC_NETWORK_NAME vpcIpSubnetworks: - IP_RANGE """ > level.yamlמחליפים את מה שכתוב בשדות הבאים:
VPC_NETWORK_NAME: השם של רשת ה-VPC שבה נמצא
VM1. לדוגמה://compute.googleapis.com/projects/Project1/global/networks/default.IP_RANGE: טווח כתובות ה-IP של רשת המשנה. לדוגמה,
10.10.0.0/24.
משתמשים בשם רשת ה-VPC ובפורמטים של טווח כתובות ה-IP שמוסברים בהמשך.
מידע נוסף על קובץ ה-YAML זמין במאמר
basic-level-specקובץ YAML.כדי ליצור רמת גישה באמצעות קובץ YAML, מריצים את הפקודה הבאה ב-CLI של gcloud:
gcloud access-context-manager levels create LEVEL_NAME \ --title="TITLE" --basic-level-spec=FILE_NAMEמחליפים את מה שכתוב בשדות הבאים:
LEVEL_NAME: שם ייחודי לרמת הגישה. לדוגמה,
allowvm1.TITLE: שם קצר וקריא לאנשים של רמת הגישה. לדוגמה,
allowvm1.FILE_NAME: קובץ ה-YAML שמגדיר את תנאי הגישה לרמת הגישה. לדוגמה,
level.yaml.
מידע נוסף זמין במאמר בנושא יצירת בקרת גישה בסיסית.
הגדרת מדיניות כניסה כדי לאפשר תעבורת API נכנסת לקטגוריה של Cloud Storage
כדי לאפשר גישה רק מ-VM1, צריך להגדיר מדיניות כניסה בפרימטר VM1 כדי לאפשר לתנועה של Cloud Storage API להיכנס לפרימטר.sp2
יוצרים קובץ YAML שמגדיר את מדיניות הכניסה.
echo """ - ingressFrom: identityType: ANY_IDENTITY sources: - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME ingressTo: operations: - methodSelectors: - method: '*' serviceName: storage.googleapis.com resources: - '*' """ > ingress.yamlמחליפים את מה שכתוב בשדות הבאים:
POLICY_NAME: השם המספרי של מדיניות הגישה. לדוגמה,
1234567890.ACCESS_LEVEL_NAME: השם של רמת הגישה. לדוגמה,
allowvm1.
מידע נוסף על קובץ ה-YAML זמין במאמר בנושא הפניה לכללי Ingress.
כדי לעדכן את מדיניות הכניסה של גבולות גזרה לשירות, מריצים את הפקודה הבאה ב-CLI של gcloud:
gcloud access-context-manager perimeters update PERIMETER --set-ingress-policies=FILE_NAME
מחליפים את מה שכתוב בשדות הבאים:
PERIMETER: השם של גבולות גזרה לשירות שמגנים על פרויקט Cloud Storage. לדוגמה,
sp2.FILE_NAME: קובץ ה-YAML שמגדיר את מדיניות הכניסה. לדוגמה,
ingress.yaml.
מידע נוסף זמין במאמר בנושא עדכון מדיניות תעבורת הנתונים הנכנסת (ingress) ותעבורת הנתונים היוצאת (egress) של גבולות גזרה לשירות.
הגדרת מדיניות יציאה כדי לאפשר תעבורת נתונים יוצאת של API לקטגוריית Cloud Storage
בנוסף, צריך להגדיר מדיניות תעבורת נתונים יוצאת (egress) בהיקף sp1 כדי לאפשר לתעבורת נתונים של Cloud Storage API לצאת מההיקף.
יוצרים קובץ YAML שמגדיר את מדיניות היציאה. מוודאים שהשדה
sourceRestrictionמוגדר כ-SOURCE_RESTRICTION_ENABLEDבקובץ ה-YAML.echo """ - egressFrom: identityType: ANY_IDENTITY sourceRestriction: SOURCE_RESTRICTION_ENABLED sources: - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME egressTo: operations: - methodSelectors: - method: '*' serviceName: storage.googleapis.com resources: - '*' """ > egress.yamlמחליפים את מה שכתוב בשדות הבאים:
POLICY_NAME: השם המספרי של מדיניות הגישה. לדוגמה,
1234567890.ACCESS_LEVEL_NAME: השם של רמת הגישה. לדוגמה,
allowvm1.
מידע נוסף על קובץ ה-YAML זמין במאמר בנושא הפניה לכללי יציאה.
כדי לעדכן את מדיניות תעבורת הנתונים היוצאת (egress) של גבולות גזרה לשירות, מריצים את הפקודה הבאה:
gcloud access-context-manager perimeters update PERIMETER --set-egress-policies=FILE_NAME
מחליפים את מה שכתוב בשדות הבאים:
PERIMETER: השם של גבולות גזרה לשירות שמגן על פרויקט המארח ברשת. לדוגמה,
sp1.FILE_NAME: קובץ ה-YAML שמגדיר את מדיניות היציאה. לדוגמה,
egress.yaml.
מידע נוסף זמין במאמר בנושא עדכון מדיניות תעבורת הנתונים הנכנסת (ingress) ותעבורת הנתונים היוצאת (egress) של גבולות גזרה לשירות.
אחרי שמגדירים את מדיניות תעבורת הנתונים הנכנסת (ingress) ותעבורת הנתונים היוצאת (egress), אפשר לגשת לקטגוריה של Cloud Storage מ-VM1, אבל אי אפשר לגשת לקטגוריה של Cloud Storage מ-VM2.
המלצות
כשמפעילים כתובת IP פנימית, מומלץ להשבית את העברת כתובת IP למכונות הווירטואליות. העברת כתובות IP מאפשרת למכונה וירטואלית באותה רשת VPC לשלוח בקשות באמצעות כתובת IP אחרת, ויוצרת סיכון לזיוף כתובות IP.
אם רוצים להפעיל העברת IP, מומלץ להשתמש בהגדרות הבאות כדי לצמצם את הסיכון לזיוף כתובת IP:
כדי לוודא שרק מכונות וירטואליות מורשות יכולות להפעיל העברת IP, משתמשים ב
Restrict VM IP Forwardingמגבלת מדיניות הארגון (constraints/compute.vmCanIpForward).משתמשים במקורות לכללים של חומת האש כדי להגביל את כתובות ה-IP שיכולות לתקשר עם המכונות הווירטואליות שבהן מופעלת העברת IP. צריך להשלים את המשימות הבאות:
מגדירים כללים של חומת אש לתעבורת נתונים נכנסת (ingress) כדי לאפשר תעבורת נתונים נכנסת רק מטווח כתובות IP ספציפי למכונות הווירטואליות שבהן מופעלת העברת IP.
מגדירים כללים של חומת אש לתעבורת נתונים יוצאת (egress) כדי לאפשר תעבורת נתונים יוצאת רק לטווח כתובות IP ספציפי ממכונות וירטואליות שבהן מופעלת העברת IP.