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

בדף הזה מוסבר איך להגדיר שרת 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.

פתרון בעיות

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