שימוש בלקוחות OAuth בהתאמה אישית עם IAP

במאמר הזה מוסבר מתי ואיך להשתמש בלקוחות OAuth מותאמים אישית עבור שרת proxy לאימות זהויות (IAP).

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

כדי לבצע את הפעולות הבאות, צריך להשתמש בהגדרת OAuth בהתאמה אישית:

  • ניהול הגישה לאפליקציות שמופעל בהן IAP למשתמשים חיצוניים מחוץ לארגון.
  • ניהול הגישה לאפליקציות אינטרנט שנמצאות בפרויקטים שלא שייכים לGoogle Cloud ארגון.
  • הצגת פרטי מותג בהתאמה אישית במסכי הסכמה במהלך אימות.

אפשר להגדיר לקוחות OAuth בהתאמה אישית ב-IAP או ישירות בפלטפורמה.

כשמשתמשים בלקוחות OAuth בהתאמה אישית, צריך להגדיר את מסך ההסכמה ל-OAuth. כדי שהמיתוג המותאם אישית יופיע במסך בקשת ההסכמה, צריך לשלוח בקשה לאימות על ידי Google. למידע נוסף על תהליך האימות, ראו הגדרת מסך הסכמה ל-OAuth.

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

השוואה בין לקוחות OAuth בניהול Google לבין לקוחות OAuth בהתאמה אישית

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

בטבלה הבאה מוצגת השוואה בין לקוח OAuth שמנוהל על ידי Google לבין לקוח OAuth בהתאמה אישית.

לקוח OAuth שמנוהל על ידי Google לקוח OAuth בהתאמה אישית
משתמשים פנימי בלבד פנימי וחיצוני
מותג Google Cloud brand מותג בבעלות הלקוח
הגדרת OAuth הוגדר על ידי Google הלקוח הוגדר
פרטי כניסה ל-OAuth בניהול Google בניהול של הלקוח
גישה לאפליקציה רק בדפדפן רצף פעולות בדפדפן וגישה פרוגרמטית

הגדרת דף המיתוג

כדי להגדיר את דף המיתוג המותאם אישית באמצעות מסוף Google Cloud :

  1. נכנסים לדף Branding של OAuth במסוף Google Cloud :

    מעבר לדף Branding

  2. לוחצים על שנתחיל?

  3. בקטע App name, מזינים את שם האפליקציה שיוצג במסך ההסכמה.

  4. בקטע User support email (כתובת אימייל לתמיכה במשתמשים), מזינים את כתובת האימייל של האדמין לתמיכה.

  5. בקטע קהל, בוחרים באפשרות פנימי כדי להגביל את הגישה למשתמשים בארגון, או באפשרות חיצוני כדי לאפשר גישה למשתמשים מחוץ לארגון.

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

  7. כדי ליצור את הגדרת ה-OAuth, לוחצים על Create (יצירה).

הגדרת לקוחות OAuth בהתאמה אישית ב-IAP

בקטע הזה מוסבר איך מגדירים לקוחות OAuth מותאמים אישית ב-IAP.

אפשר ליצור לקוח OAuth מותאם אישית ל-IAP באמצעות מסוףGoogle Cloud באחת מהדרכים הבאות:

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

יצירת לקוח OAuth בהתאמה אישית

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

כדי ליצור לקוחות OAuth מותאמים אישית למשאב באמצעות Google Cloud המסוף, אפשר להשתמש באחת מהשיטות הבאות:

