בדף הזה מוסבר איך אפשר להשתמש בהעברת TCP באמצעות שרת proxy לאימות זהויות (IAP) כדי לאפשר גישת אדמין למופעים של מכונות וירטואליות שאין להן כתובות IP חיצוניות או שלא מאפשרות גישה ישירה דרך האינטרנט.
העברת TCP ב-IAP מאפשרת לכם ליצור מנהרה מוצפנת שדרכה תוכלו להעביר תעבורת נתונים מסוג SSH, RDP ותעבורה אחרת למכונות וירטואליות. התכונה 'העברת TCP ב-IAP' גם מספקת לכם שליטה מדויקת על המשתמשים שמורשים ליצור מנהרות ועל המכונות הווירטואליות שהמשתמשים מורשים להתחבר אליהן.
בסקירה הכללית על העברת TCP תוכלו לקרוא איך העברת TCP ב-IAP פועלת.
לפני שמתחילים
כדי להכין את הסביבה לשימוש ב-IAP להעברת TCP, מבצעים את השלבים הבאים:
בוחרים פרויקט קיים או יוצרים פרויקט חדש ב- Google Cloud Google Cloud ומוודאים שהחיוב מופעל.
אם אתם מתכוונים להשתמש בשורת הפקודה, עליכם להתקין ולהפעיל את Google Cloud CLI.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לשימוש בהעברת TCP ב-IAP, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM IAP Policy Admin (roles/iap.policyAdmin) בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
מוודאים שיש בפרויקט מכונה וירטואלית (VM) של Compute Engine. אם אין לכם מכונה וירטואלית, אתם צריכים ליצור מכונה של Compute Engine ולהפעיל אותה. לא נדרשת כתובת IP חיצונית למכונה הווירטואלית להעברת TCP ב-IAP.
הכנת הפרויקט להעברת TCP של IAP
בקטע הזה מוסבר איך להפעיל העברת TCP ב-IAP בפרויקט ב- Google Cloud .
יצירת כלל לחומת האש
כדי לאפשר ל-IAP להתחבר למופעי ה-VM, צריך ליצור כלל חומת אש ש:
- רלוונטי לכל מכונות ה-VM שרוצים לגשת אליהן באמצעות IAP.
- מאפשר תנועת נתונים נכנסת מטווח כתובות ה-IP
35.235.240.0/20. הטווח הזה כולל את כל כתובות ה-IP שמשמשות את IAP להעברת TCP.למכונות וירטואליות עם IPv6, משתמשים בטווח ה-IP הבא:
2600:2d00:1:7::/64. - מאפשרת חיבורים לכל היציאות שרוצים שתהיה אליהן גישה באמצעות העברת TCP של IAP, למשל יציאה
22ל-SSH ויציאה3389ל-RDP.
המסוף
כדי לאפשר גישת RDP ו-SSH לכל מופעי מכונות וירטואליות ברשת, מבצעים את הפעולות הבאות:
- פותחים את הדף Firewall Rules (כללים של חומת האש).
שאר השלבים יופיעו במסוף Google Cloud .
- בוחרים פרויקט Google Cloud .
- בדף 'כללים של חומת אש', לוחצים על
יצירת כלל של חומת אש . - קובעים את ההגדרות הבאות:
- Name (שם):
allow-ingress-from-iap - כיוון התנועה: כניסה
- טירגוט: כל המופעים ברשת
- מסנן מקור: טווח כתובות IP
- טווח כתובות ה-IP של המקור:
35.235.240.0/20 - פרוטוקולים ויציאות: בוחרים באפשרות TCP ומזינים
3389,22כדי לאפשר גם RDP וגם SSH.
- Name (שם):
- לוחצים על יצירה.
gcloud
כדי לאפשר גישת RDP לכל המכונות הווירטואליות ברשת, מריצים את הפקודה:
gcloud compute firewall-rules create allow-rdp-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:3389 \ --source-ranges=35.235.240.0/20
כדי לקבל גישת SSH, מריצים את הפקודה:
gcloud compute firewall-rules create allow-ssh-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges=35.235.240.0/20
לפרוטוקולים אחרים, מריצים את הפקודה
gcloud compute firewall-rules create allow-ingress-from-iap \ --direction=INGRESS \ --action=allow \ --rules=tcp:PORT \ --source-ranges=35.235.240.0/20
כאשר PORT היא היציאה שבה הפרוטוקול משתמש.
הקצאת תפקידים להעברת TCP של IAP
כדי לקבוע לאילו משתמשים וקבוצות מותר להשתמש בהעברת TCP באמצעות IAP ולאילו מכונות וירטואליות מותר להם להתחבר, צריך להעניק את התפקידים המתאימים בניהול הזהויות והרשאות הגישה (IAM) בפרויקט.
אם אתם משתמשים ב-OS Login (מומלץ), כדאי לעיין במאמר בנושא הגדרת תפקידים ב-OS Login בחשבונות משתמשים.
בטבלה הבאה מוצגים התפקידים המוגדרים מראש שצריך להקצות לאדמינים מהימנים כדי להשתמש בהעברת TCP ובמשימות שקשורות אליה:
| משימה | תפקידים | מידע נוסף |
|---|---|---|
| העברת TCP |
משתמש מנהרה באבטחת IAP (roles/iap.tunnelResourceAccessor)
|
אפשר לעיין במאמרים בנושא מתן גישה לכל המכונות הווירטואליות בפרויקט או מתן גישה למכונה וירטואלית ספציפית. |
| גישת SSH |
אדמין מכונות של Compute (גרסה 1) (roles/compute.instanceAdmin.v1)
|
|
| שימוש בחשבון שירות | משתמש בחשבון שירות (roles/iam.serviceAccountUser) |
ראו התפקיד serviceAccountUser. |
אם אתם רוצים ליצור תפקידים בהתאמה אישית עם ההרשאות הספציפיות שנדרשות לביצוע המשימה הזו, תוכלו לעיין במאמר פרטי הרשאות.
אתם יכולים להעניק למשתמש או לקבוצה גישה לכל המכונות הווירטואליות בפרויקט, או למכונה וירטואלית ספציפית, בהתאם לאופן שבו אתם מעניקים את התפקידים הנדרשים.
אין תמיכה בתגים
בשלב הזה, אי אפשר לתת הרשאה לשימוש בהעברת TCP של IAP באמצעות תגים.
הענקת גישה לכל המכונות הווירטואליות בפרויקט
כדי לתת למשתמש או לקבוצה גישה לכל המכונות הווירטואליות בפרויקט, צריך להקצות את תפקידי ה-IAM הנדרשים ברמת הפרויקט:
המסוף
- פותחים את הדף IAM & Admin במסוף Google Cloud .
שאר השלבים יופיעו במסוף Google Cloud .
- בדף IAM ואדמין, לוחצים על הוספה ומגדירים את האפשרויות הבאות:
- New principals (ישויות מורשות חדשות): מציינים את המשתמש או הקבוצה שרוצים להעניק להם גישה.
- Select a role (בחירת תפקיד): בוחרים באפשרות Cloud IAP > IAP-Secured Tunnel User (Cloud IAP > משתמש במנהרה מאובטחת של IAP).
- אופציונלי: לוחצים על הוספת תנאי ומגדירים תנאי:
- שם: מזינים שם לתנאי.
- ביטוי: מזינים תנאי שמשתמש צריך לעמוד בו כדי לקבל את ההרשאות בתפקיד 'משתמש מנהרה באבטחת IAP'.
לדוגמה, ביטוי ה-CEL הבא מעניק גישה רק ליציאה 22:
destination.port == 22 - לוחצים על Add another role ומגדירים את האפשרויות הבאות:
- Select a role (בחירת תפקיד) בוחרים באפשרות Compute Engine > Compute Instance Admin (v1) (Compute Engine > אדמין של מכונות וירטואליות (גרסה 1)).
- לוחצים על Save.
gcloud
מריצים את הפקודות הבאות כדי להעניק למשתמש את שני התפקידים:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/iap.tunnelResourceAccessor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=user:EMAIL \ --role=roles/compute.instanceAdmin.v1
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: המזהה של הפרויקט -
EMAIL: כתובת האימייל של המשתמש שרוצים להעניק לו גישה, לדוגמהuser@example.com.
הענקת גישה למכונה וירטואלית ספציפית
כדי לתת למשתמש או לקבוצה גישה למכונה וירטואלית ספציפית, צריך לתת להם את התפקיד roles/iap.tunnelResourceAccessor במכונה הווירטואלית הזו. צריך להקצות את התפקידים האחרים בפרויקט.
המסוף
- פותחים את דף האדמין של IAP ובוחרים בכרטיסייה SSH and TCP Resources (משאבי SSH ו-TCP).
שאר השלבים יופיעו במסוף Google Cloud .
- בכרטיסייה SSH and TCP Resources בדף האדמין של IAP, בוחרים את מכונות ה-VM שרוצים להגדיר.
- אם חלונית המידע לא מוצגת, לוחצים על Show info panel.
לוחצים על Add principal ומגדירים את האפשרויות הבאות:
- New principals (ישויות מורשות חדשות): מציינים את המשתמש או הקבוצה שרוצים להעניק להם גישה.
- Select a role (בחירת תפקיד): בוחרים באפשרות Cloud IAP > IAP-Secured Tunnel User (Cloud IAP > משתמש במנהרה מאובטחת של IAP).
אפשר גם ללחוץ על הוספת תנאי ולהגדיר תנאי:
- שם: מזינים שם לתנאי.
- ביטוי: מזינים תנאי שמשתמש צריך לעמוד בו כדי לקבל את ההרשאות בתפקיד 'משתמש מנהרה באבטחת IAP'.
לדוגמה, ביטוי ה-CEL הבא מעניק גישה רק ליציאה 22:
destination.port == 22אפשר גם להעניק גישה על סמך רמת הגישה:
destination.port == 22 &&"FULL_ACCESS_LEVEL_NAME" in request.auth.access_levelsכאשר
FULL_ACCESS_LEVEL_NAMEהוא רמת גישה קיימת, והפורמט הוא:accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME- לוחצים על Save.
API
כדי לערוך את קובץ policy.json של האפליקציה, פועלים לפי התהליך הבא.
מידע נוסף על שימוש בממשק ה-API של IAM לניהול מדיניות גישה זמין במאמר ניהול גישה למשאבים שמאובטחים באמצעות IAP.
מייצאים את המשתנים הבאים.
export IAP_BASE_URL=https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_tunnel # Replace POLICY_FILE.JSON with the name of JSON file to use for setIamPolicy export JSON_NEW_POLICY=POLICY_FILE.JSON
מקבלים את מדיניות IAM של מכונת Compute Engine באמצעות השיטה
getIamPolicy. ביט הנתונים הריק בסוף הופך את הבקשהcurlל-POST במקום ל-GET.curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:getIamPolicy \ -d ''כדי לתת את התפקיד
iap.tunnelResourceAccessorלחשבונות הראשיים, משנים את קובץ ה-JSON של מדיניות ה-IAM.אפשר גם להעניק את התפקיד רק לחשבונות משתמשים שעומדים בקריטריונים ספציפיים, על סמך תנאים של IAM ורמות גישה.
זוהי דוגמה לקובץ
policy.jsonשעבר עריכה, שמעניק את התפקידiap.tunnelResourceAccessorלקבוצת אדמינים של מכונות וירטואליות, ומאפשר להם גישה למשאבי מנהרות מאובטחים ב-IAP. נוסף תנאי IAM כדי שהמשאבים יהיו נגישים רק לישויות בקבוצת האדמינים של מכונות וירטואליות עם כתובת IP פרטית של10.0.0.1ביציאה22באמצעותdestination.ipו-destination.portתנאי IAM. הם צריכים גם לעמוד בדרישות של רמת הגישה ACCESS_LEVEL_NAME.הערה: אם לחשבון משתמש יש תפקיד בעלים, יש לו הרשאה להשתמש ב-IAP להעברת TCP.
קובץ לדוגמה של policy.json{ "policy": { "bindings": [ { "role": "roles/iap.tunnelResourceAccessor", "members": ["group:instance-admins@example.com"], "condition": { "expression": "\"accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME\" in request.auth.access_levels && destination.ip == \"10.0.0.1\" && destination.port == 22", "title": "CONDITION_NAME" } } ] } }
כדי למצוא שם של מדיניות , קוראים לפונקציה
accessPolicies.list:GET https://accesscontextmanager.googleapis.com/v1/accessPolicies
- מגדירים את קובץ
policy.jsonהחדש באמצעות ה-methodsetIamPolicy.curl -i -H "Content-Type:application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ ${IAP_BASE_URL}/zones/ZONE_NAME/instances/INSTANCE_ID or INSTANCE_NAME:setIamPolicy \ -d @${JSON_NEW_POLICY}
- מגדירים את קובץ
פרטי ההרשאות
ההרשאות הנדרשות משתנות בהתאם לאופן שבו המשתמש ישתמש בהעברת TCP של IAP:
| תרחישים | ההרשאות הנדרשות | |
|---|---|---|
| הכול |
|
|
שימוש ב-gcloud compute [start-iap-tunnel, ssh, scp] |
|
|
שימוש ב-gcloud compute [ssh, scp] |
|
|
| מכונה וירטואלית באמצעות OS Login | צריך לפעול לפי ההוראות האלה | |
| לא נעשה שימוש ב-OS Login |
|
|
| התחברות ל-VM באמצעות SSH באמצעות חשבון שירות |
|
|
| SSH מהדפדפן | צריך לפעול לפי ההוראות האלה | |
לדוגמה, אם משתמש רוצה להתחבר באמצעות gcloud compute ssh למכונה וירטואלית שלא מופעל בה OS Login, אבל מופעל בה חשבון שירות, המשתמש יצטרך את ההרשאות הבאות:
iap.tunnelInstances.accessViaIAPcompute.instances.getcompute.instances.listcompute.projects.getcompute.instances.setMetadatacompute.projects.setCommonInstanceMetadatacompute.globalOperations.getiam.serviceAccounts.actAs
מנהור של חיבורי SSH
אפשר להתחבר למכונות Linux שאין להן כתובת IP חיצונית באמצעות מנהור של תעבורת SSH דרך IAP.
כשמשתמשים במנהור IAP, שרתי ה-proxy של IAP מתחברים לכתובת ה-IPv4 הפנימית הראשית של