הגדרת SCIM ב-Microsoft Entra ID

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

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

הדגל --claim-mapping לדייר SCIM יכול להכיל רק ביטויים ספציפיים של Common Expression Language ‏ (CEL). כדי לראות אילו ביטויים נתמכים, אפשר לעיין במאמר מיפוי של מאפייני טוקן ו-SCIM.

כדי להגדיר מערכת לניהול זהויות בכמה דומיינים (SCIM), מבצעים את הפעולות הבאות:
  1. הגדרת דייר וטוקן SCIM ב- Google Cloud
  2. הגדרת SCIM ב-Microsoft Entra ID
  3. עדכון הספק כדי להפעיל SCIM
  4. אימות הסנכרון של SCIM

הגדרת דייר וטוקן SCIM ב- Google Cloud

כדי להגדיר דייר SCIM ב- Google Cloud:

  1. יוצרים דייר SCIM.

        gcloud iam workforce-pools providers scim-tenants create SCIM_TENANT_ID \
            --workforce-pool="WORKFORCE_POOL_ID" \
            --provider="PROVIDER_ID" \
            --display-name="SCIM_TENANT_DISPLAY_NAME" \
            --description="SCIM_TENANT_DESCRIPTION" \
            --claim-mapping="CLAIM_MAPPING" \
            --location="global"
        

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

    • SCIM_TENANT_ID: מזהה של דייר SCIM.
    • WORKFORCE_POOL_ID: המזהה של מאגר כוח העבודה שיצרתם קודם במסמך הזה.
    • PROVIDER_ID: המזהה של ספק הזהויות של כוח העבודה שיצרתם קודם במסמך הזה.
    • SCIM_TENANT_DISPLAY_NAME: השם המוצג של דייר SCIM.
    • SCIM_TENANT_DESCRIPTION: תיאור של דייר SCIM.
    • CLAIM_MAPPING: רשימה מופרדת בפסיקים של מיפויי מאפיינים. רשימה מורחבת של מאפייני מיפוי זמינה במאמר מיפוי של מאפייני טוקן ו-SCIM. מומלץ להשתמש במיפוי הבא ב-Gemini Enterprise:
      google.subject=user.emails[0].value.lowerAscii(),google.group=group.externalId

      המאפיין google.subject שאתם ממפים בדייר SCIM חייב להתייחס באופן ייחודי לאותן זהויות שממופות במאפיין google.subject בספק הזהויות של כוח העבודה, באמצעות הדגל --attribute-mapping. אחרי שיוצרים את דייר SCIM, אי אפשר לעדכן את מיפוי הטענות. כדי להחליף אותו, אפשר למחוק את דייר SCIM באופן סופי וליצור מיד דייר חדש. מידע נוסף על שיקולים לשימוש ב-SCIM זמין במאמר בנושא תמיכה ב-SCIM.

  2. בסיום הפקודה, מבצעים את הפעולות הבאות:

    1. בשדה baseUri בפלט, שומרים את מזהה ה-URI כולו, בפורמט https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID. צריך לספק את ה-URI הזה ל-IdP.
    2. בנוסף, מה-URI, שומרים רק את SCIM_TENANT_UID. תצטרכו את ה-UID הזה כדי להגדיר מדיניות הרשאה ב-IAM בדייר SCIM בהמשך המסמך הזה.
  3. יצירת טוקן SCIM:

        gcloud iam workforce-pools providers scim-tenants tokens create SCIM_TOKEN_ID \
            --display-name DISPLAY_NAME \
            --scim-tenant SCIM_TENANT_ID \
            --workforce-pool WORKFORCE_POOL_ID \
            --provider PROVIDER_ID \
            --location global
        

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

    • SCIM_TOKEN_ID: מזהה לאסימון SCIM
    • DISPLAY_NAME: השם המוצג של אסימון SCIM
    • WORKFORCE_POOL_ID: המזהה של מאגר כוח העבודה
    • SCIM_TENANT_ID: מזהה דייר SCIM
    • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה
  4. אחרי שהפקודה gcloud iam workforce-pools providers scim-tenants tokens create מסתיימת, מבצעים את הפעולות הבאות:

    1. בפלט, שומרים את הערך של SCIM_TOKEN בשדה securityToken. צריך לספק את אסימון האבטחה הזה ל-IdP. אסימון האבטחה מוצג רק בפלט הזה, ואם הוא הולך לאיבוד, צריך ליצור אסימון SCIM חדש.

    2. כדי לבדוק אם SCIM_TOKEN נדחה על ידי מדיניות הארגון, מריצים את הפקודה הבאה:

      curl -v -H "Authorization: Bearer SCIM_TOKEN"  https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users

      אם הפקודה נכשלת עם שגיאה שקשורה להרשאות, מריצים את הפקודה gcloud organizations add-iam-policy-binding שמתוארת בשלב מאוחר יותר. אם הפקודה מצליחה, אפשר לדלג על השלב הזה.

  5. מגדירים מדיניות הרשאות IAM בדייר ובאסימון SCIM. אם הפקודה curl בשלב הקודם נכשלה בגלל שגיאה שקשורה להרשאות, צריך להריץ את הפקודה הבאה:

        gcloud organizations add-iam-policy-binding ORGANIZATION_ID \
            --member=serviceAccount:SERVICE_AGENT_EMAIL \
            --role roles/iam.scimSyncer
        

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

    • ORGANIZATION_ID: מזהה הארגון.
    • SERVICE_AGENT_EMAIL: כתובת האימייל של סוכן השירות. כתובת האימייל היא בפורמט הבא: o-ORGANIZATION_ID-SCIM_TENANT_UID@gcp-sa-iamscim.iam.gserviceaccount.com. ‫SCIM_TENANT_UID מוחזר כשיוצרים את דייר SCIM.

