הגדרת IAP ל-Cloud Run

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

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

  • הפרויקט חייב להיות בארגון.
  • הזהויות צריכות להיות מאותו ארגון.
  • אי אפשר להגדיר IAP גם במאזן העומסים וגם בשירות Cloud Run.
  • יכול להיות ששילובים מסוימים, כמו Pub/Sub, יפסיקו לפעול אם IAP מופעל.

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

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להפעלת IAP, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

  • אדמין Cloud Run (roles/run.admin) בפרויקט
  • נותנים גישה לשירות שמופעל בו IAP: אדמין מדיניות IAP (roles/iap.admin) בפרויקט
  • יוצרים שירות עם אפשרות לחיובים מתוך האפליקציה או מעדכנים שירות קיים כדי להפעיל חיובים מתוך האפליקציה:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

הפעלת 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:

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

  2. אם אתם מגדירים ומפעילים שירות חדש, לוחצים על Deploy container (פריסת מאגר). אם אתם מגדירים ומפעילים שירות קיים, לוחצים על השירות ואז על עריכה והפעלה של עדכון חדש.

  3. אם אתם מגדירים שירות חדש, ממלאים את הדף של הגדרות השירות הראשוניות לפי הצורך, ואז בוחרים באפשרות נדרש אימות. בוחרים באפשרות שרת proxy לאימות זהויות (IAP).

  4. אם אתם מגדירים ומפעילים שירות קיים, לוחצים על השירות ואז בוחרים באפשרות דרישת אימות. בוחרים באפשרות שרת proxy לאימות זהויות (IAP).

  5. כדי ליצור מדיניות של בקרת גישה מבוססת הקשר, לוחצים על עריכת מדיניות:

    • מוסיפים חשבון משתמש אחד או יותר, ואם רוצים, את רמת הגישה שכל חשבון משתמש צריך לעמוד בה כדי לקבל גישה לאפליקציה.

    • לוחצים על Save.

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

gcloud

כדי להפעיל IAP ישירות מ-Cloud Run, מוסיפים את הדגל --iap כשפורסים את האפליקציה ומעניקים הרשאת הפעלה לסוכן השירות של IAP:

  1. פורסים את שירות 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 .
  2. מעניקים לסוכן השירות של 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 .
  3. כדי לוודא שהשירות מוגדר עם IAP מופעל, מריצים את הפקודה הבאה:

    gcloud beta run services describe SERVICE_NAME

    הפלט צריך לכלול את המחרוזת הבאה:

    Iap Enabled: true

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

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

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

  1. כדי להפעיל את 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"
        }
      }
    }
    
  2. מוסיפים את השורה הבאה כדי לתת לסוכן השירות של 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 במספר הפרויקט.

  3. זה שינוי אופציונלי. כדי לאחזר את הנתונים של מדיניות 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:

  1. במסוף Google Cloud , נכנסים לדף Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על השירות הקיים שרוצים לשנות.

  3. לוחצים על אבטחה ובוחרים באפשרות מתן גישה לכולם.

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

gcloud

כדי להשבית את IAP ישירות מ-Cloud Run, מוסיפים את הדגל --no-iap כשפורסים את האפליקציה:

  1. פורסים את שירות 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 .
  2. כדי לוודא שהשירות שלכם לא מוגדר יותר עם IAP מופעל, מריצים את הפקודה הבאה:

    gcloud beta run services describe SERVICE_NAME

    הפלט לא אמור להכיל יותר את המחרוזת הבאה:

    Iap Enabled: true

אתם כבר לא מעבירים את כל התעבורה שמוגדרת לשירות Cloud Run לאימות ב-IAP לפני שהיא מועברת אל הקונטיינר.

ניהול גישה של משתמשים או קבוצות

כברירת מחדל, ב-IAP ל-Cloud Run נעשה שימוש בזהויות בתוך הארגון עם כתובת אימייל שמשויכת למשתמש. אפשר להוסיף או להסיר גישה לשירות Cloud Run באמצעות Google Cloud המסוף או ה-CLI של gcloud.

המסוף

כדי להוסיף או להסיר הרשאת גישה:

  1. במסוף Google Cloud , נכנסים לדף Cloud Run:

    כניסה ל-Cloud Run

  2. לוחצים על השירות הקיים שרוצים לשנות ואז לוחצים על אבטחה.

  3. בקטע IAP, לוחצים על עריכת המדיניות.

  4. כדי להוסיף גישה, מזינים את חשבון המשתמש, ואם רוצים, את רמת הגישה או רמות הגישה שרוצים להוסיף.

  5. כדי להסיר גישה מבעל הרשאה קיים, לוחצים על סמל מחיקת המדיניות לצד רמות גישה.

  6. לוחצים על 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 באופן ידני.

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