שימוש בלקוחות 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 בהתאמה אישית

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

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

  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 בהתאמה אישית ברמה של היררכיית המשאבים מספקת את אותו מיתוג בהתאמה אישית לכל השירותים שפועלים באותה רמה.

      * <code>--folder=<var>FOLDER_ID</var></code>
      * <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

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

  1. כדי לבצע אימות, משתמשים ב-CLI של Google Cloud ומריצים את הפקודה הבאה.
    gcloud auth login
  2. כדי להיכנס, לוחצים על כתובת ה-URL שמופיעה.
  3. אחרי הכניסה לחשבון, מעתיקים את קוד האימות שמופיע ומדביקים אותו בשורת הפקודה.
  4. מריצים את הפקודה הבאה כדי לציין את הפרויקט שמכיל את המשאב שרוצים להגן עליו באמצעות IAP.
    gcloud config set project PROJECT_ID
  5. פועלים לפי ההוראות במאמר בנושא יצירת לקוחות OAuth ל-IAP כדי להגדיר את מסך ההסכמה ל-OAuth וליצור את לקוח OAuth.
  6. שומרים את מזהה הלקוח ואת הסוד של לקוח OAuth.
  7. כדי להפעיל את IAP, מריצים את הפקודה הבאה.
    gcloud iap web enable \
        --oauth2-client-id=CLIENT_ID \
        --oauth2-client-secret=CLIENT_SECRET \
        --resource-type=app-engine

אחרי שמפעילים את IAP, אפשר להשתמש ב-CLI של gcloud כדי לשנות את מדיניות הגישה של IAP באמצעות תפקיד ה-IAM‏ roles/iap.httpsResourceAccessor. מידע נוסף על ניהול תפקידים והרשאות

API

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

  2. שומרים את מזהה הלקוח ואת הסוד של לקוח OAuth.

  3. מריצים את הפקודה הבאה כדי להכין קובץ settings.json.

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

  4. מריצים את הפקודה הבאה כדי להפעיל את 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"
    

אחרי שמפעילים את IAP, אפשר להשתמש ב-Google Cloud CLI כדי לשנות את מדיניות הגישה של IAP באמצעות תפקיד ה-IAM‏ roles/iap.httpsResourceAccessor. מידע נוסף על ניהול תפקידים והרשאות

GKE

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

הגדרת BackendConfig

אם אתם מריצים אשכולות GKE בגרסה 1.24 ואילך, אתם יכולים להגדיר IAP ו-GKE באמצעות Kubernetes Gateway API. הוראות מפורטות מופיעות במאמר הגדרת IAP.

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

  2. יוצרים סוד ב-Kubernetes כדי לעטוף את לקוח OAuth.

    kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \
      --from-literal=client_secret=CLIENT_SECRET
    
    מחליפים את מה שכתוב בשדות הבאים:

    • MY_SECRET: השם של הסוד שרוצים ליצור
    • CLIENT_ID: מזהה הלקוח ב-OAuth
    • CLIENT_SECRET: סוד הלקוח ב-OAuth

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

    secret "MY_SECRET" created
    

  3. מוסיפים את פרטי הכניסה של OAuth ל-BackendConfig.

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

  4. מפעילים את IAP על ידי שיוך של יציאות שירות ל-BackendConfig. איך משייכים BackendConfig ל-Ingress אחת הדרכים ליצור את השיוך הזה היא להגדיר את כל היציאות של השירות כברירת מחדל ל-BackendConfig. כדי לעשות את זה, מוסיפים את ההערה הבאה למשאב Service:

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

אחרי שמפעילים את IAP, אפשר להשתמש ב-CLI של gcloud כדי לשנות את מדיניות הגישה של IAP באמצעות תפקיד ה-IAM‏ roles/iap.httpsResourceAccessor. מידע נוסף על ניהול תפקידים והרשאות

פתרון בעיות

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

  • BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found. כדי לפתור את השגיאה הזו, צריך לוודא שיצרתם את ה-Secret של Kubernetes בצורה נכונה, כמו שמתואר בשלב 2.

  • BackendConfig default/config-default is not valid: secret "foo" missing client_secret data. כדי לפתור את השגיאה הזו, צריך לוודא שיצרתם את פרטי הכניסה של OAuth בצורה נכונה. בנוסף, חשוב לוודא שהפניתם למפתחות הנכונים של client_id ושל client_secret.

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

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

gcloud

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

  1. כדי לבצע אימות, משתמשים ב-CLI של Google Cloud ומריצים את הפקודה הבאה.
    gcloud auth login
  2. כדי להיכנס, לוחצים על כתובת ה-URL שמופיעה.
  3. אחרי הכניסה לחשבון, מעתיקים את קוד האימות שמופיע ומדביקים אותו בשורת הפקודה.
  4. מריצים את הפקודה הבאה כדי לציין את הפרויקט שמכיל את המשאב שרוצים להגן עליו באמצעות IAP.
    gcloud config set project PROJECT_ID
  5. פועלים לפי ההוראות במאמר יצירה של לקוחות OAuth ל-IAP כדי להגדיר את מסך ההסכמה ל-OAuth וליצור את לקוח OAuth.
  6. שומרים את מזהה הלקוח ואת הסוד של לקוח OAuth.
  7. כדי להפעיל את IAP, מריצים את הפקודה בהיקף גלובלי או אזורי.

    היקף גלובלי
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --global \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
    היקף אזורי
    gcloud compute backend-services update BACKEND_SERVICE_NAME \
        --region REGION_NAME \
        --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
        

אחרי שמפעילים את IAP, אפשר להשתמש ב-CLI של gcloud כדי לשנות את מדיניות הגישה של IAP באמצעות תפקיד ה-IAM‏ roles/iap.httpsResourceAccessor. מידע נוסף על ניהול תפקידים והרשאות

API

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

  2. שומרים את מזהה הלקוח ואת הסוד של לקוח OAuth.

  3. מריצים את הפקודה הבאה כדי להכין קובץ settings.json.

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

  4. מריצים את הפקודה הבאה כדי להפעיל את 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"
    

אחרי שמפעילים את IAP, אפשר להשתמש ב-CLI של gcloud כדי לשנות את מדיניות הגישה של IAP באמצעות תפקיד ה-IAM‏ roles/iap.httpsResourceAccessor. מידע נוסף על ניהול תפקידים והרשאות

בדיקת גישה

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

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

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