הגדרת IAP עם איחוד שירותי אימות הזהות של כוח העבודה

בדף הזה מוסבר איך להגדיר את Identity-Aware Proxy ‏ (IAP) לשימוש באיחוד שירותי אימות הזהות של כוח עבודה.

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

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

  • הפניה אוטומטית של משתמש קצה לספק זהויות חיצוני, כמו Okta, כדי להיכנס לחשבון.
  • הגדרת סשן כניסה בין 15 דקות ל-12 שעות.
  • לאפשר רק למשתמשי קצה ספציפיים או לקבוצות משתמשי קצה ב-IdP לגשת לאפליקציה.
  • מגדירים את ההקשר שבו משתמש קצה יכול לגשת לאפליקציה. לדוגמה, אפשר לאפשר גישה רק בשעה מסוימת ביום.

אפשר להשתמש ב-IAP עם איחוד שירותי אימות הזהות של כוח עבודה בכל המשאבים הקיימים ומאזני העומסים ש-IAP תומך בהם.

הגדרת IAP עם איחוד שירותי אימות הזהות של כוח העבודה לאפליקציה

הגדרת IAP באמצעות איחוד שירותי אימות הזהות של כוח העבודה כוללת את המשימות העיקריות הבאות:

  1. הגדרת ספק ומאגר זהויות של כוח עבודה.
  2. יוצרים מזהה לקוח וסוד לקוח ב-OAuth.
  3. מפעילים את IAP ומגדירים אותו לשימוש באיחוד שירותי אימות הזהות של כוח העבודה.

הגדרת ספק ומאגר זהויות של כוח העבודה

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

כשמגדירים את משך הזמן של הסשן, כדאי לעיין במאמר ניהול IAP באמצעות סשנים של איחוד שירותי אימות הזהות של כוח העבודה.

אם רוצים למפות כתובת אימייל מספק זהויות של צד שלישי אל Google Cloud, צריך להוסיף מיפוי מאפיינים בספק מאגר הזהויות של כוח העבודה עבור google.email. לדוגמה: google.email=assertion.email.

יצירת מזהה לקוח וסוד לקוח ב-OAuth

  1. פועלים לפי ההוראות ליצירת מזהה לקוח וסוד לקוח ב-OAuth בפרויקט באותו ארגון שבו נמצא מאגר כוח העבודה שבו תשתמשו להגדרה הזו. הפרויקט לא חייב להיות אותו פרויקט שבו נמצא המשאב שמוגן באמצעות IAP. כשיוצרים את מזהה הלקוח ואת סוד הלקוח ב-OAuth, צריך לבצע את הפעולות הבאות:

    1. כשיוצרים את מזהה הלקוח, משתמשים ב-placeholder לכתובת ה-URI להפניה אוטומטית. אחרי שיוצרים את מזהה הלקוח, מריצים describe לקוח OAuth כדי לקבל את clientID שנוצר.

    2. אחרי שמקבלים את clientID, מריצים את update לקוח OAuth כדי לעדכן את allowed-redirect-uris לערך הבא: https://iap.googleapis.com/v1/oauth/clientIds/$CLIENT_ID:handleRedirect.

      כאשר CLIENT_ID הוא clientID שאוחזר בשלב הקודם.

    3. אחרי שיוצרים את סוד הלקוח, מריצים את describe פרטי הכניסה של לקוח OAuth כדי לקבל את clientSecret שנוצר.

    שומרים את clientId ואת clientSecret כי תצטרכו אותם בשלבים הבאים.

הפעלת IAP לשימוש באיחוד שירותי אימות הזהות של כוח העבודה

כדי להפעיל את IAP באמצעות איחוד שירותי אימות הזהות של כוח העבודה, מבצעים את השלבים הבאים.

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

מפעילים את IAP במשאב.

console

  1. במסוף Google Cloud , פותחים את הדף IAP.
    כניסה לדף IAP
  2. בוחרים פרויקט. הפרויקט צריך להיות באותו ארגון כמו מאגר הזהויות של כוח העבודה שיצרתם קודם. הפרויקט לא חייב להיות הפרויקט שבו יצרתם את מזהה הלקוח ואת סוד הלקוח ב-OAuth.
  3. לוחצים על הכרטיסייה Applications (אפליקציות) ומאתרים את האפליקציה שרוצים להגביל את הגישה אליה באמצעות IAP.
  4. בעמודה 'רכישות מתוך האפליקציה', מעבירים את המתג למצב מופעל.

