ניהול הגישה למשאבים שמוגנים על ידי IAP

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

סקירה כללית

אתם יכולים להשתמש ב-IAP כדי להגדיר כללי מדיניות של IAP למשאבים ספציפיים ולמשאבים של Cloud Run בפרויקט ב- Google Cloud . לכל אחת מהאפליקציות בפרויקט יכולה להיות מדיניות גישה שונה. היכולת הזו רלוונטית לפרויקטים שיש בהם אפליקציות של Compute Engine, ‏ Google Kubernetes Engine ו-App Engine. באפליקציות של App Engine, אפשר להחיל כללי מדיניות גישה שונים על גרסאות ושירותים נפרדים.

כדי לנהל את הגישה ברמת הפרויקט ומעלה, נכנסים לדף IAM. רשימות של משתמשים שיש להם גישה (חשבונות המשתמשים) ברמת הפרויקט חלות על כל המשאבים שמאובטחים באמצעות IAP בפרויקט.

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

לפני שמתחילים, צריך:

  • משאב שמאובטח באמצעות IAP, שרוצים להוסיף לו גישה לאדם פרטי או לקבוצה.
  • שמות של משתמשים או קבוצות שרוצים להוסיף להם גישה.

הפעלה והשבתה של IAP

כדי להפעיל ולהשבית את IAP, נדרשות הרשאות מסוימות. בטבלה הבאה מוצגת ההרשאה הנדרשת לכל סוג אפליקציה.

סוג אפליקציה נדרשת הרשאה
App Engine appengine.applications.update
‫Compute Engine,‏ Google Kubernetes Engine או Cloud Run compute.backendServices.update
ההרשאות האלה ניתנות על ידי תפקידים כמו עריכת פרויקט, אדמין של App Engine ואדמין רשת של Compute. למרות שהתפקידים האלה מאפשרים להפעיל ולהשבית את IAP, אין להם את ההרשאות שנדרשות כדי לשנות את כללי מדיניות הגישה.

בנוסף, כדי להפעיל את IAP באמצעות מסוף Google Cloud , יכול להיות שיהיה צורך גם בהרשאות clientauthconfig.clients.create, ‏ clientauthconfig.clients.update ו-clientauthconfig.clients.getWithSecret. ההרשאות האלה ניתנות על ידי התפקיד "עריכת פרויקט".

במאמר הענקה, שינוי וביטול של גישה מוסבר איך נותנים תפקידים למשתמשים.

ניהול הגישה במסוף Google Cloud

כדי לשלוט בגישה למשאב שמאובטח באמצעות IAP באמצעות מסוףGoogle Cloud , צריך לפעול לפי התהליך להוספה או להסרה של גישה.

הוספת גישה

  1. נכנסים לדף Identity-Aware Proxy.
    כניסה לדף Identity-Aware Proxy

  2. בוחרים את המשאב שרוצים לאבטח באמצעות IAP. הבחירות הבאות של משאבים מאבטחות קבוצה מוגדרת של משאבים:

    • כל שירותי האינטרנט: כל המשאבים בפרויקט יהיו מאובטחים. חשוב לדעת שזה לא אותו דבר כמו לתת גישה ברמת הפרויקט באמצעות דף הניהול של IAM. למשתמש שהוקצה לו התפקיד אדמין של מדיניות IAP ברמת המשאב כל שירותי האינטרנט יהיו הרשאות רק למדיניות IAP.

    • שירותים לקצה העורפי: כל השירותים לקצה העורפי יהיו מאובטחים.

  3. בחלונית המידע שבצד שמאל, מוסיפים את כתובות האימייל של הקבוצות או המשתמשים שרוצים לתת להם תפקיד ב-IAM (הפלטפורמה לניהול זהויות והרשאות גישה) במשאב.

  4. כדי להחיל תפקידים של מדיניות גישה על חשבון המשתמש, בוחרים מהתפקידים הבאים בתפריט הנפתח Select a role:

    • בעלים: מקבל את אותה גישה כמו אדמין מדיניות IAP. במקום זאת, צריך להשתמש בתפקיד אדמין מדיניות IAP. התפקיד הזה מאפשר רק לשנות את כללי המדיניות, ולא נותן גישה לאפליקציה.

    • אדמין של מדיניות IAP: מקבל הרשאות אדמין על כללי המדיניות של IAP.

    • משתמש של אפליקציית אינטרנט באבטחת IAP: מעניק גישה לאפליקציה ולמשאבי HTTPS אחרים שמשתמשים ב-IAP.

    • בודק אבטחה: נותן הרשאה לצפות בכללי המדיניות של IAP ולבצע בהם ביקורת.

  5. כשמסיימים להוסיף כתובות אימייל ולהגדיר תפקידים, לוחצים על הוספה.

