בקרת גישה באמצעות IAM

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

כדי לתת לחשבונות משתמשים או לקבוצות אחרים את היכולת לבצע את הפעולות האלה, צריך להשתמש ב-IAM כדי לתת תפקידים לחשבונות משתמשים שונים.

אם יצרתם או פרסתם פונקציות באמצעות פקודות gcloud functions או ממשקי Cloud Functions v2 API ואתם צריכים להשתמש באפשרויות האלה לצורך תאימות לאחור, כדאי לעיין במאמר בקרת גישה באמצעות IAM.

תפקידים מוגדרים מראש ב-Cloud Run

בהשוואה לתפקידים הבסיסיים (בעלים, עריכה וצפייה), התפקידים המוגדרים מראש הבאים כוללים בקרת גישה פרטנית יותר למשאבי Cloud Run:

תפקיד תיאור
אדמין של Cloud Run‏ (roles/run.admin) יכול ליצור, לעדכן ולמחוק שירותים, משימות ומאגרי עובדים, יכול לקבל, לרשום ולמחוק ביצועים של משימות.
יכול להפעיל שירותים ומשימות, יכול לבטל ביצועים של משימות.
יכול לקבל ולהגדיר מדיניות IAM.
יכול להציג, להחיל ולבטל המלצות.
נדרש הגדרה נוספת כדי לפרוס שירותים.
Cloud Run Developer (roles/run.developer) יכול ליצור, לעדכן ולמחוק שירותים, משימות ומאגרי עובדים, יכול לקבל, להציג ברשימה ולמחוק ביצועים של משימות.
יכול לקבל אבל לא להגדיר מדיניות IAM.
יכול להציג, להחיל ולבטל המלצות.
צפייה ב-Cloud Run (roles/run.viewer) יכולים להציג שירותים, משימות, הפעלות של משימות ומאגרי עובדים.
יכולים לקבל מדיניות IAM.
יכולים להציג המלצות.
הפעלת Cloud Run (roles/run.invoker) יכולים להפעיל שירותים ועבודות, יכולים לבטל ביצוע של עבודות.
Cloud Run Source Developer (roles/run.sourceDeveloper) יכול לפרוס ולנהל משאבים שנפרסו ממקור ב-Cloud Run.
Cloud Run Builder (roles/run.builder) יכולים ליצור פונקציות Cloud Run ושירותים שנפרסים ממקור.
התפקיד Cloud Run Service Invoker‏ (roles/run.servicesInvoker) יכול להפעיל שירותי Cloud Run.
Cloud Run Jobs Executor (roles/run.jobsExecutor) יכול להריץ ולבטל משימות Cloud Run.
Cloud Run Jobs Executor With Overrides (roles/run.jobsExecutorWithOverrides) יכול להריץ ולבטל משימות Cloud Run עם החלפות.

שליטה בגישה למשאב ספציפי ב-Cloud Run

אפשר לשלוט בגישה על בסיס שירות, משימה או מאגר עובדים באמצעות IAM.

הוספת ישויות

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

המסוף

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

    כניסה ל-Cloud Run

  2. לוחצים על תיבת הסימון לצד השירות שרוצים להוסיף לו ישויות. לא לוחצים על השירות עצמו.
  3. בחלונית המידע בפינה השמאלית העליונה, לוחצים על הכרטיסייה הרשאות. אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel ואז על Permissions.
  4. לוחצים על Add principal.
  5. בשדה New principals, מזינים את הזהות (או הזהויות) שצריכה גישה לשירות.
  6. בתפריט הנפתח הקצאת תפקידים, בוחרים תפקיד או תפקידים. התפקידים שבחרתם יופיעו בחלונית עם תיאור קצר של ההרשאות שהם מעניקים.
  7. לוחצים על Save.

gcloud

משתמשים בפקודה הבאה:

gcloud run services add-iam-policy-binding SERVICE_NAME \
  --member=PRINCIPAL \
  --role=ROLE

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE_NAME: שם השירות.
  • PRINCIPAL: סוג החשבון הראשי (לדוגמה, user:email@domain.com). רשימת הערכים הקבילים ל-PRINCIPAL מופיעה במאמר מזהים של חשבונות ראשיים.
  • ROLE: התפקיד. רשימת הערכים הקבילים ל-ROLE מופיעה במאמר תפקידי IAM ב-Cloud Run.

הסרת חשבונות ראשיים מתפקיד

כדי להסיר חשבונות ראשיים מתפקיד בשירות:

