יש שתי דרכים להפעיל שרת 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 רק במופעים שלא רגישים לזמן אחזור.
לפני שמתחילים
מומלץ להפעיל את 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, מסמנים את התיבה לצד שירות הקצה העורפי של מאזן העומסים שאליו רוצים להוסיף חברים.
- בחלונית הצדדית בצד שמאל, לוחצים על הוספת ישות.
בתיבת הדו-שיח 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
בתפריט הנפתח תפקידים, בוחרים באפשרות Cloud IAP > IAP-secured Web App User (Cloud IAP > משתמש באפליקציית אינטרנט מאובטחת באמצעות IAP).
לוחצים על Save.
הפעלת גישה למשתמשים מחוץ לארגון
כברירת מחדל, כשמפעילים IAP, המערכת משתמשת בלקוח OAuth בניהול Google כדי לאמת משתמשים. כתוצאה מכך, רק משתמשים בארגון יכולים לגשת לאפליקציה שמופעלת בה IAP.
כדי לאפשר גישה למשתמשים מחוץ לארגון או למשתמשים שאין להם ארגון, צריך לעדכן את ההגדרה של לקוח OAuth כדי להשתמש בלקוח OAuth מותאם אישית, כמו שמתואר במאמר הפעלת IAP לאפליקציות חיצוניות.
הפעלת IAP
- בדף IAP, בקטע אפליקציות, מוצאים את שירות הקצה העורפי של איזון העומסים שרוצים להגביל את הגישה אליו. כדי להפעיל את 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.
- 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- Principal:
gcloud
- אם לא עשיתם זאת בעבר בפרויקט, מריצים את הפקודה הבאה כדי ליצור את סוכן השירות של IAP. אם יצרתם בעבר את סוכן השירות, הפעלת הפקודה לא תשכפל אותו.
gcloud beta 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 שמוגדרת כברירת מחדל בשירות 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.