הסרת הגישה

  1. נכנסים לדף Identity-Aware Proxy.
    כניסה לדף Identity-Aware Proxy
  2. בוחרים את המשאב שמאובטח באמצעות IAP.
  3. ב-Info panel שבצד ימין, בוחרים את הקטע שמתאים לתפקיד שרוצים להסיר מהחשבון הראשי.
  4. בקטע המורחב, לצד כל שם של משתמש או קבוצה שרוצים להסיר את התפקיד שלהם, לוחצים על הסרה.
  5. בתיבת הדו-שיח Remove principal שמופיעה, לוחצים על Remove.

ניהול הגישה באמצעות ה-API

ב-IAM יש קבוצה סטנדרטית של שיטות ליצירה ולניהול של מדיניות בקרת גישה במשאבי Google Cloud .

משאבים והרשאות

באמצעות ה-API של IAP אפשר להחיל הרשאות IAM על משאבים ספציפיים בפרויקט שמאובטח באמצעות IAP. הרשאות IAM שניתנות ברמה מסוימת חלות על כל הרמות שמתחתיה. לדוגמה, הרשאה שניתנה ברמת הפרויקט חלה על כל המשאבים של Google Cloud בפרויקט. הגישה למשאבים ברמת הפרויקט וברמות גבוהות יותר מנוהלת בדף הניהול של IAM, אבל תוצג בדף הניהול של IAP.

המשתמשים צריכים הרשאות מסוימות כדי לגשת לאפליקציה שמאובטחת באמצעות IAP. כדי להעניק את ההרשאות האלה, אדמינים יכולים להשתמש ב-API כדי לעדכן את מדיניות ה-IAM. ההרשאה iap.webServiceVersions.accessViaIAP נותנת למשתמשים גישה לאפליקציה. אם אתם משתמשים ב-IAP כדי לשלוט בגישה לשירותי ניהול כמו SSH ו-RDP, המשתמשים יצטרכו את ההרשאה iap.tunnelInstances.accessViaIAP.

לכל משאב IAP יש הרשאת getIamPolicy ו-setIamPolicy משלו, שמאפשרת לנהל את מדיניות הגישה של המשאב הזה ושל הצאצאים שלו.

כדי לשלוח קריאה ל-IAM API, יוצרים קריאה עם נתיב כתובת ה-URL למשאב. הדוגמה הבאה היא קריאה שמקבלת את מדיניות ה-IAM של גרסת שירות של אפליקציה ב-App Engine.

https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web/
appengine-APP_ID/services/SERVICE_ID/versions/VERSION_ID:getIamPolicy

בטבלה הבאה מפורטים סוגי המשאבים הנתמכים, וגם ההרשאות שנדרשות כדי לשלוח קריאה ל-IAM API.

סוג המשאב הרשאות
כל אפליקציית אינטרנט שמאובטחת באמצעות IAP בפרויקט
האפשרות הזו זהה לתיבת הסימון כל שירותי האינטרנט בדף IAP.

Path
https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web
iap.web.getIamPolicy

iap.web.setIamPolicy
כל שירות לקצה העורפי בפרויקט
האפשרות הזו זהה לתיבת הסימון שירות לקצה העורפי בדף IAP.

נתיבים
היקף גלובלי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute

היקף אזורי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
כל כלל העברה בפרויקט
הרשאות לכל כללי ההעברה בפרויקט.

נתיבים
היקף גלובלי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule

