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

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

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

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

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

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

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

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

אתם יכולים לשלוט בגישה לכל שירות, לכל משימה, לכל מאגר של Worker או לכל מכונה באמצעות IAM.

הוספת חשבונות משתמשים

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

המסוף

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

    כניסה ל-Cloud Run

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

gcloud

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

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

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

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

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

המסוף

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

    כניסה ל-Cloud Run

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

gcloud

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

gcloud run services remove-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. בוחרים את השירות שרוצים להוסיף לו חשבונות משתמשים או להסיר ממנו חשבונות משתמשים.
  4. בחלונית המידע שבפינה הימנית העליונה, לוחצים על הכרטיסייה Permissions. אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel ואז על Permissions.

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

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

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

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

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. בחלונית המידע שבפינה הימנית העליונה, לוחצים על הכרטיסייה Permissions. אם חלונית המידע לא מוצגת, יכול להיות שתצטרכו ללחוץ על Show Info Panel ואז על Permissions.
  5. תוצג רשימה של תפקידים וחשבונות משתמשים, מקובצת לפי התפקיד שהוקצה.

gcloud

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

gcloud run services get-iam-policy SERVICE_NAME

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

gcloud

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

gcloud beta run instances get-iam-policy INSTANCE_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" לסוג החבר allUsers.

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

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

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

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

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

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

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

המסוף

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

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, לוחצים על Services:

    1. אם אתם מגדירים שירות חדש, לוחצים על Deploy container וממלאים את דף הגדרות השירות הראשוני.

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

  3. לוחצים על Allow public access.

  4. כדי ליצור שירות חדש, לוחצים על יצירה. לוחצים על View diff & redeploy ואז על Deploy changes בשירות קיים.

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.

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

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

המסוף

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

    כניסה ל-Cloud Run

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

  3. בוחרים באפשרות Require authentication ובוחרים באפשרות Identity and Access Management (IAM).

  4. לוחצים על View diff & redeploy ואז על Deploy changes.

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" לסוג החבר allUsers.

כדי לאפשר גישה ציבורית לשירות, אתם יכולים להקצות את התפקיד "מפעיל Cloud Run" ב-IAM לסוג החבר allUsers.

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

המסוף

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

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

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

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

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

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

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

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

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

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

אם אתם יוצרים שירות חדש, צרו את השירות ובחרו באפשרות Allow public access בקטע Authentication כדי שהשירות יהיה זמין לכולם. כדי להפוך שירות לפרטי, בוחרים באפשרות Require authentication.

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"
  ]
}

הקישור הזה הוא סמכותי רק לתפקיד הנתון. קישורי IAM אחרים במדיניות ה-IAM של השירות נשמרים.

שימוש בתנאי IAM

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

לדוגמה, כדי לתת גישה מותנית עם המאפיינים 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.

השלבים הבאים

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