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

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

סקירה כללית

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

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

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

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

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

הפעלה והשבתה של רכישות מתוך האפליקציה

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

סוג אפליקציה נדרשת הרשאה
App Engine appengine.applications.update
‫Compute Engine,‏ Google Kubernetes Engine או Cloud Run compute.backendServices.update

ההרשאות האלה ניתנות על ידי תפקידים כמו 'עריכת פרויקט', 'אדמין של App Engine' ו'אדמין רשת של Compute'. התפקידים האלה מאפשרים להפעיל ולהשבית את הרכישות מתוך האפליקציה, אבל אין להם את ההרשאות שנדרשות לשינוי מדיניות הגישה.

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

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

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

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

הוספת גישה

  1. עוברים אל הדף של שרת Proxy לאימות זהויות (IAP).
    כניסה לדף 'שרת proxy לאימות זהויות (IAP)'

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

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

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

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

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

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

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

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

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

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

הסרת הגישה

  1. עוברים אל הדף של שרת Proxy לאימות זהויות (IAP).
    כניסה לדף 'שרת proxy לאימות זהויות (IAP)'
  2. בוחרים את המשאב שמאובטח באמצעות IAP.
  3. בחלונית המידע בצד שמאל, בוחרים את הקטע שמתאים לתפקיד שרוצים להסיר מבעל הרשאה.
  4. בקטע המורחב, לצד השם של כל משתמש או קבוצה שרוצים להסיר מהם את התפקיד, לוחצים על הסרה.
  5. בתיבת הדו-שיח Remove principal שמופיעה, לוחצים על Remove.

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

ב-IAM יש קבוצה סטנדרטית של methods ליצירה ולניהול של כללי מדיניות לבקרת גישה במשאבים. 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 באזור בפרויקט.

נתיב
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 הם אזוריים.

נתיב
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
An App Engine service version
Compute Engine doesn't support versioning.

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
זהה לתיבת הסימון כל משאבי המנהרה בדף הניהול של IAP.

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

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

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

רשימה מלאה של הרשאות גרנולריות כאלה זמינה במאמר ההרשאות שנתמכות בכללי מדיניות הדחייה. כל ההרשאות תחת שם הדומיין שמוגדר במלואו 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.organizations.*
iap.folders.*
iap.projects.*
iap.web.*
iap.webTypes.*
iap.webServices.*
iap.webServicesVersions.*

גישה ציבורית

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

  • allAuthenticatedUsers: כל מי שעבר אימות באמצעות חשבון Google או חשבון שירות.
  • allUsers: כל משתמש באינטרנט, כולל משתמשים מאומתים ולא מאומתים. בכותרת החתומה של הבקשה לא יהיה sub או email claim.

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

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