היקף אזורי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
אזור לכל שירות Cloud Run בפרויקט
הרשאות לכל שירותי Cloud Run באזור בפרויקט.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/cloud_run-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
שירות Cloud Run
הרשאות לשירות Cloud Run. כל שירותי Cloud Run הם אזוריים.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/cloud_run-REGION_NAME/services/SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
אפליקציית App Engine
האפשרות הזו זהה לתיבת הסימון אפליקציית App Engine בדף IAP.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
שירות לקצה העורפי של Compute Engine
בנתיב של השירות לקצה העורפי אפשר לציין את מזהה השירות לקצה העורפי או את שם השירות לקצה העורפי.

נתיבים
היקף גלובלי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute/services/
BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME

היקף אזורי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME/
services/BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
כלל העברה ב-Compute Engine
הרשאות לכלל העברה. בנתיב של כלל ההעברה אפשר לציין את המזהה או את השם של כלל ההעברה.

נתיבים
היקף גלובלי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule/services/
FORWARDING_RULE_ID or FORWARDING_RULE_NAME

היקף אזורי:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME/
services/FORWARDING_RULE_ID or FORWARDING_RULE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
שירות של אפליקציית App Engine

נתיב
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
גרסת שירות של App Engine
ב-Compute Engine אין תמיכה בניהול גרסאות.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID/versions/VERSION_ID
iap.webServiceVersions.getIamPolicy

iap.webServiceVersions.setIamPolicy
כל מכונה וירטואלית שמאובטחת באמצעות IAP בפרויקט
האפשרות הזו זהה לתיבת הסימון All Tunnel Resources בדף IAP.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel
iap.tunnel.getIamPolicy

iap.tunnel.setIamPolicy
אזור שיש בו לפחות מכונה וירטואלית אחת
זהה לתיבת הסימון של שם האזור בדף IAP, לדוגמה, us-central1-c.

Path
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
iap.tunnelZones.getIamPolicy

iap.tunnelZones.setIamPolicy
מכונה וירטואלית ספציפית

נתיב
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
/instances/INSTANCE_ID or INSTANCE_NAME
iap.tunnelInstances.getIamPolicy

iap.tunnelInstances.setIamPolicy
אזור שיש בו לפחות קבוצת יעד אחת, לדוגמה, us-central1

נתיב
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
iap.tunnelLocations.getIamPolicy

iap.tunnelLocations.setIamPolicy
קבוצת יעדים ספציפית

נתיב
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
/destGroups/GROUP_NAME
iap.tunnelDestGroups.getIamPolicy

iap.tunnelDestGroups.setIamPolicy

תפקידים

בטבלה הבאה מפורטים תפקידי IAM ב-IAP, עם רשימה תואמת של כל ההרשאות הספציפיות ל-IAP שכל תפקיד כולל. מידע נוסף על תפקידי IAM מופיע במאמר ניהול תפקידים והרשאות.

תפקיד כולל הרשאות תיאור
משתמש של אפליקציית אינטרנט באבטחת IAP (roles/iap.httpsResourceAccessor) iap.webServiceVersions.accessViaIAP נותן גישה למשאבים של App Engine ו-Compute Engine.
משתמש מנהרה באבטחת IAP‏ (roles/iap.tunnelResourceAccessor) iap.tunnelInstances.accessViaIAP
iap.tunnelDestGroups.accessViaIAP
נותן גישה למכונות וירטואליות שמאובטחות באמצעות IAP.
אדמין של מדיניות IAP‏ (roles/iap.admin) iap.web.getIamPolicy
iap.web.setIamPolicy
iap.webTypes.getIamPolicy
iap.webTypes.setIamPolicy
iap.webServices.getIamPolicy
iap.webServices.setIamPolicy
iap.webServiceVersions.getIamPolicy
iap.webServiceVersions.setIamPolicy
iap.tunnel.getIamPolicy
iap.tunnel.setIamPolicy
iap.tunnelZones.getIamPolicy
iap.tunnelZones.setIamPolicy
iap.tunnelInstances.getIamPolicy
iap.tunnelInstances.setIamPolicy
מעניק זכויות אדמין ב-IAP לניהול כללי מדיניות הגישה של משאבים ב-IAP.

ניהול הגישה באמצעות Google Cloud CLI

אפשר גם לנהל את הגישה באמצעות Google Cloud CLI.

מניעת גישה