שיטה 1: יצירת לקוח OAuth באמצעות מסוף Google Cloud

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

  1. במסוף Google Cloud , עוברים אל APIs & Services > Credentials.

  2. לוחצים על Create Credentials (יצירת פרטי כניסה) ואז על OAuth client ID (מזהה לקוח OAuth).

  3. ב-Application type בוחרים באפשרות אפליקציית אינטרנט.

  4. בשדה Name, מזינים שם תיאורי ללקוח OAuth.

  5. לוחצים על יצירה. חשוב לזכור את מזהה הלקוח שנוצר.

  6. אחרי שיוצרים את לקוח OAuth, עוברים לקטע Authorized redirect URIs בדף הפרטים של לקוח OAuth החדש.

  7. לוחצים על הוספת URI ומזינים את ה-URI המורשה להפניה הספציפי ל-IAP:

    https://iap.googleapis.com/v1/oauth/clientIds/YOUR_CLIENT_ID:handleRedirect

    מחליפים את YOUR_CLIENT_ID במזהה הלקוח שקיבלתם בשלב הקודם.

  8. לוחצים על Save.

שיטה 2: יצירת לקוח OAuth באמצעות פרטי כניסה שנוצרו אוטומטית על ידי IAP

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

  1. נכנסים לדף IAP במסוף Google Cloud .

    כניסה לדף IAP

  2. בכרטיסייה Applications (אפליקציות), ברשימת המשאבים, מוצאים את המשאב שרוצים להגדיר.

    למשאבים ברמת הפרויקט:

    • יוצרים את לקוח OAuth באמצעות Google Cloud המסוף:

      1. בעמודה פעולות, לוחצים על סמל האפשרויות הנוספות > הגדרות.

      2. בתיבת הדו-שיח הגדרות, בוחרים באפשרות Custom OAuth (OAuth בהתאמה אישית).

      3. אם לא הגדרתם מסך הסכמה, צריך לפעול באופן הבא:

        1. לוחצים על הגדרת מסך ההסכמה.

        2. פועלים לפי ההוראות להגדרת דף המיתוג שמופיעות בחלק הקודם של המסמך הזה.

      4. בתיבת הדו-שיח של הגדרות IAP, לוחצים על יצירה אוטומטית של פרטי כניסה. ‫IAP יוצר לקוח OAuth חדש וסוד לשימוש במשאב הזה. בשדה Authorized redirect URIs (כתובות URL מורשות להפניה אוטומטית) בפלטפורמת האימות של Google, יש רשומה בפורמט הבא:

        https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect
      5. כדי לגשת למזהה הלקוח ולסוד הלקוח, לוחצים על הורדת פרטי הכניסה. פרטי הכניסה נשמרים בקובץ בפורמט JSON. הקובץ מכיל פרטי כניסה רגישים לגישה למשאבים, ולכן חשוב לוודא שהקובץ מאובטח או נמחק.

      6. כדי לשמור את הגדרות ה-OAuth של IAP ולהחיל את לקוח ה-OAuth על IAP, לוחצים על Save.

החלת לקוחות OAuth בהתאמה אישית על IAP

