איך מאפשרים גישה ציבורית (לא מאומתת)

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

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

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

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

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

ההרשאות האלה כלולות בתפקיד אדמין של Cloud Run (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. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-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 של Invoker באמצעות האילוץ המנוהל constraints/run.managed.requireInvokerIam. האילוץ הזה לא נאכף כברירת מחדל.

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

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

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

המסוף

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

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

    כניסה למסוף 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"
  ]
}

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