המסוף

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

    כניסה ל-Cloud Run

  2. לוחצים על תיבת הסימון לצד השירות שרוצים להסיר ממנו את הגורמים המורשים. לא לוחצים על השירות עצמו.
  3. בחלונית המידע בפינה השמאלית העליונה, לוחצים על הכרטיסייה הרשאות. אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel ואז על Permissions.
  4. מזינים את החשבון הראשי שרוצים להסיר במסנן של רשימת התפקידים, שבו מוצגים כל התפקידים שניתנו לחשבון הראשי הזה.
  5. לוחצים על סמל פח האשפה מחיקה לצד החשבון הראשי בתפקיד הרצוי כדי להסיר את התפקיד מהחשבון הראשי.
  6. בתיבת הדו-שיח לאישור, יש אפשרות להסיר את החשבון הראשי מכל התפקידים בשירות. לוחצים על הסרה כדי להסיר את החשבון הראשי מהתפקיד.

gcloud

משתמשים בפקודה הבאה:

gcloud run services remove-iam-policy-binding SERVICE_NAME \
  --member=PRINCIPAL \
  --role=ROLE

מחליפים את מה שכתוב בשדות הבאים:

הוספה או הסרה של משתמשים בצובר

כדי להוסיף או להסיר שירות לכמה משתמשים בבת אחת:

המסוף

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

    כניסה ל-Cloud Run

  2. לוחצים על תיבת הסימון שמימין לשירות שרוצים להוסיף לו ישויות או להסיר ממנו ישויות. לא לוחצים על השירות עצמו.
  3. בוחרים את השירות שרוצים להוסיף לו ישויות או להסיר ממנו ישויות.
  4. בחלונית המידע בפינה השמאלית העליונה, לוחצים על הכרטיסייה הרשאות. אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel ואז על Permissions.

אם רוצים להוסיף ישויות:

  1. לוחצים על Add principal.
  2. בשדה New principals, מזינים את הזהות (או הזהויות) שצריכה גישה לשירות.
  3. בתפריט הקצאת תפקידים, בוחרים תפקיד (או תפקידים). התפקידים שבחרתם יופיעו בחלונית עם תיאור קצר של ההרשאות שהם מעניקים.
  4. לוחצים על Save.

אם רוצים להסיר חשבונות ראשיים:

  1. מזינים את החשבון הראשי שרוצים להסיר במסנן של רשימת התפקידים, שבו מוצגים כל התפקידים שניתנו לחשבון הראשי הזה.
  2. לוחצים על סמל פח האשפה delete בשורה של החשבון.
  3. בתיבת הדו-שיח לאישור, יש אפשרות להסיר את החשבון הראשי מכל התפקידים בשירות. לוחצים על הסרה כדי להסיר את החשבון הראשי מהתפקיד.

gcloud

יוצרים מדיניות IAM:

cat <<EOF > policy.json
{
  "bindings": [
    {
      "role": ROLE,
      "members": [
        PRINCIPAL
      ]
    }
  ]
}
EOF

משתמשים בפקודה gcloud run services set-iam-policy:

gcloud run services set-iam-policy SERVICE_NAME policy.json

רשימת הערכים הקבילים עבור PRINCIPAL מופיעה במאמר מזהים של חשבונות משתמשים. רשימת הערכים הקבילים ל-ROLE מופיעה במאמר תפקידי IAM ב-Cloud Run.

הצגת הגורמים הראשיים

כדי לראות את חשבונות המשתמשים בשירות:

המסוף

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

    כניסה ל-Cloud Run

  2. לוחצים על תיבת הסימון שמימין לשירות שרוצים לראות את חשבונות המשתמשים והתפקידים שלו. לא לוחצים על השירות עצמו.
  3. בוחרים את השירות שרוצים לראות את החשבונות הראשיים והתפקידים שלו.
  4. בחלונית המידע בפינה השמאלית העליונה, לוחצים על הכרטיסייה הרשאות. אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel ואז על Permissions.
  5. תוצג רשימה של תפקידים וחשבונות משתמשים, מקובצים לפי התפקיד שהוקצה.

gcloud

משתמשים בפקודה הבאה:

gcloud run services get-iam-policy SERVICE_NAME

שליטה בגישה לכל המשאבים של Cloud Run בפרויקט

אם רוצים להקצות תפקידים לחשבונות ראשיים בכל השירותים והמשימות בפרויקט, אפשר להשתמש ב-IAM ברמת הפרויקט.

המסוף

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

    כניסה לדף IAM

  2. מוצאים את חשבון המשתמש שרוצים לתת לו תפקיד ברמת הפרויקט.

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

  4. לוחצים על Add another role ובוחרים את התפקיד הנדרש.

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

gcloud

משתמשים בפקודה gcloud projects add-iam-policy-binding:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=PRINCIPAL \
  --role=ROLE

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID: המזהה של הפרויקט ב- Google Cloud.
  • PRINCIPAL: החשבון הראשי (לדוגמה, user:email@domain.com).
  • ROLE: התפקיד (לדוגמה, roles/run.admin).

