בקרת גישה באמצעות IAM
בדף הזה מופיע מידע נוסף על שימוש בתפקידים בניהול זהויות והרשאות גישה (IAM) כדי להגדיר בקרת גישה ברמת הפרויקט, ולקבוע את רמת הגישה לפרויקט ולפונקציות שנוצרו באמצעות פקודות gcloud functions או Cloud Functions v2 API. Google Cloud
אם יצרתם או פרסתם פונקציות באמצעות Cloud Run, תוכלו לקרוא את המאמרים בנושא בקרת גישה באמצעות IAM ותפקידים ב-Cloud Run כדי לקבל תיאור מפורט של תפקידים מוגדרים מראש ב-Cloud Run, של בקרת גישה לשירותים ספציפיים, של הגדרת שירות כציבורי או של הגדרת מדיניות ארגונית עבור IAM של Cloud Run invoker.
בקרת גישה למשתמשים
מוסיפים משתמשים כחברי צוות לפרויקט ומקצים להם תפקידים באמצעות IAM.
פונקציות Cloud Run תומכות בתפקידים הבאים:
- תפקידים מוגדרים מראש ב-Cloud Run (מומלץ)
- תפקידים מוגדרים מראש ב-Cloud Functions
- תפקידים בסיסיים של עריכה, בעלים וצפייה.
בקרת גישה לחשבונות שירות
חשבון שירות הוא סוג מיוחד של חשבון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).
בנוסף, כל סביבות זמן הריצה מבצעות בנייה ואחסון של קובצי אימג' של קונטיינר בתוך הפרויקט שלכם. כדי לתמוך בכך, צריך גם להקצות את הפריטים הבאים:
- חשבון השירות מדור קודם של Cloud Build1 (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com) - חשבון השירות של סוכן השירות של Cloud Build (
service-PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com) - חשבון השירות של סוכן השירות של Google Container Registry (
service-PROJECT_NUMBER@containerregistry.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
פתרון בעיות שקשורות להרשאות
אם מופיעות שגיאות הרשאה כשמבצעים פריסה, עדכון, מחיקה או הפעלה של פונקציות בפרויקט, צריך לבצע את השלבים הבאים:
מוודאים שיש לכם תפקיד עריכה או בעלים בפרויקט, או שאתם משתמשים בתפקיד מפתח Cloud Functions.
אם משתמשים בתפקיד Cloud Functions Developer ברמת הפרויקט, צריך לוודא שהענקתם למשתמש את התפקיד IAM Service Account User.
נכון לעכשיו, אפשר להגדיר הרשאות הפעלה רק ברמת הפונקציה.
מוודאים שלחשבון השירות של סוכן השירות של 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.מוודאים שיש לכם הרשאות למקורות של טריגרים, כמו Pub/Sub או Cloud Storage.
אם מוצגת השגיאה 'אין הרשאות מספיקות' או שיש בעיות אחרות באימות כשמריצים את הפונקציות, צריך לוודא שלחשבון השירות של זמן הריצה יש את ההרשאות הנכונות לגישה למשאבים שהפונקציות צריכות. לאחר מכן, חוזרים על שלבים 2 ו-3.
אם מופיעה השגיאה 'השירות לא זמין' במהלך הפריסה, צריך לוודא שחשבון השירות של זמן הריצה PROJECT_ID@appspot.gserviceaccount.comקיים בפרויקט. כדי ליצור מחדש את חשבון השירות הזה אם הוא נמחק, אפשר לעיין במאמר בנושא ביטול מחיקה של חשבון שירות.
אפשר לעיין גם במאמר בנושא פתרון בעיות בפונקציות Cloud Run.
1 פונקציות Cloud Run משתמשות רק בחשבון השירות מדור קודם של Cloud Build לפרויקטים שנוצרו לפני יולי 2024.