חשבון שירות בהתאמה אישית ל-Cloud Build (דור ראשון)

פונקציות Cloud Run משתמשות ב-Cloud Build כדי ליצור ולפרוס את פונקציית Cloud Run. כברירת מחדל, פונקציות Cloud Run משתמשות בחשבון השירות שמוגדר כברירת מחדל ב-Cloud Build כחשבון המשתמש כשמבצעים את הבנייה. החל מיולי 2024, חל שינוי בהתנהגות ברירת המחדל של Cloud Build לגבי השימוש בחשבונות שירות בפרויקטים חדשים. השינוי הזה מפורט במאמר בנושא השינוי בחשבון השירות של Cloud Build. כתוצאה מהשינוי הזה, יכול להיות שבפרויקטים חדשים שבהם פורסים פונקציות בפעם הראשונה, נעשה שימוש בחשבון שירות שמוגדר כברירת מחדל ב-Cloud Build עם הרשאות לא מספיקות לבניית פונקציה. אם השינוי הזה משפיע עליכם, אתם יכולים לבצע אחת מהפעולות הבאות:

  • כדאי לעיין בהנחיות של Cloud Build בנושא שינויים בחשבון השירות שמוגדר כברירת מחדל ולהשבית את השינויים האלה.

  • מוסיפים את התפקיד 'חשבון Cloud Build' (roles/cloudbuild.builds.builder) לחשבון השירות של Compute Engine שמוגדר כברירת מחדל.

  • יוצרים חשבון שירות מותאם אישית של Cloud Build לפריסות של פונקציות.

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

אפשר לפרוס פונקציות עם חשבונות שירות בהתאמה אישית באמצעות Google Cloud CLI, מסוףGoogle Cloud או Cloud Run Functions API.

הנה כמה תרחישים שבהם כדאי לספק חשבון שירות אחר לשימוש כש-Cloud Build יוצר את הפונקציה:

  • אתם רוצים יותר שליטה על חשבונות השירות שאתם מוסיפים להיקף של VPC-SC.

  • אתם רוצים ש-Cloud Build יפעל עם הרשאות שונות מאלה של חשבון השירות שמוגדר כברירת מחדל, בלי שתצטרכו לבטל כל הרשאה בנפרד.

  • אתם רוצים להגדיר הרשאות מפורטות ב-Cloud Build במיוחד לפונקציות שלכם, ולא לשתף חשבון שירות ב-Cloud Build שמיועד למטרות אחרות.

  • הארגון שלכם השבית את השימוש בחשבון השירות שמוגדר כברירת מחדל.

הפעלת ממשקי ה-API

כדי להשתמש בתכונה הזו צריך להפעיל את IAM API.

משתמשים ב-Google Cloud CLI כדי להפעיל את ממשקי ה-API שנדרשים לפריסת פונקציה ב-Cloud Run, או משתמשים במסוףGoogle Cloud :

gcloud services enable iam.googleapis.com

הגדרת חשבון שירות

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

כדי לראות את חשבונות השירות הקיימים, אפשר לפעול לפי השלבים הבאים או להשתמש ב-Google Cloud console:

gcloud iam service-accounts list

יצירת חשבון שירות

משתמשים ב-Google Cloud CLI כדי ליצור את חשבון השירות או משתמשים במסוף Google Cloud :

gcloud iam service-accounts create SA_EMAIL

מחליפים את SA_EMAIL בכתובת האימייל של חשבון השירות.

מתן הרשאות

לחשבון השירות שבו אתם משתמשים צריכים להיות מוקצים התפקידים הבאים:

  • roles/logging.logWriter – נדרש לאחסון יומני בנייה ב-Cloud Logging.
  • roles/artifactregistry.writer – חובה לאחסון תמונות של גרסאות build ב-Artifact Registry. כדי להשתמש בהתנהגות שמוגדרת כברירת מחדל, לחשבון השירות צריכה להיות גישה למאגרים בשמות gcf-artifacts ו-cloud-run-source-deploy. אפשר להגדיר את הגישה למאגרים במדיניות IAM של המאגר. אפשר גם לספק מאגר ארטיפקטים משלכם דרך השדה dockerRepository.
  • roles/storage.objectViewer – נדרש כדי לאחזר את מקור הפונקציה מקטגוריה של Cloud Storage, וכדי לאחסן תמונות build ב-Container Registry. כדי להשתמש בהתנהגות שמוגדרת כברירת מחדל, לחשבון השירות צריכה להיות גישה לקטגוריות בשם gcf-sources-*. אפשר לעשות את זה על ידי הוספת תנאי IAM להענקת התפקיד, כמו: (resource.type == "storage.googleapis.com/Object" && (resource.name.startsWith("gcf-sources-")))

  • roles/storage.objectAdmin – נדרש ל-Container registry (הוצא משימוש). כדי לגשת למאגר התמונות של קונטיינרים, נדרשת גישה למאגרי מידע בשם *.artifacts.PROJECT_ID.appspot.com.

מקצים את התפקידים הבאים באמצעות Google Cloud CLI או מסוףGoogle Cloud .

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
    --role=roles/logging.logWriter

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/artifactregistry.writer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectViewer

gcloud projects add-iam-policy-binding PROJECT_ID \
--member=serviceAccount:SA_EMAIL \
--role=roles/storage.objectAdmin

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

שיקולים לגבי VPC Service Controls

אם יש לכם גבול גזרה של VPC Service Controls שמגן על הפרויקט ועל Cloud Run Functions API, ואם אתם משתמשים בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine בתור תפקיד Cloud Build Service Account עבור פונקציות Cloud Run, אתם צריכים ליצור את כללי הכניסה הבאים:

  • מתן אפשרות לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine לגשת לכל השיטות ב-Cloud Storage וב-Cloud Logging APIs.
  • מתן אפשרות לחשבון השירות service-[PROJECT_NUMBER]@gcf-admin-robot.iam.gserviceaccount.com לגשת לכל השיטות ב-Cloud Storage וב-Cloud Logging APIs.

פריסת פונקציה עם חשבון שירות בהתאמה אישית

אפשר להשתמש ב-Google Cloud CLI כדי לפרוס פונקציה שמשתמשת בחשבון שירות מותאם אישית עבור Cloud Build:

  • הדגל --build-service-account מציין חשבון שירות ב-IAM שפרטי הכניסה שלו ישמשו לשלב הבנייה. אם לא מספקים חשבון שירות מותאם אישית, הפונקציה משתמשת בחשבון השירות שמוגדר כברירת מחדל בפרויקט עבור Cloud Build.
  • אפשר גם להשתמש במאגר פרטי, שאותו מציינים באמצעות הדגל --build-worker-pool.

gcloud functions deploy FUNCTION_NAME \
   --no-gen2 \
   --region=REGION \
   --project=PROJECT_ID \
   --runtime=RUNTIME \
   --entry-point=CODE_ENTRYPOINT \
   --build-service-account=projects/PROJECT_ID/serviceAccounts/SA_EMAIL \
   --memory=256Mi \
   --trigger-http \
   --source=.

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