שימוש ב-IAP להעברת TCP

בדף הזה מוסבר איך אפשר להשתמש בהעברת TCP באמצעות שרת proxy לאימות זהויות (IAP) כדי לאפשר גישת אדמין למופעים של מכונות וירטואליות שאין להן כתובות IP חיצוניות או שלא מאפשרות גישה ישירה דרך האינטרנט.

העברת TCP ב-IAP מאפשרת לכם ליצור מנהרה מוצפנת שדרכה תוכלו להעביר תעבורת נתונים מסוג SSH,‏ RDP ותעבורה אחרת למכונות וירטואליות. התכונה 'העברת TCP ב-IAP' גם מספקת לכם שליטה מדויקת על המשתמשים שמורשים ליצור מנהרות ועל המכונות הווירטואליות שהמשתמשים מורשים להתחבר אליהן.

בסקירה הכללית על העברת TCP תוכלו לקרוא איך העברת TCP ב-IAP פועלת.

לפני שמתחילים

כדי להכין את הסביבה לשימוש ב-IAP להעברת TCP, מבצעים את השלבים הבאים:

  1. בוחרים פרויקט קיים או יוצרים פרויקט חדש ב- Google Cloud Google Cloud ומוודאים שהחיוב מופעל.

  2. אם אתם מתכוונים להשתמש בשורת הפקודה, עליכם להתקין ולהפעיל את 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 לכל מופעי מכונות וירטואליות ברשת, מבצעים את הפעולות הבאות:

  1. פותחים את הדף Firewall Rules (כללים של חומת האש).

    פתיחת הדף Firewall Rules

    שאר השלבים יופיעו במסוף Google Cloud .

  2. בוחרים פרויקט Google Cloud .
  3. בדף 'כללים של חומת אש', לוחצים על יצירת כלל של חומת אש.
  4. קובעים את ההגדרות הבאות:
    • Name (שם): allow-ingress-from-iap
    • כיוון התנועה: כניסה
    • טירגוט: כל המופעים ברשת
    • מסנן מקור: טווח כתובות IP
    • טווח כתובות ה-IP של המקור: 35.235.240.0/20
    • פרוטוקולים ויציאות: בוחרים באפשרות TCP ומזינים 3389,22 כדי לאפשר גם RDP וגם SSH.
  5. לוחצים על יצירה.

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 הנדרשים ברמת הפרויקט:

המסוף

  1. פותחים את הדף IAM & Admin במסוף Google Cloud .

    פתיחת הדף IAM & Admin

    שאר השלבים יופיעו במסוף Google Cloud .

  2. בדף IAM ואדמין, לוחצים על הוספה ומגדירים את האפשרויות הבאות:
    • New principals (ישויות מורשות חדשות): מציינים את המשתמש או הקבוצה שרוצים להעניק להם גישה.
    • Select a role (בחירת תפקיד): בוחרים באפשרות Cloud IAP > IAP-Secured Tunnel User (Cloud IAP > משתמש במנהרה מאובטחת של IAP).
  3. אופציונלי: לוחצים על הוספת תנאי ומגדירים תנאי:
    • שם: מזינים שם לתנאי.
    • ביטוי: מזינים תנאי שמשתמש צריך לעמוד בו כדי לקבל את ההרשאות בתפקיד 'משתמש מנהרה באבטחת IAP'.

    לדוגמה, ביטוי ה-CEL הבא מעניק גישה רק ליציאה 22:

    destination.port == 22
  4. לוחצים על Add another role ומגדירים את האפשרויות הבאות:
    • Select a role (בחירת תפקיד) בוחרים באפשרות Compute Engine > Compute Instance Admin (v1) (‏Compute Engine > אדמין של מכונות וירטואליות (גרסה 1)).
  5. לוחצים על 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 במכונה הווירטואלית הזו. צריך להקצות את התפקידים האחרים בפרויקט.

המסוף

  1. פותחים את דף האדמין של IAP ובוחרים בכרטיסייה SSH and TCP Resources (משאבי SSH ו-TCP).

    פתיחה של דף האדמין של IAP

    שאר השלבים יופיעו במסוף Google Cloud .

  2. בכרטיסייה SSH and TCP Resources בדף האדמין של IAP, בוחרים את מכונות ה-VM שרוצים להגדיר.
  3. אם חלונית המידע לא מוצגת, לוחצים על Show info panel.
  4. לוחצים על Add principal ומגדירים את האפשרויות הבאות:

    • New principals (ישויות מורשות חדשות): מציינים את המשתמש או הקבוצה שרוצים להעניק להם גישה.
    • Select a role (בחירת תפקיד): בוחרים באפשרות Cloud IAP > IAP-Secured Tunnel User (Cloud IAP > משתמש במנהרה מאובטחת של IAP).
  5. אפשר גם ללחוץ על הוספת תנאי ולהגדיר תנאי:

    • שם: מזינים שם לתנאי.
    • ביטוי: מזינים תנאי שמשתמש צריך לעמוד בו כדי לקבל את ההרשאות בתפקיד 'משתמש מנהרה באבטחת 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

  6. לוחצים על Save.

API

כדי לערוך את קובץ policy.json של האפליקציה, פועלים לפי התהליך הבא. מידע נוסף על שימוש בממשק ה-API של IAM לניהול מדיניות גישה זמין במאמר ניהול גישה למשאבים שמאובטחים באמצעות IAP.

  1. מייצאים את המשתנים הבאים.

    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
    

  2. מקבלים את מדיניות IAM של מכונת Compute Engine באמצעות השיטה getIamPolicy. ביט הנתונים הריק בסוף הופך את הבקשה curl ל-POST במקום ל-GET.

    curl -i -H "Authorization: Bearer $(gcloud auth print-access-token)" \
         ${IAP_BASE_URL}/zones/