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

בדף הזה מופיע מידע נוסף על שימוש בתפקידים בניהול זהויות והרשאות גישה (IAM) כדי להגדיר בקרת גישה ברמת הפרויקט, ולקבוע את רמת הגישה לפרויקט ולפונקציות שנוצרו באמצעות פקודות gcloud functions או Cloud Functions v2 API. Google Cloud

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

בקרת גישה למשתמשים

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

פונקציות Cloud Run תומכות בתפקידים הבאים:

בקרת גישה לחשבונות שירות

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

חשבונות השירות הבאים משמשים לפונקציות Cloud Run:

שם מספר חבר תפקיד
חשבון השירות של Compute Engine שמוגדר כברירת מחדל PROJECT_NUMBER-compute@developer.gserviceaccount.com עריכה
סוכן שירות של Google Cloud Functions service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com סוכן שירות של Google Cloud Functions
חשבון שירות מדור קודם של Cloud Build1 PROJECT_NUMBER@cloudbuild.gserviceaccount.com חשבון השירות של Cloud Build
חשבון השירות של Cloud Build service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com סוכן שירות של Cloud Build
סוכן שירות של Google Container Registry service-PROJECT_NUMBER@containerregistry.iam.gserviceaccount.com סוכן שירות של Container Registry
סוכן שירות של Artifact Registry service-PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com סוכן שירות של Artifact Registry

חשבונות שירות בזמן ריצה

בזמן הריצה, פונקציות Cloud Run משתמשות כברירת מחדל בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine‏ (PROJECT_NUMBER-compute@developer.gserviceaccount.com), שמוגדר בו גם התפקיד עריכה בפרויקט. אתם יכולים לשנות את התפקידים של חשבונות השירות האלה כדי להגביל או להרחיב את ההרשאות של הפונקציות הפועלות. אפשר גם לשנות את חשבון השירות שבו נעשה שימוש על ידי הימנעות משימוש בחשבון השירות שמוגדר כברירת מחדל כשמגדירים את זהות השירות.

מידע נוסף על חשבונות שירות זמין במאמר חשבונות שירות.

חשבונות שירות אדמיניסטרטיביים

כדי לבצע פעולות ניהול בפרויקט במהלך יצירה, עדכון או מחיקה של פונקציות, כל הפרויקטים בפונקציות Cloud Run צריכים את חשבון השירות של סוכן השירות Google Cloud Functions ‏(service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com).

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

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

חשבון השירות של סוכן השירות Google Cloud Functions

כברירת מחדל, לחשבון השירות של סוכן השירות של Google Cloud Functions‏ (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) מוקצה התפקיד cloudfunctions.serviceAgent בפרויקט.

הנה כמה מההרשאות הבולטות שבהן נעשה שימוש ב-cloudfunctions.serviceAgent:

הרשאה תיאור
roles/artifactregistry.admin ניהול מאגרי מידע ואחסון תמונות של גרסאות build ב-Artifact Registry.
roles/cloudbuild.builds.editor נדרש כדי להשתמש ב-Cloud Build לביצוע build בפרויקט המשתמש.
roles/cloudbuild.customworkers.builder יצירת קומפילציות בעובדים בהתאמה אישית ב-Cloud Build.
compute.globalOperations.get,
compute.networks.access,
vpcaccess.connectors.{get, use}
הקצאת פונקציות עם גישה ל-VPC של פרויקטים של צרכנים.
roles/eventarc.developer ניהול טריגרים של Eventarc לפונקציות.
firebasedatabase.instances.{get, update} יצירת פונקציות שמופעלות על ידי מסד נתונים בזמן אמת ב-Firebase.
iam.serviceAccounts.{actAs, getAccessToken, signBlob} אפשרות לקבל פרטי כניסה לחשבון שירות בזמן ריצה.
iam.serviceAccounts.getOpenIdToken נדרש כדי שהסוכן יקבל טוקן OpenID ברשות שצוינה על ידי המשתמש. אסימון OpenID משמש להפעלת פונקציות שמופעל בהן IAM.
pubsub.subscriptions ניהול מינויים בפרויקט של המשתמש.
pubsub.topics ניהול נושאים בפרויקט של המשתמש.
roles/run.developer ניהול שירות Cloud Run לפונקציות.
storage.buckets.create,
storage.objects.{delete, get, create, list}
נדרש לאחסון קוד מקור בפרויקט של המשתמש.

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

gcloud iam roles describe roles/cloudfunctions.serviceAgent

כדי לאפס את חשבון השירות הזה לתפקיד ברירת המחדל, מסירים את התפקיד שמוקצה לו ומוסיפים את התפקיד Cloud Functions Service Agent:

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member serviceAccount:service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com \
  --role roles/cloudfunctions.serviceAgent

פתרון בעיות שקשורות להרשאות

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

  1. מוודאים שיש לכם תפקיד עריכה או בעלים בפרויקט, או שאתם משתמשים בתפקיד מפתח Cloud Functions.

    אם משתמשים בתפקיד Cloud Functions Developer ברמת הפרויקט, צריך לוודא שהענקתם למשתמש את התפקיד IAM Service Account User.

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

  2. מוודאים שלחשבון השירות של סוכן השירות של Cloud Functions‏ (service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com) מוקצה התפקיד סוכן השירות של Cloud Functions‏ (cloudfunctions.serviceAgent) בפרויקט.

    כדי לראות את החשבון הזה, צריך לוודא שהתיבה Include Google-provided role grants בכרטיסייה Permissions בדף Console IAM מסומנת. אפשר גם להשתמש ב-gcloud projects add-iam-policy-binding PROJECT_ID.

  3. מוודאים שיש לכם הרשאות למקורות של טריגרים, כמו Pub/Sub או Cloud Storage.

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

אם מופיעה השגיאה 'השירות לא זמין' במהלך הפריסה, צריך לוודא שחשבון השירות של זמן הריצה PROJECT_ID@appspot.gserviceaccount.comקיים בפרויקט. כדי ליצור מחדש את חשבון השירות הזה אם הוא נמחק, אפשר לעיין במאמר בנושא ביטול מחיקה של חשבון שירות.

אפשר לעיין גם במאמר בנושא פתרון בעיות בפונקציות Cloud Run.

1 פונקציות Cloud Run משתמשות רק בחשבון השירות מדור קודם של Cloud Build לפרויקטים שנוצרו לפני יולי 2024.