הפעלת IAP ב-Cloud Run

כדי להפעיל את שרת ה-Proxy לאימות זהויות (IAP) בשירותי Cloud Run, אתם יכולים להשתמש באחת מהשיטות הבאות:

  1. מומלץ: להפעיל את IAP ישירות בשירות Cloud Run, מה שמאפשר:

    • מגן על נקודת הקצה של run.app ישירות, כך שלא צריך להקצות משאבים של מאזן עומסים.

    • ההגדרה פשוטה יותר ואין עלויות נוספות של מאזן עומסים.

    • אם תבחרו להציב מאזן עומסים לפני Cloud Run, גם נקודת הקצה של מאזן העומסים תהיה מוגנת.

  2. הפעלת IAP בשירות לקצה העורפי שפונה לשירותי Cloud Run: אם אתם מריצים את Cloud Run בכמה אזורים שמחוברים לאותו שירות גלובלי לקצה העורפי של מאזן העומסים, ואתם צריכים ניהול הרשאות גישה מרכזי, פעלו לפי ההוראות שבדף הזה. אחרת, מומלץ להפעיל את IAP ישירות בשירות Cloud Run.

    מגבלות ידועות

    • אי אפשר להשתמש ב-IAP גם בשירותי Cloud Run וגם במאזן העומסים. אם מפעילים את IAP במאזן עומסים, IAP מאבטח את התנועה רק דרך מאזן העומסים ולא את התנועה שעשויה להגיע לשירות Cloud Run דרך כתובת ה-URL שלו ב-run.app. כדי לאפשר רק תנועה שאושרה על ידי IAP, קראו את המאמר הגדרת Cloud Run להגבלת הגישה.

    • ‫IAP מאמת את Cloud Run באמצעות הכותרת X-Serverless-Authorization. ‫Cloud Run מעביר את הכותרת הזו לשירות שלכם אחרי הסרת החתימה. אם השירות שלכם מיועד להעביר את הבקשה לשירות אחר ב-Cloud Run שדורש אימות IAM, צריך לעדכן את השירות כדי להסיר את הכותרת הזו קודם.

    • אי אפשר להשתמש ב-IAP עם Cloud CDN.

    • ‫IAP מאריך את זמן האחזור. הפעילו את IAP רק בשירותים שלא רגישים לזמן אחזור.

    לפני שמתחילים

    מומלץ להפעיל את IAP ישירות ב-Cloud Run.

    אם אתם בוחרים להפעיל את IAP למשאבי Cloud Run במאזן העומסים ולא ישירות ב-Cloud Run, אתם צריכים:

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

    הערה: מומלץ להפעיל את IAP ישירות ב-Cloud Run, כמו שמתואר במאמרי העזרה של Cloud Run.

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

    המסוף

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

    הגדרת גישה ל-IAP

    1. נכנסים לדף Identity-Aware Proxy.
    2. בוחרים את הפרויקט שרוצים לאבטח באמצעות IAP.
    3. בקטע APPLICATIONS, מסמנים את התיבה לצד שירות הקצה העורפי של מאזן העומסים שאליו רוצים להוסיף חברים.
    4. בחלונית שבצד שמאל, לוחצים על Add Principal.
    5. בתיבת הדו-שיח Add Principal, מזינים את החשבונות של הקבוצות או המשתמשים שצריכים לקבל את התפקיד IAP-secured Web App User בפרויקט. סוגי החשבונות הבאים יכולים להיות חברים:

      • חשבון Google: user@gmail.com – יכול להיות גם חשבון Google Workspace, כמו user@google.com או דומיין אחר של Workspace.
      • קבוצת Google: admins@googlegroups.com
      • חשבון שירות: server@example.
      • דומיין ב-Google Workspace: example.com
    6. ברשימה הנפתחת Roles, בוחרים באפשרות Cloud IAP > IAP-secured Web App User.

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

    איך מאפשרים גישה למשתמשים מחוץ לארגון

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

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

    הפעלת IAP

    1. בדף IAP, בקטע APPLICATIONS, מוצאים את שירות הקצה העורפי של מאזן העומסים שרוצים להגביל את הגישה אליו. כדי להפעיל את IAP למשאב, לוחצים על המתג IAP. כדי להפעיל את IAP:
    2. בחלון Turn on IAP שמופיע, לוחצים על Turn On כדי לאשר שרוצים לאבטח את המשאב באמצעות IAP. אחרי שמפעילים את IAP, צריך להזין פרטי כניסה לכל החיבורים למאזן העומסים. רק חשבונות עם התפקיד משתמש באפליקציית אינטרנט מאובטחת באמצעות IAP בפרויקט יקבלו גישה.
    3. פועלים לפי ההוראות במאמר בקרת גישה באמצעות IAM כדי לאשר ל-IAP לשלוח תנועה לשירות Cloud Run לקצה העורפי.

      • חשבון משתמש: service-[PROJECT-NUMBER]@gcp-sa-iap.
      • תפקיד: Cloud Run Invoker

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

      gcloud services identity create \
          --service=iap.googleapis.com \
          --project=PROJECT_ID
      

    gcloud

    1. אם עדיין לא עשיתם את זה בפרויקט, יוצרים את סוכן השירות של IAP באמצעות הפקודה הבאה. אם כבר יצרתם את סוכן השירות, הפעלת הפקודה לא תשכפל אותו.
      gcloud services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
    2. כדי לתת לחשבון השירות שיצרתם בשלב הקודם הרשאה להפעיל את הפונקציה, מריצים את הפקודה הבאה:
      gcloud run services add-iam-policy-binding [SERVICE-NAME] \
      --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.'  \
      --role='roles/run.invoker'
      
    3. מפעילים את IAP באמצעות הפקודה ברמה הגלובלית או האזורית, בהתאם לסוג של שירות הקצה העורפי של מאזן העומסים (גלובלי או אזורי). משתמשים במזהה הלקוח ובסוד הלקוח ב-OAuth מהשלב הקודם.

      היקף גלובלי

      gcloud compute backend-services update BACKEND_SERVICE_NAME --global --iap=enabled
      

      היקף אזורי

      gcloud compute backend-services update BACKEND_SERVICE_NAME --region REGION_NAME --iap=enabled
      
      מחליפים את הערכים בשדות הבאים:

      • ‫BACKEND_SERVICE_NAME: השם של שירות הקצה העורפי.
      • ‫REGION_NAME: האזור שבו רוצים להפעיל את IAP.

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

    Terraform

    1. אם עדיין לא עשיתם את זה, מריצים את הפקודה הבאה בפרויקט כדי ליצור את סוכן השירות של IAP. אם כבר יצרתם את סוכן השירות, הפעלת הפקודה לא תשכפל אותו.
      resource "google_project_service" "project" {
        project = "your-project-id"
        service = "iap.googleapis.com"
      }
      
    2. מוסיפים את הקוד הבא כדי להקצות את התפקיד roles/run.invoker לסוכן השירות של IAP.

      resource "google_cloud_run_v2_service_iam_member" "iap_invoker" {
        project = google_cloud_run_v2_service.default.project
        location = google_cloud_run_v2_service.default.location
        name = google_cloud_run_v2_service.default.name
        role   = "roles/run.invoker"
        member = "serviceAccount:service-"PROJECT_NUMBER@gcp-sa-iap."
      }
      

      מחליפים את PROJECT_NUMBER במספר הפרויקט.

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

      • היקף גלובלי

        resource "google_compute_backend_service" "default" {
          name                  = "tf-test-backend-service-external"
          protocol              = "HTTPS"
          load_balancing_scheme = "EXTERNAL_MANAGED"
          iap {
            enabled              = true
            oauth2_client_id     = "abc"
            oauth2_client_secret = "xyz"
          }
        }
        

      • היקף אזורי

        resource "google_compute_region_backend_service" "default" {
          name                  = "tf-test-backend-service-external"
          protocol              = "HTTPS"
          load_balancing_scheme = "EXTERNAL_MANAGED"
          iap {
            enabled              = true
            oauth2_client_id     = "abc"
            oauth2_client_secret = "xyz"
          }
        }
        

    הגדרת Cloud Run להגבלת הגישה

    כדי למנוע ניתוב של תנועה דרך כתובת ה-URL שמוגדרת כברירת מחדל ב-run.app בשירות Cloud Run, משביתים את כתובת ה-URL שמוגדרת כברירת מחדל. אחרת, צריך להגדיר את הגדרות תעבורת הנתונים הנכנסת להגבלת תעבורת הנתונים הנכנסת ברשת ל-Cloud Run.

    פתרון לשגיאות

    ההרשאה נדחתה בגישה ל-Cloud Run

     Your client does not have permission to get URL from this server 
    • כדי להפעיל את שירות Cloud Run, ב-IAP משתמשים בהרשאות של חשבון השירות של IAP. חשוב לוודא שהקציתם את התפקיד "הפעלת Cloud Run" לחשבון השירות הבא: service-[PROJECT-NUMBER]@gcp-sa-iap..

    • אם הקציתם את התפקיד "מפעיל של Cloud Run" לחשבון השירות הקודם ואתם עדיין נתקלים בבעיה, פרסו מחדש את שירות Cloud Run.

    כשל בסוכן השירות גורם לשגיאה בהגדרת IAM

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

    Setting IAM permissions failed

    הסיבה לכך היא שסוכן השירות של Cloud Run נכשל. כדי לפתור את הבעיה, צריך להפעיל מחדש את IAP או להגדיר את מדיניות ה-IAM באופן ידני.

    אי אפשר להגדיר את IAP באמצעות ה-CLI של gcloud

     The IAP service account is not provisioned 

    אם השגיאה הזו מופיעה, מריצים את הפקודה הבאה:

    gcloud services identity create --service=iap.googleapis.com --project=[PROJECT_ID]

    לחשבון השירות של IAP לא נדרשת הרשאת run.routes.invoke

    במהלך גרסת טרום-ההשקה (Preview) של IAP עם Cloud Run,‏ Cloud Run לא ביצע את בדיקת ההרשאה run.routes.invoke לקריאות מ-IAP שמשתמשות בתפקיד Cloud Run Invoker. בגרסה הזמינה לכלל המשתמשים (GA), בדיקת ההרשאות הזו מתבצעת ב-Cloud Run.

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

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

    הגדרת IAP ל-Cloud Run