בקטע הזה מוסבר איך להחיל לקוחות OAuth על IAP. אפשר להשתמש בשיטה הזו במקום להחיל את הלקוחות ישירות בפלטפורמה.

  1. כדי ליצור את לקוח ה-OAuth בהתאמה אישית, פועלים לפי ההוראות לשימוש במסוףGoogle Cloud שמופיעות בהמשך המאמר הזה.

  2. החלת לקוח OAuth בהתאמה אישית.

    gcloud

    כדי להחיל את לקוח ה-OAuth המותאם אישית באמצעות ה-CLI של gcloud:

    1. יוצרים קובץ YAML של הגדרות.

      cat << EOF > iap-oauth.yaml
      accessSettings:
      oauthSettings:
        clientId: CLIENT_ID
        clientSecret: CLIENT_SECRET
      EOF
      

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

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

      • כדי להגדיר את הגדרות ה-OAuth ברמת הפרויקט, מריצים את הפקודה הבאה:
      gcloud iap settings set iap-oauth.yaml

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

      * <pre>--folder=<var>FOLDER_ID</var></pre>
      * <code>--organization=<var>ORGANIZATION_ID</var></code>
      
      • כדי להגדיר את התצורה בשירות ספציפי, מריצים את הפקודה הבאה:
      gcloud iap settings set iap-oauth.yaml \
          --project=PROJECT_ID \
          --resource-type= RESOURCE_TYPE \
          --region=REGION \
          --service=SERVICE_NAME

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

      • PROJECT_ID: המזהה של משאב הפרויקט. כדי להגדיר את ההגדרה ברמה אחרת, משתמשים באחד מהדגלים הבאים במקום בדגל --project:

        • --folder=FOLDER_ID
        • --organization=ORGANIZATION_ID
      • RESOURCE_TYPE: מחליפים באחד מסוגי המשאבים הבאים, בהתאם למשאב:

        • app-engine
        • backend-services
        • cloud-run
        • compute
        • folder
        • forwarding-rule
        • iap_web
        • organization
      • REGION: האזור שבו מפעילים את שירות Cloud Run.

      • SERVICE_NAME: השם של השירות.

    Terraform

    כדי להחיל את לקוח ה-OAuth המותאם אישית באמצעות Terraform:

    resource "google_iap_settings" "iap_settings" {
    name = IAP_RESOURCE_NAME
    access_settings {
      oauth_settings {
          oauth_client_id = CLIENT_ID
          oauth_client_secret = CLIENT_SECRET
      }
    }
    }
    

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

    • IAP_RESOURCE_NAME: שם המשאב של משאב iap_settings בשירות, בפורמט הבא: projects/PROJECT_NUMBER/iap_web/REGION/services/SERVICE_NAME
    • CLIENT_ID: מזהה הלקוח מפרטי הכניסה של OAuth שיצרתם קודם
    • CLIENT_SECRET: הסוד של הלקוח מפרטי הכניסה של OAuth שיצרתם קודם

    ‫API בארכיטקטורת REST

    1. יוצרים קובץ JSON של ההגדרות.

      cat << EOF > iap-oauth.json
      {
      "accessSettings": {
        "oauthSettings": {
          "clientId": "CLIENT_ID",
          "clientSecret": "CLIENT_SECRET"
        }
      }
      }
      EOF

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

      • CLIENT_ID: מזהה הלקוח מפרטי הכניסה של OAuth שיצרתם קודם.
      • CLIENT_SECRET: סוד הלקוח מפרטי הכניסה של OAuth שיצרתם קודם.
    2. מחילים את קובץ ההגדרות.

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)"
      -H "Content-Type: application/yaml" \
      "https://iap.googleapis.com/v1/projects/cb-managed-ingress-demo/iap_web/forwarding_rule-us-central1/services/psc-fr:iapSettings?update_mask=iapSettings.accessSettings.oauthSettings.oauthClientId,iapSettings.accessSettings.oauthSettings.oauthClientSecret" \
      -d @iap-oauth.json
      

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

הגדרה מדור קודם של לקוחות OAuth בהתאמה אישית במשאב

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

App Engine

בקטע הזה מוסבר איך להפעיל לקוחות OAuth מותאמים אישית ב-App Engine.

gcloud

Before you set up your project and IAP, you need an up-to-date version of gcloud CLI. For instructions on how to install the gcloud CLI, see Install the gcloud CLI.

  1. To authenticate, use the Google Cloud CLI and run the following command.
    gcloud auth login
  2. To sign in, follow the URL that appears.
  3. After you sign in, copy the verification code that appears and paste it in the command line.
  4. Run the following command to specify the project that contains the resource that you want to protect with IAP.
    gcloud config set project PROJECT_ID
  5. Follow the instructions in Creating OAuth clients for IAP to configure the OAuth consent screen and create the OAuth client.
  6. Save the OAuth client ID and secret.
  7. To enable IAP, run the following command.
    gcloud iap web enable \
        --oauth2-client-id=CLIENT_ID \
        --oauth2-client-secret=CLIENT_SECRET \
        --resource-type=app-engine

After you enable IAP, you can use the gcloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