אי אפשר להחיל את סוגי החשבונות הראשיים allUsers ו-allAuthenticatedUsers ברמת הפרויקט, אלא צריך להוסיף אותם לכל שירות בנפרד.

הגדרת שירות כציבורי

יש שתי דרכים ליצור שירות ציבורי ב-Cloud Run:

  • משביתים את בדיקת ה-IAM של Cloud Run Invoker (מומלץ).
  • מקצים את תפקיד ה-IAM‏ Cloud Run Invoker לסוג החבר allUsers.

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

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

  • run.services.create
  • run.services.update
  • run.services.setIamPolicy

ההרשאות האלה כלולות בתפקיד Cloud Run Admin‏ (roles/run.admin). רשימה מלאה של התפקידים וההרשאות שמשויכות אליהם מופיעה במאמר תפקידי IAM ב-Cloud Run.

השבתת בדיקת ה-IAM של Cloud Run Invoker

הדרך המומלצת להפוך שירות לציבורי היא להשבית את בדיקת ההרשאות של Cloud Run Invoker ב-IAM. כברירת מחדל, Cloud Run מבצע את הבדיקה הזו. משתמשים בפתרון הזה כשהפרויקט כפוף לאילוץ של שיתוף מוגבל לדומיין במדיניות הארגון.

כדי להשבית את הבדיקה:

המסוף

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

    כניסה ל-Cloud Run

  2. אם אתם מגדירים שירות חדש, לוחצים על יצירת שירות וממלאים את הדף של הגדרות השירות הראשוניות לפי הצורך.

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

  3. בוחרים באפשרות Allow public access (מתן גישה לכולם).

  4. לוחצים על יצירה או על שמירה.

gcloud

  • כדי ליצור שירות חדש, משתמשים בפקודה gcloud run deploy עם הדגל --no-invoker-iam-check:

    gcloud run deploy SERVICE_NAME --no-invoker-iam-check

    מחליפים את SERVICE_NAME בשם השירות.

  • בשביל שירות קיים, משתמשים בפקודה gcloud run services update עם הדגל --no-invoker-iam-check:

    gcloud run services update SERVICE_NAME --no-invoker-iam-check

מחליפים את SERVICE_NAME בשם השירות.

YAML

  1. כדי להציג ולהוריד את ההגדרות:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את ההערה run.googleapis.com/invoker-iam-disabled::

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
        annotations:
          run.googleapis.com/invoker-iam-disabled: 'true'
        name: SERVICE_NAME

    מחליפים את SERVICE_NAME בשם של שירות Cloud Run.

  3. מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

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

מוסיפים את השורות הבאות למשאב google_cloud_run_v2_service בתצורת Terraform:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = true

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE: השם של שירות Cloud Run.
  • REGION: האזור Google Cloud . לדוגמה, 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

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

הפעלה מחדש של בדיקת Cloud Run Invoker IAM

כדי להפעיל מחדש את הבדיקה:

המסוף

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

    כניסה ל-Cloud Run

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

  3. בוחרים באפשרות דרישת אימות ואז באפשרות ניהול זהויות והרשאות גישה (IAM).

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

gcloud

  • מעדכנים את השירות באמצעות הדגל --invoker-iam-check:

    gcloud run services update SERVICE_NAME --invoker-iam-check

    מחליפים את SERVICE_NAME בשם השירות.

YAML

  1. כדי להציג ולהוריד את ההגדרות:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים את ההערה run.googleapis.com/invoker-iam-disabled::

    apiVersion: serving.knative.dev/v1
     kind: Service
     metadata:
        annotations:
           run.googleapis.com/invoker-iam-disabled: 'false'
        name: SERVICE_NAME

    מחליפים את SERVICE_NAME בשם של שירות Cloud Run.

Terraform

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

מוסיפים את השורות הבאות למשאב google_cloud_run_v2_service בתצורת Terraform:
resource "google_cloud_run_v2_service" "default" {
   name     = "SERVICE"
   location = "REGION"
   invoker_iam_disabled = false

   template {
      containers {
      image = "IMAGE_URL"
      }
   }
}

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE: השם של שירות Cloud Run.
  • REGION: האזור Google Cloud . לדוגמה, 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

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

הגדרת מדיניות הארגון לבדיקת הרשאות IAM להפעלת Cloud Run

אדמינים יכולים להגביל את האפשרות להשבית את בדיקת ה-IAM של הפונקציה שמפעילה את הפונקציה באמצעות האילוץ המנוהל constraints/run.managed.requireInvokerIam. האילוץ הזה לא נאכף כברירת מחדל.

