יש שתי דרכים להפעיל שרת proxy לאימות זהויות (IAP) בשירותי Cloud Run.
- מומלץ: ישירות בשירות Cloud Run:
- מגן על נקודת הקצה
run.appבאופן ישיר, כך שלא צריך להקצות משאבי איזון עומסים. - הוא מאפשר הגדרה פשוטה יותר ומונע עלויות נוספות של איזון עומסים.
- אם בוחרים להציב מאזן עומסים לפני Cloud Run, גם נקודת הקצה של מאזן העומסים מוגנת.
- מגן על נקודת הקצה
- בשירות הקצה העורפי שמול שירותי 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 ישירות ב-Cloud Run.
אם בוחרים להפעיל IAP למשאבי Cloud Run במאזן העומסים ולא ישירות ב-Cloud Run, צריך לוודא שיש לכם את הדברים הבאים:
- פרויקט במסוף Google Cloud שהחיוב בו מופעל.
- קבוצה של שירות Cloud Run אחד או יותר, שמוגשת על ידי מאזן עומסים.
- מידע על הגדרת מאזן עומסים חיצוני מסוג HTTPS
- מידע על הגדרת מאזן עומסים פנימי מסוג HTTPS
- שם דומיין שרשום לכתובת של מאזן העומסים.
- קוד האפליקציה לאימות שלכל הבקשות יש זהות.
הפעלת IAP משירות לקצה העורפי או ממאזן עומסים
אם אתם חייבים להפעיל IAP מ-IAP מאחורי שירות קצה עורפי או מאזן עומסים, אתם יכולים להיעזר בהוראות הבאות.
המסוף
אם לא הגדרתם את מסך ההסכמה ל-OAuth של הפרויקט, תתבקשו לעשות זאת. במאמר הגדרת מסך ההסכמה ל-OAuth מוסבר איך להגדיר את מסך ההסכמה ל-OAuth.
הגדרת גישה ל-IAP
- עוברים אל הדף של שרת Proxy לאימות זהויות (IAP).
- בוחרים את הפרויקט שרוצים לאבטח באמצעות IAP.
- בקטע APPLICATIONS (אפליקציות), מסמנים את התיבה לצד שירות הקצה העורפי של מאזן העומסים שאליו רוצים להוסיף חברים.
- בחלונית הצדדית בצד שמאל, לוחצים על הוספת ישות ראשית.
בתיבת הדו-שיח הוספת חשבון משתמש, מזינים את החשבונות של הקבוצות או האנשים שצריכים לקבל את התפקיד משתמש באפליקציית אינטרנט מאובטחת באמצעות IAP בפרויקט. הסוגים הבאים של חשבונות יכולים להיות חברים:
- חשבון Google: user@gmail.com – יכול להיות שזה גם חשבון Google Workspace, כמו user@google.com או דומיין אחר של Workspace.
- קבוצת Google: admins@googlegroups.com
- חשבון שירות: server@example.iam.gserviceaccount.com
- דומיין ב-Google Workspace: example.com
בתפריט הנפתח תפקידים, בוחרים באפשרות Cloud IAP > משתמש באפליקציית אינטרנט מאובטחת באמצעות IAP.
לוחצים על Save.
הפעלת גישה למשתמשים מחוץ לארגון
כברירת מחדל, כשמפעילים את IAP, המערכת משתמשת בלקוח OAuth שמנוהל על ידי Google כדי לאמת משתמשים. כתוצאה מכך, רק משתמשים בארגון יכולים לגשת לאפליקציה שמופעל בה IAP.
כדי לאפשר גישה למשתמשים מחוץ לארגון או למשתמשים שאין להם ארגון, צריך לעדכן את ההגדרה של לקוח OAuth כדי להשתמש בלקוח OAuth מותאם אישית, כמו שמתואר במאמר הפעלת IAP לאפליקציות חיצוניות.
הפעלת IAP
- בדף IAP, בקטע APPLICATIONS, מוצאים את שירות ה-backend של מאזן העומסים שרוצים להגביל את הגישה אליו. כדי להפעיל את IAP למשאב, לוחצים על המתג IAP.
כדי להפעיל רכישות מתוך האפליקציה:
- לפחות פרוטוקול אחד בהגדרת החלק הקדמי של מאזן העומסים חייב להיות HTTPS. מידע נוסף על הגדרת מאזן עומסים
- צריכות להיות לכם ההרשאות
compute.backendServices.update,clientauthconfig.clients.createו-clientauthconfig.clients.getWithSecret. ההרשאות האלה ניתנות על ידי תפקידים, כמו התפקיד Project Editor (עריכת פרויקט). מידע נוסף על ניהול הגישה למשאבים שמוגנים על ידי IAP
- בחלון Turn on IAP שמופיע, לוחצים על Turn On כדי לאשר שרוצים להשתמש ב-IAP כדי לאבטח את המשאב. אחרי שמפעילים את IAP, נדרשים פרטי כניסה לכל החיבורים למאזן העומסים. רק לחשבונות עם התפקיד משתמש באפליקציית אינטרנט מאובטחת ב-IAP בפרויקט תהיה גישה.
פועלים לפי ההוראות במאמר בקרת גישה באמצעות IAM כדי לתת ל-IAP הרשאה לשלוח תנועה לשירות העורפי של Cloud Run.
- הגורם הראשי:
service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com - תפקיד: Cloud Run Invoker
חשבון השירות של IAP נוצר כשמפעילים את IAP. אם חשבון השירות של IAP לא מופיע ברשימת הגורמים המורשים, אפשר ליצור אותו באמצעות הפעלת פקודת gcloud הבאה:
gcloud services identity create \ --service=iap.googleapis.com \ --project=PROJECT_ID- הגורם הראשי:
gcloud
- אם לא עשיתם את זה בעבר בפרויקט, מריצים את הפקודה הבאה כדי ליצור את סוכן השירות של IAP. אם יצרתם בעבר את סוכן השירות, הפעלת הפקודה לא תשכפל אותו.
gcloud services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
- כדי להעניק למפעיל הרשאה לחשבון השירות שנוצר בשלב הקודם, מריצים את הפקודה הבאה.
gcloud run services add-iam-policy-binding [SERVICE-NAME] \ --member='serviceAccount:service-[PROJECT-NUMBER]@gcp-sa-iap.iam.gserviceaccount.com' \ --role='roles/run.invoker' מפעילים את 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
- אם עדיין לא עשיתם את זה, מריצים את הפקודה הבאה כדי ליצור סוכן שירות של IAP בפרויקט. אם יצרתם בעבר את סוכן השירות, הפעלת הפקודה לא תשכפל אותו.
resource "google_project_service" "project" { project = "your-project-id" service = "iap.googleapis.com" } מוסיפים את השורה הבאה כדי לתת לסוכן השירות של 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 במספר הפרויקט.
מפעילים את 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 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 services identity create --service=iap.googleapis.com --project=[PROJECT_ID]
חשבון השירות של IAP לא צריך את ההרשאה run.routes.invoke
במהלך תקופת הטרום-השקה של IAP עם Cloud Run, Cloud Run לא ביצע את בדיקת ההרשאות run.routes.invoke לקריאות מ-IAP שמשתמשות בתפקיד Cloud Run Invoker. במהלך הזמינות לכלל המשתמשים (GA), Cloud Run מבצע את בדיקת ההרשאות הזו.
כדי למנוע שינויי תוכנה שעלולים לגרום לכשל, חלק מהפרויקטים של לקוחות שהסתמכו על ההתנהגות הזו במהלך תקופת גרסת טרום-השקה (Preview) הוכנסו לרשימת ההיתרים, כך שההרשאה לא נבדקה. כדי להסיר פרויקטים כאלה מרשימת ההיתרים של התצוגה המקדימה בלבד, צריך לפנות אל התמיכה של Cloud Run.