כללי מדיניות הדחייה של ניהול זהויות והרשאות גישה (IAM) מאפשרים לכם להגדיר שכבות הגנה על הגישה למשאבים של Google Cloud . כאן מפורטים תרחישים לדוגמה שבהם כדאי להשתמש בכללי מדיניות דחייה.

אתם יכולים ליצור כללי מדיניות דחייה ולכלול בהם את כל ההרשאות של IAP. כדי לראות את רשימת ההרשאות של IAP שאפשר להוסיף למדיניות דחייה, חפשו את iap.googleapis.com במאמר ההרשאות שנתמכות בכללי מדיניות הדחייה. אפשר להחיל את כללי מדיניות הדחייה על כל הרשאה ב-IAP, אבל היעילות שלהם קשורה לנקודת הצירוף של מדיניות הדחייה.

חלק מההרשאות של IAP תקפות רק ברמת המשאב הספציפי שלהן, ולא בצאצאים שלו. לדוגמה, iap.organizations.getSettings נותן גישה ל-getSettings ברמת הארגון, ולא לצאצאים של הארגון. כלומר, כשיוצרים כללי מדיניות דחייה, האדמינים צריכים לציין במפורש את כל ההרשאות הפרטניות הרלוונטיות כדי לדחות את הגישה בנקודת החיבור ובצאצאים שלה.

ברשימה המלאה של ההרשאות שנתמכות בכללי מדיניות הדחייה אפשר לראות את כל ההרשאות הפרטניות האלה. כל ההרשאות ב-FQDN iap.googleapis.com ובסוגי המשאבים iap.organizations, ‏ iap.folders, ‏ iap.projects, ‏ iap.web, ‏ iap.webTypes,‏ iap.webServices, ‏ iap.webServicesVersions הן הרשאות פרטניות.

הדוגמה הבאה ממחישה מדיניות דחייה ב-IAM, שמונעת גישה ל-API של getSettings לחשבון משתמש בארגון ובצאצאים שלו.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/iap.organizations.getSettings",
          "iap.googleapis.com/iap.folders.getSettings",
          "iap.googleapis.com/iap.projects.getSettings",
          "iap.googleapis.com/iap.web.getSettings",
          "iap.googleapis.com/iap.webTypes.getSettings",
          "iap.googleapis.com/iap.webServices.getSettings",
          "iap.googleapis.com/iap.webServicesVersions.getSettings",
        ],
      }
    }
  ]
}

במקום לציין את כל ההרשאות הפרטניות, הנה דוגמה למדיניות הדחייה ב-IAM עם הרשאה אחת בלבד: *.getSettings.

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/*.getSettings",
        ],
      }
    }
  ]
}

בהמשך מפורטות כמה דרכים פשוטות יותר ליצור מדיניות דחייה ב-IAM, בלי לציין את כל ההרשאות ברמת הפירוט.

פעולת אדמין הרשאה במדיניות דחייה
דחיית הרשאות ספציפיות של IAP בכל סוגי המשאבים של IAP *.updateSettings
*.getSettings
*.setIamPolicy
*.getIamPolicy
דחיית כל ההרשאות של IAP בסוג משאב ספציפי iap.organizations.*
iap.folders.*
iap.projects.*
iap.web.*
iap.webTypes.*
iap.webServices.*
iap.webServicesVersions.*

גישה ציבורית

כדי לתת לכולם גישה למשאב, צריך להקצות תפקיד לאחד מהחשבונות הראשיים הבאים:

  • ‫allAuthenticatedUsers: כל מי שמאומת באמצעות חשבון Google או חשבון שירות.

  • ‫allUsers: כל משתמש באינטרנט, כולל משתמשים מאומתים ולא מאומתים. הכותרת החתומה של הבקשה לא תכלול הצהרה מסוג sub או email.

אם ניתנה גישה ציבורית, IAP לא ייצור יומני ביקורת של Cloud לבקשה.

נכון לעכשיו, אי אפשר לשייך תנאי לקישורים שמעניקים גישה ציבורית. לדוגמה, מדיניות שמאפשרת לכל אחד לגשת למשאב אם נתיב הבקשה מתחיל ב-/public/ היא לא חוקית.