כשמקצים קבוצות בספק הזהויות, צריך לוודא שהשם המוצג של כל קבוצה, כפי שמצוין בשדה displayName, הוא ייחודי בדייר SCIM. מידע נוסף על קבוצות ועל SCIM ב-Microsoft Entra ID זמין במאמר Groups.

הגדרת SCIM ב-Microsoft Entra ID

כדי להגדיר SCIM ב-Microsoft Entra ID, מבצעים את הפעולות הבאות:

  1. פותחים את פורטל Azure ונכנסים כמשתמש עם הרשאות אדמין גלובליות.
  2. בוחרים באפשרות Microsoft Entra ID > Enterprise Apps (אפליקציות ארגוניות).
  3. לוחצים על New application (אפליקציה חדשה).
  4. בקטע Browse Microsoft Entra App gallery (חיפוש בגלריית האפליקציות של Microsoft Entra), לוחצים על Create your own application (יצירת אפליקציה משלכם).
  5. בחלונית Create your own application שמופיעה, מבצעים את הפעולות הבאות:
    1. בשדה What's the name of your app (מה שם האפליקציה שלך), מזינים את שם האפליקציה.
    2. בוחרים באפשרות Integrate any other application you don't find in gallery (Non-gallery) (שילוב של אפליקציה אחרת שלא מופיעה בגלריה).
    3. כדי ליצור את האפליקציה, לוחצים על Create.
  6. באפליקציה, מבצעים את הפעולות הבאות:
    1. בקטע ניהול, לוחצים על הקצאת הרשאות.
    2. בחלונית השמאלית שמופיעה, לוחצים על הגדרה חדשה.
    3. בקטע Admin Credentials (פרטי הכניסה של האדמין), בשדה Tenant URL (כתובת ה-URL של הדייר), מזינים את כתובת ה-URL של SCIM שהתקבלה כשנוצר דייר SCIM, עם התוספת ?aadOptscim062020. צריך להוסיף את המחרוזת ?aadOptscim062020 לסוף של ה-URI הבסיסי.

      פרמטר השאילתה הזה נדרש על ידי Microsoft Entra ID כדי לוודא שבקשות SCIM PATCH תואמות לתקני SCIM RFC. פרטים נוספים מופיעים במאמרי העזרה של מיקרוסופט.

      כתובת ה-URL הסופית של הדייר ב-Microsoft Entra ID צריכה להיות בפורמט הבא:

      https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID?aadOptscim062020

      מחליפים את SCIM_TENANT_UID ב-UID של הדייר ב-SCIM.

    4. בשדה Secret token (אסימון סודי), מזינים את האסימון הסודי שקיבלתם כשייצרתם את אסימון SCIM.
    5. כדי לבדוק את הגדרת SCIM באמצעות איחוד שירותי אימות הזהות של כוח העבודה, לוחצים על בדיקת החיבור.
    6. כדי לשמור את ההגדרות, לוחצים על Create.
  7. בקטע Manage (ניהול), מבצעים את הפעולות הבאות:
    1. לוחצים על מיפוי מאפיינים.
    2. לוחצים על Provision Microsoft Entra ID Users (הקצאת משתמשים ב-Microsoft Entra ID).
    3. בדף מיפוי מאפיינים, מבצעים את הפעולות הבאות:
      1. בטבלה מיפוי מאפיינים, מאתרים את השורה של externalId ולוחצים על עריכה בשורה הזו. בדף Edit attributes (עריכת מאפיינים), מבצעים את הפעולות הבאות:
        1. ברשימה הנפתחת מאפיין המקור, בוחרים באפשרות objectId.
        2. לוחצים על אישור.
      2. כדי לשמור את מיפוי המאפיינים, לוחצים על Save.

עדכון הספק כדי להפעיל את SCIM

כדי להפעיל SCIM לפלאגין שמתממשק עם שירותים חיצוניים:

OIDC

      gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

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

  • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה
  • WORKFORCE_POOL_ID: המזהה של מאגר כוח העבודה
  • LOCATION: המיקום של מאגר כוח העבודה