API

  1. Follow the instructions in Creating OAuth clients for IAP to configure the OAuth consent screen and create the OAuth client.

  2. Save the OAuth client ID and secret.

  3. Run the following command to prepare a settings.json file.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled": true,
        "oauth2ClientId": "CLIENT_ID",
        "oauth2ClientSecret":" CLIENT_SECRET"
      }
    }
    EOF
    

  4. Run the following command to enable IAP.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default 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"
    

After you enable IAP, you can use the Google Cloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

GKE

בקטע הזה מוסבר איך להפעיל לקוחות OAuth בהתאמה אישית ב-GKE.

Configure the BackendConfig

If you are running GKE clusters version 1.24 or later, you can configure IAP and GKE by using the Kubernetes Gateway API. See Configure IAP for instructions.

  1. Follow the instructions in Creating OAuth clients for IAP to configure the OAuth consent screen and create the OAuth client.

  2. Create a Kubernetes Secret to wrap the OAuth client.

    kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \
      --from-literal=client_secret=CLIENT_SECRET
    
    Replace the following:

    • MY_SECRET: The name of the secret to create
    • CLIENT_ID: The OAuth client ID
    • CLIENT_SECRET: The OAuth client secret

    You should receive confirmation, like the following output, that the Secret was successfully created:

    secret "MY_SECRET" created
    

  3. Add the OAuth credentials to the BackendConfig.

    apiVersion: cloud.google.com/v1
    kind: BackendConfig
    metadata:
      name: CONFIG_DEFAULT
      namespace: my-namespace
    spec:
    iap:
      enabled: true
      oauthclientCredentials:
        secretName: MY_SECRET
    

  4. Enable IAP by associating Service ports with your BackendConfig. See Associating BackendConfig with your Ingress. One way to make this association is to make all ports for the service default to your BackendConfig, which you can do by adding the following annotation to your Service resource:

    metadata:
      annotations:
          beta.cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}}'
    

After you enable IAP, you can use the gcloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

Troubleshooting

If the secretName you referenced doesn't exist or isn't structured properly, one of the following error messages will display:

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. To resolve this error, make sure that you've created the Kubernetes Secret correctly as described in step 2.

  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. To resolve this error, make sure that you've created the OAuth credentials correctly. Also, make sure that you referenced the correct client_id and client_secret keys.

שירות לקצה העורפי של מאזן עומסים

בקטע הזה מוסבר למשתמשים ב-Compute Engine וב-Cloud Run איך להגדיר לקוחות OAuth ב-IAP עבור שירות הקצה העורפי של מאזן העומסים.

gcloud

Before you set up your project and IAP, you need an up-to-date version of the gcloud CLI. For instructions on how to install the gcloud CLI, see Install the gcloud CLI.

  1. To authenticate, use the Google Cloud CLI and run the following command.
    gcloud auth login
  2. To sign in, follow the URL that appears.
  3. After you sign in, copy the verification code that appears and paste it in the command line.
  4. Run the following command to specify the project that contains the resource that you want to protect with IAP.
    gcloud config set project PROJECT_ID
  5. Follow the instructions in Creating OAuth clients for IAP. to configure the OAuth consent screen and create the OAuth client.
  6. Save the OAuth client ID and secret.
  7. To enable IAP, run either the globally or regionally scoped command.

    Global scope
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --global \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    Regional scope
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --region REGION_NAME \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
        

After you enable IAP, you can use the gcloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

API

  1. Follow the instructions in Creating OAuth clients for IAP to configure the OAuth consent screen and create the OAuth client.

  2. Save the OAuth client ID and secret.

  3. Run the following command to prepare a settings.json file.

    cat << EOF > settings.json
    {
    "iap":
      {
        "enabled": true,
        "oauth2ClientId": "CLIENT_ID",
        "oauth2ClientSecret": "CLIENT_SECRET"
      }
    }
    EOF
    

  4. Run the following command to enable IAP.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d @settings.json \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME"
    

After you enable IAP, you can use the gcloud CLI to modify the IAP access policy using the IAM role roles/iap.httpsResourceAccessor. Learn more about managing roles and permissions.

בדיקת גישה

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

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

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