הפעלת IAP ב-Cloud Run

יש שתי דרכים להפעיל שרת proxy לאימות זהויות (IAP) בשירותי Cloud Run.

  1. מומלץ: ישירות בשירות Cloud Run:
    • מגן על נקודת הקצה run.app באופן ישיר, כך שלא צריך להקצות משאבים של איזון עומסים.
    • ההגדרה פשוטה יותר ואין עלויות נוספות של איזון עומסים.
    • אם בוחרים להציב מאזן עומסים לפני Cloud Run, גם נקודת הקצה של מאזן העומסים מוגנת.
  2. בשירות הקצה העורפי שמוצב מול שירותי 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 מ-IAP מאחורי שירות קצה עורפי או מאזן עומסים, אתם יכולים להיעזר בהוראות הבאות.

המסוף

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

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

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

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

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

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

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

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

הפעלת IAP

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

    • Principal: service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com
    • תפקיד: Cloud Run Invoker

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

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

gcloud

  1. אם לא עשיתם זאת בעבר בפרויקט, מריצים את הפקודה הבאה כדי ליצור את סוכן השירות של IAP. אם יצרתם בעבר את סוכן השירות, הפעלת הפקודה לא תשכפל אותו.
    gcloud beta 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.iam.gserviceaccount.com'  \
    --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. מוסיפים את השורה הבאה כדי לתת לסוכן השירות של IAP את התפקיד roles/run.invoker.

    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.iam.gserviceaccount.com"
    }
    

    מחליפים את 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 שמוגדרת כברירת מחדל בשירות Cloud Run, משביתים את כתובת ה-URL שמוגדרת כברירת מחדל.run.app אחרת, צריך להגדיר את הגדרות הכניסה כך שהכניסה לרשת תוגבל ב-Cloud Run.

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

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

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

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

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

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

Setting IAM permissions failed

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

אי אפשר להגדיר IAP דרך ה-CLI של gcloud

 The IAP service account is not provisioned 

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

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

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

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

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

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

הגדרת IAP ל-Cloud Run