SAML

      gcloud iam workforce-pools providers update-saml PROVIDER_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --location=LOCATION \
          --scim-usage=enabled-for-groups
    

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

  • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה
  • WORKFORCE_POOL_ID: המזהה של מאגר כוח העבודה
  • LOCATION: המיקום של מאגר כוח העבודה

כדי לאמת את סנכרון SCIM, אפשר לעיין במאמר אימות סנכרון SCIM.

מיפוי של אסימונים ומאפייני SCIM

אתם צריכים למפות את המאפיינים באופן עקבי, גם בספק של מאגר הזהויות של כוח העבודה וגם בדייר SCIM שהוגדר לספק. לספק הזהויות של כוח העבודה משתמשים בדגל --attribute-mapping, ולדייר SCIM משתמשים בדגל --claim-mapping. מאפיין IdP שממופה ל-google.subject עבור משתמשים צריך להתייחס באופן ייחודי לאותה זהות, בין אם הוא מוגדר במיפוי של טוקן או SCIM. מידע נוסף על מיפוי מאפיינים כשמשתמשים ב-SCIM זמין בקטע תמיכה ב-SCIM. בטבלה הבאה מוסבר איך למפות מאפיינים בהצהרות על אסימונים ובמאפייני SCIM:

מאפיין של Google מיפוי של ספק מאגר זהויות של כוח עבודה מיפוי דיירים ב-SCIM
google.subject assertion.oid user.externalId
google.subject assertion.attributes['http://schemas.microsoft.com/identity/claims/objectidentifier'][0] user.externalId
google.subject assertion.email user.emails[0].value
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0] user.emails[0].value
google.subject assertion.email.lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'][0].lowerAscii() user.emails[0].value.lowerAscii()
google.subject assertion.preferred_username user.userName
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0] user.userName
google.subject assertion.preferred_username.lowerAscii() user.userName.lowerAscii()
google.subject assertion.attributes['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'][0].lowerAscii() user.userName.lowerAscii()
google.group חשוב לעדכן את הספק עם --scim-usage=enabled-for-groups N/A group.externalId

אימות הסנכרון של SCIM

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

אימות סנכרון המשתמשים

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

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Users?filter=userName%20eq%20%22USER_NAME%22"

דוגמה לתגובה:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "USER_ID",
      "userName": "USER_NAME",
      ...
    }
  ]
}

אימות של סנכרון קבוצות

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

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=displayName%20eq%20%22GROUP_NAME%22"

דוגמה לתגובה:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

אימות החברות בקבוצה

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

curl -H "Authorization: Bearer SCIM_TOKEN" \
  "https://iamscim.googleapis.com/v1alpha1/tenants/SCIM_TENANT_UID/Groups?filter=id%20eq%20%22GROUP_ID%22%20and%20members%20eq%20%22USER_ID%22"

דוגמה לתגובה אם המשתמש הוא חבר מועדון:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 1,
  "Resources": [
    {
      "id": "GROUP_ID",
      "displayName": "GROUP_NAME",
      ...
    }
  ]
}

דוגמה לתשובה אם המשתמש לא מנוי:

{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 0,
  "Resources": []
}

הערה: כדי לקבל את הערכים GROUP_ID ו-USER_ID, קודם צריך למצוא את הקבוצה והמשתמש באמצעות המסננים displayName ו-userName. המזהים מוחזרים בשדה id של התשובה. מחליפים את SCIM_TOKEN,‏ SCIM_TENANT_UID,‏ USER_NAME,‏ GROUP_NAME,‏ GROUP_ID ו-USER_ID בערכים בפועל.

מחיקה בכוח של דייר SCIM

כדי למחוק דייר SCIM בכוח:

  1. אם --scim-usage=enabled-for-groups מוגדר אצל הספק שלכם, משביתים אותו בהגדרת הספק:
              gcloud iam workforce-pools providers update-oidc PROVIDER_ID \
                  --workforce-pool=WORKFORCE_POOL_ID \
                  --location=LOCATION \
                  --scim-usage=SCIM_USAGE_UNSPECIFIED
            

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

    • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה
    • WORKFORCE_POOL_ID: המזהה של מאגר כוח העבודה
    • LOCATION: המיקום של מאגר כוח העבודה

  2. מחיקת הדייר ב-SCIM:
      gcloud iam workforce-pools providers scim-tenants delete SCIM_TENANT_ID \
          --workforce-pool=WORKFORCE_POOL_ID \
          --provider=PROVIDER_ID \
          --hard-delete \
          --location=global
    

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

    • SCIM_TENANT_ID: המזהה של דייר SCIM למחיקה
    • WORKFORCE_POOL_ID: המזהה של מאגר כוח העבודה
    • PROVIDER_ID: המזהה של ספק מאגר הזהויות של כוח העבודה
    מידע נוסף על SCIM, כולל מחיקה של דיירים ב-SCIM, זמין במאמר תמיכה ב-SCIM.

המאמרים הבאים