gcloud

כדי להשתמש ב-CLI של gcloud כדי להפעיל את IAP, פועלים לפי ההליך של השירות הרלוונטי:

API

  1. יוצרים קובץ settings.json.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled":true,
     }
    }
    EOF
    
  2. מפעילים את IAP ב-App Engine.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap.enabled"
    

    כדי להפעיל את IAP ב-Compute Engine, משתמשים בכתובת ה-URL הבאה: https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME?updateMask=iap.enabled.

עדכון ההגדרות של הרכישות מתוך האפליקציה

כדי להגדיר את IAP לשימוש באיחוד שירותי אימות הזהות של כוח העבודה, צריך להגדיר את ההגדרות הבאות:

  • ‫WorkforceIdentitySettings: מזהה הלקוח וסוד הלקוח ב-OAuth שנוצרו קודם.
  • ‫IdentitySources: מקור הזהות.

מידע נוסף מופיע במאמר ממשקי API של IAP.

gcloud

  1. יוצרים קובץ iap_settings.yaml לפי הדוגמה הבאה.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.yaml
    access_settings:
      identity_sources: ["WORKFORCE_IDENTITY_FEDERATION"]
      workforce_identity_settings:
        workforce_pools: ["$WORKFORCE_POOL_NAME"]
        oauth2:
          client_id: "$CLIENT_ID"
          client_secret: "$CLIENT_SECRET"
    EOF
    
  2. מריצים את הפקודה הבאה כדי לעדכן את הגדרות ה-IAP של המשאב.

    gcloud iap settings set iap_settings.yaml --project=PROJECT --resource-type=RESOURCE_TYPE --service=SERVICE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT: מזהה הפרויקט.
    • ‫RESOURCE_TYPE: סוג משאב IAP. סוג המשאב חייב להיות cloud-run (תצוגה מקדימה),‏ app-engine,‏ iap_web,‏ compute,‏ organization או folder.

      לסוג המשאב cloud-run, משתמשים בדגל --region כדי לציין את האזור שבו שירות Cloud Run נפרס.

    • ‫SERVICE: שם השירות. השלב הזה הוא אופציונלי גם ל-app-engine וגם ל-compute.

    פרטים על הפקודה זמינים במאמר gcloud iap settings set.

API

  1. יוצרים קובץ הגדרות iap_settings.json לפי הדוגמה הבאה.

    CLIENT_ID=clientId
    CLIENT_SECRET=clientSecret
    WORKFORCE_POOL_NAME=locations/global/workforcePools/test-pool
    cat <<EOF > iap_settings.json
    {
       "access_settings": {
         "identity_sources": ["WORKFORCE_IDENTITY_FEDERATION"],
         "workforce_identity_settings": {
           "workforce_pools": ["$WORKFORCE_POOL_NAME"],
           "oauth2": {
             "client_id": "$CLIENT_ID",
             "client_secret": "$CLIENT_SECRET",
           }
        }
      }
    }
    EOF
    
  2. משתמשים ב-CLI של gcloud כדי לקבל את שם המשאב, ואז מעתיקים את RESOURCE_NAME מהפלט כי תצטרכו אותו בשלב הבא.

    gcloud iap settings get \
        --project=PROJECT \
        --resource-type=RESOURCE_TYPE \
        --service=SERVICE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PROJECT: מזהה הפרויקט.
    • ‫RESOURCE_TYPE: סוג משאב IAP. סוג המשאב צריך להיות appengine,‏ iap_web,‏ compute,‏ organization,‏ folder או cloud_run-$REGION (תצוגה מקדימה), כאשר $REGION הוא האזור שבו שירות Cloud Run שלכם נפרס.
    • ‫SERVICE: שם השירות. השלב הזה הוא אופציונלי גם ל-app-engine וגם ל-compute.
  3. בפקודה הבאה, מחליפים את RESOURCE_NAME בערך של RESOURCE_NAME מהשלב הקודם.

    curl -X PATCH \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d @iap_settings.json \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:iapSettings?updateMask=iapSettings.accessSettings.identitySources,iapSettings.accessSettings.workforceIdentitySettings.workforcePools,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientId,iapSettings.accessSettings.workforceIdentitySettings.oauth2.clientSecret"
    

הענקת גישה למשאבים שמוגנים באמצעות IAP

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

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

