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

יש שתי דרכים ליצור שירות 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 של השירות נשמרים.