בדף הזה מוסבר איך להפעיל את IAP מ-Cloud Run ולאבטח את התעבורה שמיועדת לשירות Cloud Run על ידי ניתוב שלה ל-IAP לצורך אימות. אם מפעילים את IAP מ-Cloud Run, אפשר להפנות תנועה בלחיצה אחת מכל נתיבי הכניסה, כולל כתובות URL של run.app שמוגדרות כברירת מחדל ומאזני עומסים.
מגבלות ידועות
- הפרויקט חייב להיות בארגון.
- הזהויות צריכות להיות מאותו ארגון.
- אי אפשר להגדיר IAP גם במאזן העומסים וגם בשירות Cloud Run.
- יכול להיות ששילובים מסוימים, כמו Pub/Sub, יפסיקו לפעול אם IAP מופעל.
לפני שמתחילים
מפעילים את IAP API.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להפעלת IAP, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
-
אדמין Cloud Run (
roles/run.admin) בפרויקט -
נותנים גישה לשירות שמופעל בו IAP:
אדמין מדיניות IAP (
roles/iap.admin) בפרויקט -
יוצרים שירות עם אפשרות לחיובים מתוך האפליקציה או מעדכנים שירות קיים כדי להפעיל חיובים מתוך האפליקציה:
-
Artifact Registry Reader (
roles/artifactregistry.reader) בתמונות הקונטיינרים שנפרסו -
משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות
-
Artifact Registry Reader (
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
הפעלת IAP מ-Cloud Run
מומלץ להפעיל את IAP ישירות מ-Cloud Run.
אם אתם משתמשים גם ב-IAP וגם בניהול זהויות והרשאות גישה (IAM) באותו שירות Cloud Run, חשוב לשים לב לתנאים הבאים:
מתבצעות בדיקות של IAP ו-IAM.
הבדיקה של IAP מתבצעת קודם, והיא מאשרת או חוסמת בקשות על סמך ההגדרה של IAP.
אם הבקשה עוברת את הבדיקה של IAP, IAP משתמש בחשבון השירות שלו כדי לבצע אימות לבדיקת IAM של Cloud Run.
בגלל שבדיקת הרכישה מתוך האפליקציה מתבצעת קודם, יכול להיות שחלק מהשירותים, כמו Pub/Sub, לא יאומתו בצורה נכונה.
אפשר להפעיל את IAP מ-Cloud Run באמצעות מסוף Google Cloud , Google Cloud CLI או Terraform.
המסוף
כשמפעילים את IAP ב-Cloud Run, IAP דורש הרשאות להפעלת שירות Cloud Run. אם מפעילים את IAP באמצעות מסוף Google Cloud , ההרשאה הזו ניתנת באופן אוטומטי על ידי הקצאת תפקיד ההפעלה של Cloud Run (roles/run.invoker) לסוכן השירות של IAP.
כדי להפעיל את IAP מ-Cloud Run:
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
אם אתם מגדירים ומפעילים שירות חדש, לוחצים על Deploy container (פריסת מאגר). אם אתם מגדירים ומפעילים שירות קיים, לוחצים על השירות ואז על עריכה והפעלה של עדכון חדש.
אם אתם מגדירים שירות חדש, ממלאים את הדף של הגדרות השירות הראשוניות לפי הצורך, ואז בוחרים באפשרות נדרש אימות. בוחרים באפשרות שרת proxy לאימות זהויות (IAP).
אם אתם מגדירים ומפעילים שירות קיים, לוחצים על השירות ואז בוחרים באפשרות דרישת אימות. בוחרים באפשרות שרת proxy לאימות זהויות (IAP).
כדי ליצור מדיניות של בקרת גישה מבוססת הקשר, לוחצים על עריכת מדיניות:
מוסיפים חשבון משתמש אחד או יותר, ואם רוצים, את רמת הגישה שכל חשבון משתמש צריך לעמוד בה כדי לקבל גישה לאפליקציה.
לוחצים על Save.
לוחצים על Save.
gcloud
כדי להפעיל IAP ישירות מ-Cloud Run, מוסיפים את הדגל --iap כשפורסים את האפליקציה ומעניקים הרשאת הפעלה לסוכן השירות של IAP:
פורסים את שירות Cloud Run באמצעות אחת מהפקודות הבאות:
בשירות חדש:
gcloud beta run deploy SERVICE_NAME \ --region=REGION \ --image=IMAGE_URL \ --no-allow-unauthenticated \ --iap
בשירות קיים:
gcloud beta run services update SERVICE_NAME \ --region=REGION \ --iap
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של שירות Cloud Run.
- REGION: השם של האזור ב-Cloud Run.
לדוגמה,
europe-west1. - IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
מעניקים לסוכן השירות של IAP הרשאת הפעלה:
gcloud run services add-iam-policy-binding SERVICE_NAME \ --region=REGION \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-iap.iam.gserviceaccount.com \ --role=roles/run.invoker
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של שירות Cloud Run.
- REGION: השם של האזור ב-Cloud Run.
לדוגמה,
europe-west1. - PROJECT_NUMBER: מספר הפרויקט ב- Google Cloud .
כדי לוודא שהשירות מוגדר עם IAP מופעל, מריצים את הפקודה הבאה:
gcloud beta run services describe SERVICE_NAME
הפלט צריך לכלול את המחרוזת הבאה:
Iap Enabled: true
מעכשיו, כל התעבורה שמיועדת לשירות Cloud Run שהוגדר מנותבת ל-IAP לצורך אימות לפני שהיא מועברת אל הקונטיינר.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
כדי להפעיל את IAP באמצעות Terraform, צריך לעדכן את הגדרת השירות ולהוסיף קישור למדיניות IAM כדי להעניק הרשאת הפעלה ל-IAP.
כדי להפעיל את IAP בשירות, מוסיפים את
iap_enabled = trueלמשאבgoogle_cloud_run_v2_serviceבהגדרות של Terraform:resource "google_cloud_run_v2_service" "default" { provider = google-beta name = "cloudrun-iap-service" location = "europe-west1" ingress = "INGRESS_TRAFFIC_ALL" launch_stage = "BETA" iap_enabled = true template { containers { image = "us-docker.pkg.dev/cloudrun/container/hello" } } }מוסיפים את השורה הבאה כדי לתת לסוכן השירות של IAP את התפקיד
roles/run.invoker.resource "google_cloud_run_v2_service_iam_member" "iap_invoker" { provider = google-beta 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 במספר הפרויקט.
זה שינוי אופציונלי. כדי לאחזר את הנתונים של מדיניות IAM הנוכחית, מוסיפים את הקוד הבא למשאב
google_cloud_run_v2_service_iam_policyבתצורת Terraform.data "google_cloud_run_v2_service_iam_policy" "policy" { project = google_cloud_run_v2_service.default.project location = google_cloud_run_v2_service.default.location name = google_cloud_run_v2_service.default.name }
השבתה של IAP מ-Cloud Run
אפשר להשבית את IAP באמצעות מסוף Google Cloud או ה-CLI של gcloud.
המסוף
כדי להשבית את IAP מ-Cloud Run:
במסוף Google Cloud , נכנסים לדף Cloud Run:
לוחצים על השירות הקיים שרוצים לשנות.
לוחצים על אבטחה ובוחרים באפשרות מתן גישה לכולם.
לוחצים על Save.
gcloud
כדי להשבית את IAP ישירות מ-Cloud Run, מוסיפים את הדגל --no-iap כשפורסים את האפליקציה:
פורסים את שירות Cloud Run באמצעות אחת מהפקודות הבאות:
בשירות חדש:
gcloud beta run deploy SERVICE_NAME \ --region=REGION \ --image=IMAGE_URL \ --no-iap
בשירות קיים:
gcloud beta run services update SERVICE_NAME \ --region=REGION \ --no-iap
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE_NAME: השם של שירות Cloud Run.
- REGION: השם של האזור ב-Cloud Run.
- IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה,
us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, צריך ליצור מראש את המאגר REPO_NAME. כתובת ה-URL היא בפורמטLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
כדי לוודא שהשירות שלכם לא מוגדר יותר עם IAP מופעל, מריצים את הפקודה הבאה:
gcloud beta run services describe SERVICE_NAME
הפלט לא אמור להכיל יותר את המחרוזת הבאה:
Iap Enabled: true
אתם כבר לא מעבירים את כל התעבורה שמוגדרת לשירות Cloud Run לאימות ב-IAP לפני שהיא מועברת אל הקונטיינר.
ניהול גישה של משתמשים או קבוצות
כברירת מחדל, ב-IAP ל-Cloud Run נעשה שימוש בזהויות בתוך הארגון עם כתובת אימייל שמשויכת למשתמש. אפשר להוסיף או להסיר גישה לשירות Cloud Run באמצעות Google Cloud המסוף או ה-CLI של gcloud.
המסוף
כדי להוסיף או להסיר הרשאת גישה:
במסוף Google Cloud , נכנסים לדף Cloud Run:
לוחצים על השירות הקיים שרוצים לשנות ואז לוחצים על אבטחה.
בקטע IAP, לוחצים על עריכת המדיניות.
כדי להוסיף גישה, מזינים את חשבון המשתמש, ואם רוצים, את רמת הגישה או רמות הגישה שרוצים להוסיף.
כדי להסיר גישה מבעל הרשאה קיים, לוחצים על סמל מחיקת המדיניות לצד רמות גישה.
לוחצים על Save.
gcloud
כדי להוסיף או להסיר גישה לשירות Cloud Run למשתמשים או לקבוצות ספציפיים בארגון, מריצים אחת מהפקודות הבאות:
כדי להוסיף הרשאת גישה:
gcloud beta iap web add-iam-policy-binding \ --member=user:USER_EMAIL \ --role=roles/iap.httpsResourceAccessor \ --region=REGION \ --resource-type=cloud-run \ --service=SERVICE_NAME
כדי להסיר את הגישה:
gcloud beta iap web remove-iam-policy-binding \ --member=user:USER_EMAIL \ --role=roles/iap.httpsResourceAccessor \ --region=REGION \ --resource-type=cloud-run \ --service=SERVICE_NAME
כדי לראות את הרשאות הגישה:
gcloud beta iap web get-iam-policy \ --region=REGION \ --resource-type=cloud-run \ --service=SERVICE_NAME
מחליפים את מה שכתוב בשדות הבאים:
- USER_EMAIL: כתובת האימייל של המשתמש.
- REGION: השם של האזור ב-Cloud Run.
- SERVICE_NAME: השם של שירות Cloud Run.
פתרון בעיות
שגיאה בהגדרת IAM נגרמת בגלל כשל בסוכן השירות
הפעלה של רכישות מתוך האפליקציה בפרויקט חדש בפעם הראשונה עלולה לגרום לשגיאה הבאה:
Setting IAM permissions failedהסיבה לכך היא שהסוכן של שירות Cloud Run נכשל. כדי לפתור את הבעיה, צריך להפעיל מחדש את IAP או להגדיר את מדיניות ה-IAM באופן ידני.
המאמרים הבאים
- הוראות להפעלת IAP משירות לקצה העורפי או ממאזן עומסים מפורטות במאמר הפעלת IAP ב-Cloud Run.
- אם נתקלתם בבעיות בהפעלת IAP ב-Cloud Run, תוכלו לעיין במאמר בנושא פתרון שגיאות.
- הפעלת זהויות חיצוניות
- הפעלת הגדרת OAuth.
- ניהול הגישה למשאבים שמוגנים על ידי IAP
- שימוש במדיניות הארגון כדי לשלוט בהפעלת IAP.