מקצים את תפקיד ה-IAM של Cloud Run Invoker לסוג החבר allUsers

כדי לאפשר גישה ציבורית לשירות, צריך להקצות את תפקיד IAM של Cloud Run Invoker לסוג החבר allUsers.

כדי להגדיר אימות בשירות Cloud Run, צריכה להיות לכם הרשאת run.services.setIamPolicy. ההרשאה הזו כלולה בתפקיד 'אדמין של Cloud Run'. רשימה מלאה של התפקידים וההרשאות שמשויכות אליהם מופיעה במאמר תפקידי IAM ב-Cloud Run.

המסוף

בשירות Cloud Run קיים:

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

    כניסה למסוף Google Cloud

  2. מימין לשירות שרוצים להפוך לציבורי, לוחצים על תיבת הסימון. לא לוחצים על השירות עצמו.

  3. בחלונית המידע בפינה השמאלית העליונה, לוחצים על הכרטיסייה הרשאות. אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel ואז על Permissions.

  4. לוחצים על Add principal.

בשדה New principals, מזינים את הערך allUsers.

  1. בתפריט Select a role (בחירת תפקיד), בוחרים בתפקיד Cloud Run Invoker (הפעלת Cloud Run).

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

  3. תתבקשו לאשר שאתם רוצים להפוך את המשאב הזה לציבורי. לוחצים על Allow public access כדי להחיל את השינוי על הגדרות ה-IAM של השירות.

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

gcloud

כדי להפוך שירות לנגיש לציבור, משתמשים בפקודה gcloud run services כדי להוסיף את סוג החבר המיוחד allUsers לשירות ולהעניק לו את התפקיד roles/run.invoker:

  gcloud run services add-iam-policy-binding [SERVICE_NAME] \
    --member="allUsers" \
    --role="roles/run.invoker"

כדי שהשירות יהיה נגיש לכולם כשפורסים אותו, מריצים את הפקודה gcloud run deploy:

gcloud run deploy [SERVICE_NAME] ... --allow-unauthenticated

YAML

יוצרים קובץ בשם policy.yaml עם התוכן הבא:

bindings:
- members:
  - allUsers
  role: roles/run.invoker

כדי לאפשר גישה ציבורית ל-SERVICE הקיים, צריך להשתמש ב:

gcloud run services set-iam-policy SERVICE policy.yaml

Terraform

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

מוסיפים את השורות הבאות למשאב google_cloud_run_v2_service בתצורת Terraform:
resource "google_cloud_run_v2_service" "default" {
  name     = "public-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }
}

כדי לעדכן את הקישור של IAM בשירות roles/run.invoker, מוסיפים את ההפניה הבאה למשאב של שירות Cloud Run:

resource "google_cloud_run_service_iam_binding" "default" {
  location = google_cloud_run_v2_service.default.location
  service  = google_cloud_run_v2_service.default.name
  role     = "roles/run.invoker"
  members = [
    "allUsers"
  ]
}

הקישור הזה הוא סמכותי רק לתפקיד הנתון. שאר ההתאמות (bindings) של IAM במדיניות IAM של השירות נשמרות.

שימוש בתנאים ב-IAM

אתם יכולים להשתמש בתנאים של IAM כדי להגדיר ולאכוף בקרת גישה מותנית למשאבים מסוימים ב-Cloud Run, על סמך מאפיינים. ‫Cloud Run תומך במאפייני התנאי (request.host) ו-(request.path) כדי להעניק גישה מותנית כשמפעילים שירותים של Cloud Run ומאגרי עובדים.

לדוגמה, כדי להעניק גישה מותנית עם המאפיינים request.host ו-request.path כשמפעילים שירותים של Cloud Run, מוסיפים את השדה condition כשמריצים את הפקודה הבאה:

gcloud run services add-iam-policy-binding SERVICE_NAME \
    --member=PRINCIPAL \
    --role=ROLE \
    --region=REGION \
    --condition=[KEY=VALUE,...]

מחליפים את מה שכתוב בשדות הבאים:

  • SERVICE_NAME: שם השירות (לדוגמה, my-service).
  • PRINCIPAL: החשבון הראשי (לדוגמה, user:email@domain.com).
  • ROLE: התפקיד (לדוגמה, roles/run.invoker).
  • REGION: האזור (לדוגמה, europe-west1).
  • KEY=VALUE: תנאי שרוצים לכלול בקישור. הדגל --condition חייב לכלול את צמדי מפתח/ערך expression ו-title.

השלבים הבאים

איך מאמתים בצורה מאובטחת מפתחים, שירותים ומשתמשים בשירותים שאובטחו זה עתה.