console

  1. במסוף Google Cloud , פותחים את הדף IAP.
    כניסה לדף IAP
  2. בוחרים את המשאב שרוצים לאבטח באמצעות IAP.
  3. לוחצים על Add Principal ואז מוסיפים את מזהי החשבונות של הקבוצות או האנשים שרוצים להעניק להם תפקיד IAM למשאב.
  4. בקטע Assign roles (הקצאת תפקידים), בוחרים באפשרות IAP-Secured Web App User (משתמש באפליקציית אינטרנט מאובטחת באמצעות IAP).
  5. לוחצים על הוספה.

gcloud

מריצים את הפקודה הבאה.

gcloud iap web add-iam-policy-binding \
    --member=PRINCIPAL_IDENTIFIER \
    --role='roles/iap.httpsResourceAccessor' \
    --project=PROJECT_ID \
    --resource-type=RESOURCE_TYPE \
    --service=SERVICE \
    --condition=CONDITION

מחליפים את הערכים הבאים :

  • ‫PRINCIPAL_IDENTIFIER: מזהי החשבונות הראשיים.
  • ‫PROJECT_ID: מזהה הפרויקט.
  • ‫RESOURCE_TYPE: סוג משאב IAP, שיכול להיות app-engine או backend-services.
  • ‫SERVICE: (אופציונלי) שם השירות.
  • ‫CONDITION: (אופציונלי) תנאי IAM. הדוגמה הבאה מציגה תנאי שהוגדר עם רמות גישה:
expression="accessPolicies/12345678/accessLevels/iap_test_access_level" in request.auth.access_levels,title=iap-test-access-level,description=only access in weekdays

API

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

  1. קבלת הקישורים הקיימים של מדיניות ה-IAM.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d {} \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:getIamPolicy" -o iam_policy_bindings.json
    

    מחליפים את RESOURCE_NAME ב-RESOURCE_NAME שקיבלתם בשלב קודם.

  2. בקובץ iam_policy_bindings.json שהתקבל מהשלב הקודם, מסירים את השורות של הגרסה וה-etag, ומוסיפים את הקישור שרוצים להוסיף למזהה של החשבון הראשי. מידע נוסף על מדיניות ההרשאות

    {
      "bindings": [
        {
          // existing bindings
        },
        {
          "role": "roles/iap.httpsResourceAccessor",
          "members": [
          "principal://iam.googleapis.com/locations/global/workforcePools/iap-test-pool/subject/iap-test-subject"
          ],
          "condition": {
            "expression": "\"accessPolicies/12345678/accessLevels/iap_test_access_level\" in request.auth.access_levels",
            "title": "iap-test-access-level",
            "description": "only access in week days"
          }
        }
      ]
    }
    
  3. מעדכנים את הקישורים של מדיניות ה-IAM.

    curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Accept: application/json" \
      -H "Content-Type: application/json" \
      -d "{"policy":$(cat iam_policy_bindings.json)}" \
    "https://iap.googleapis.com/v1/RESOURCE_NAME:setIamPolicy"
    

    מחליפים את RESOURCE_NAME ב-RESOURCE_NAME שקיבלתם בשלב קודם.

מידע נוסף זמין במאמרים בנושא GetIamPolicy ו-SetIamPolicy.

(אופציונלי) הגדרת בקרת גישה מבוססת-הקשר

אפשר גם להגדיר כללי בקרת גישה מבוססת-הקשר לצורך הרשאה מתקדמת.

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

אימות פרוגרמטי

‫IAP תומך באימות JWT של חשבונות שירות לאפליקציות שהוגדרו עם איחוד שירותי אימות הזהות של עובדים. למידע נוסף, עיינו במאמר אימות באמצעות JWT של חשבון שירות.

הגבלות כשעובדים עם מאגרי כוח עבודה

  • לכל אפליקציה שמופעלת בה IAP, אפשר להגדיר רק מאגר אחד של כוח עבודה, והמאגר יכול להכיל רק ספק אחד.
  • מאגר כוח העבודה, מזהה הלקוח והסוד ב-OAuth והאפליקציות שמופעל בהן IAP צריכים להיות באותו ארגון.
  • אין תמיכה ברמות גישה למידע שקשור למכשיר.
  • אפשר להשתמש רק בהגדרות הבאות של IAP:
  • גישה פרוגרמטית באמצעות איחוד שירותי אימות הזהות של כוח העבודה נתמכת רק בחשבונות שירות של Google.

פתרון בעיות

מידע על פתרון בעיות זמין במאמר פתרון בעיות ושאלות נפוצות.