במאמר הזה מוסבר איך להגדיר את ה-builds כך שישתמשו בחשבון שירות בניהול המשתמש.
אם לא תציינו חשבון שירות בניהול המשתמש בשביל ה-builds, Cloud Build ישתמש באופן אוטומטי בחשבון השירות שמוגדר כברירת מחדל ב-Cloud Build. יכול להיות שלחשבון השירות הזה שמוגדר כברירת מחדל יש הרשאות רחבות מדי, כמו גישה למאגרים שלכם ב-Cloud Source Repositories ולכל קטגוריה של Cloud Storage בפרויקט.
מומלץ לפעול לפי העיקרון של הרשאות מינימליות, ולהקצות לחשבונות השירות הרשאות ותפקידים שמוגבלים למשימה שהם מבצעים. לדוגמה, אתם יכולים להשתמש בחשבון שירות אחד כדי ליצור תמונות ולשלוח אותן ל-Artifact Registry, כמו שמוצג בGoogle Cloud בלוג.
לפני שמתחילים
-
מפעילים את Cloud Build API ואת IAM API, אם הם עדיין לא מופעלים.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים? אם אתם מתכננים להשתמש בחשבון הזה כדי ליצור ולנהל פרטי כניסה לחשבון, לדוגמה כדי ליצור פרטי כניסה לטווח קצר, הפעילו את IAM Service Account Credentials API.
התפקידים שנדרשים כדי להפעיל ממשקי API
כדי להפעיל ממשקי API, צריך את ההרשאה
serviceusage.services.enable. אם אתם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד "בעלים" (roles/owner). אחרת, אתם יכולים לקבל את ההרשאה הזו דרך התפקיד "אדמין בממשק 'שימוש בשירות'" (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים?אם עדיין לא עשיתם זאת, צרו חשבון שירות.
הגדרת חשבון השירות
כדי שלחשבון השירות שמנוהל על ידי המשתמש יהיו ההרשאות הנדרשות להרצת ה-builds, צריך להקצות לו תפקידי IAM. אפשר גם להגדיר את Cloud Build כך שיבחר באופן אוטומטי את חשבון השירות הזה לטריגרים חדשים.
-
במסוף Google Cloud , נכנסים לדף Permissions של settings Cloud Build:
בתפריט Service account, בוחרים את חשבון השירות. כדי לבחור חשבון שירות בפרויקט אחר, לוחצים על Switch project.
כדי להשתמש בחשבון השירות שנבחר כחשבון השירות לטריגרים חדשים, מפעילים את האפשרות Set as pre-selected for new triggers.
ברשימת השירותים של Google Cloud , מפעילים את תפקידי ה-IAM שרוצים להקצות לחשבון השירות.
אם התפקיד שאתם צריכים לצינור עיבוד הנתונים של ה-build לא מופיע כאן, אתם יכולים להקצות תפקידים נוספים בדף ההגדרות של IAM.
אם בחרתם חשבון שירות בפרויקט אחר, בצעו את השלבים שמפורטים בקטע הגדרה בפרויקטים שונים.
למידע נוסף על תפקידי IAM שבדרך כלל נדרשים ל-build, קראו את המידע הבא:
- חשבון השירות שמוגדר כברירת מחדל ב-Cloud Build.
- הגדרת הגישה למשאבים של Cloud Build.
- תפקידים והרשאות של Cloud Build ב-IAM
הגדרת יומני build
כשמציינים חשבון שירות משלכם ל-builds, צריך לאחסן את יומני ה-build באחד מסוגי הקטגוריות הבאים:
קטגוריות של Cloud Storage בפרויקט של המשתמש. אלה יכולים להיות קטגוריות שנוצרו על ידי משתמשים או קטגוריות שנוצרו על ידיGoogle Cloudובבעלות משתמשים.
אם אתם יוצרים קטגוריית יומנים, ודאו שאין לה מדיניות שמירת נתונים, כי המדיניות עשויה למנוע מ-Cloud Build לכתוב יומני build לקטגוריה.
אי אפשר לאחסן את היומנים בקטגוריית יומנים שבבעלות Google Cloud.
מידע נוסף על המקומות שבהם אפשר לאחסן את יומני ה-build זמין במאמר אפשרויות אחסון של יומני build.
הרצת build באמצעות קובץ תצורה
כדי להריץ build באופן ידני באמצעות קובץ תצורה:
בתיקיית השורש של הפרויקט, יוצרים קובץ תצורה של Cloud Build בשם
cloudbuild.yamlאוcloudbuild.json.מוסיפים את השדה
serviceAccountואת הגדרת הרישום ביומן המועדפת.אם אתם שומרים את יומני ה-build ב-Cloud Logging, הוסיפו שדה
loggingוהגדירו את הערך של השדה ל-CLOUD_LOGGING_ONLY.אם אתם מאחסנים את יומני ה-build בקטגוריה של Cloud Storage שנוצרה על ידי משתמש:
- מוסיפים שדה
loggingומגדירים את הערך שלו כ-GCS_ONLY. - מוסיפים שדה
logsBucketומגדירים את הערך שלו למיקום של הקטגוריה ב-Cloud Storage.
- מוסיפים שדה
בדוגמה הבאה, Cloud Build מוגדר להריץ גרסאות build באמצעות חשבון שירות בניהול המשתמש, ויומני ה-build מוגדרים לאחסון בקטגוריה של Cloud Storage שנוצרה על ידי המשתמש:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' serviceAccount: 'projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT' options: logging: GCS_ONLYJSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "serviceAccount": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT", "options": { "logging": "GCS_ONLY" } }מחליפים את המשתנים בקובץ התצורה של ה-build בערכים הבאים:
-
LOGS_BUCKET_LOCATIONהיא הקטגוריה של Cloud Storage שבה מאוחסנים יומני ה-build. לדוגמה,gs://mylogsbucket. -
PROJECT_IDהוא המזהה של הפרויקט ב- Google Cloud שבו מריצים את ה-build. -
SERVICE_ACCOUNTהיא כתובת האימייל או המזהה הייחודי של חשבון השירות שרוצים לציין ל-builds. לדוגמה, כתובת אימייל של חשבון שירות נראית כך:service-account-name@project-id.iam.gserviceaccount.com.
מפעילים את ה-build באמצעות קובץ תצורת ה-build:
gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORYמחליפים את המשתנים בפקודות בערכים הבאים:
-
CONFIG_FILE_PATHהוא הנתיב לקובץ תצורת ה-build. -
SOURCE_DIRECTORYהוא הנתיב או כתובת ה-URL של קוד המקור.
אם לא מציינים את CONFIG_FILE_PATH ו-SOURCE_DIRECTORY בפקודה
gcloud builds submit, המערכת של Cloud Build מניחה שקובץ תצורת ה-build וקוד המקור נמצאים בספריית העבודה הנוכחית.-
הרצת גרסאות build באמצעות טריגרים
כדי להריץ גרסת build עם טריגרים לפיתוח גרסת Build של Cloud Build באמצעות חשבון שירות משלכם, צריך להגדיר את אפשרות הרישום ביומן המועדפת ולבחור את חשבון השירות המועדף כשיוצרים את הטריגר.
אם אתם רוצים להשתמש באותו חשבון שירות לכל הטריגרים החדשים, אתם יכולים להגדיר את Cloud Build כך שיבחר אוטומטית את חשבון השירות.
בקובץ תצורת ה-build:
אם אתם שומרים את יומני ה-build ב-Cloud Logging, הוסיפו שדה
loggingוהגדירו את הערך של השדה ל-CLOUD_LOGGING_ONLY.אם אתם מאחסנים את יומני ה-build בקטגוריה של Cloud Storage שנוצרה על ידי משתמש:
- מוסיפים שדה
loggingומגדירים את הערך שלו כ-GCS_ONLY. - מוסיפים שדה
logsBucketומגדירים את הערך שלו למיקום של הקטגוריה ב-Cloud Storage.
- מוסיפים שדה
בדוגמה הבאה, יומני ה-build מוגדרים לאחסון בקטגוריה של Cloud Storage שנוצרה על ידי המשתמש:
YAML
steps: - name: 'bash' args: ['echo', 'Hello world!'] logsBucket: 'LOGS_BUCKET_LOCATION' options: logging: GCS_ONLYJSON
{ "steps": [ { "name": "bash", "args": [ "echo", "Hello world!" ] } ], "logsBucket": "LOGS_BUCKET_LOCATION", "options": { "logging": "GCS_ONLY" } }מחליפים את
LOGS_BUCKET_LOCATIONבקטגוריה של Cloud Storage שבה רוצים לאחסן את יומני ה-build. לדוגמה,gs://mylogsbucket.מציינים את חשבון השירות שבו רוצים להשתמש עם הטריגר לפיתוח גרסת ה-Build:
המסוף
בשדה Service account, מציינים את חשבון השירות. כדי לבחור חשבון שירות בפרויקט אחר, לוחצים על Switch project.
אם לא מציינים חשבון שירות, Cloud Build משתמש בחשבון השירות שמוגדר כברירת מחדל.
לוחצים על Create כדי לשמור את הטריגר לפיתוח גרסת ה-Build.
gcloud
כשיוצרים טריגר לפיתוח גרסת build, מציינים את חשבון השירות באמצעות הדגל
--service-account. בדוגמה הבאה, הפקודהgcloudיוצרת טריגר לפיתוח גרסת build שמושך קוד ממאגר Git:gcloud builds triggers create github \ --name=TRIGGER_NAME \ --repo-name=REPO_NAME \ --repo-owner=REPO_OWNER \ --branch-pattern=BRANCH_PATTERN --build-config=BUILD_CONFIG_FILE --service-account=SERVICE_ACCOUNT --project=BUILD_PROJECTמחליפים את המשתנים בקובץ התצורה של ה-build בערכים הבאים:
-
TRIGGER_NAMEהוא השם של הטריגר לפיתוח גרסת ה-Build. -
REPO_NAMEהוא שם המאגר. -
REPO_OWNERהוא שם המשתמש של הבעלים של המאגר. -
BRANCH_PATTERNהוא שם ההסתעפות במאגר שבו רוצים להפעיל את ה-build. -
TAG_PATTERNהוא שם התג במאגר שבו רוצים להפעיל את ה-build. -
BUILD_CONFIG_FILEהוא הנתיב לקובץ תצורת ה-build. -
SERVICE_ACCOUNTהוא חשבון השירות בפורמט/projects/PROJECT_ID/serviceAccounts/ACCOUNT_ID_OR_EMAIL. -
BUILD_PROJECTהוא הפרויקט שבו מתחילים את ה-builds.
הגדרה בכמה פרויקטים
אתם יכולים להשתמש בחשבון שירות בניהול המשתמשים כדי להריץ גרסאות build בפרויקט שונה מהפרויקט שבו יצרתם את חשבון השירות, רק אם לא נאכפת מגבלת מדיניות הארגון iam.disableCrossProjectServiceAccountUsage. האילוץ הזה נאכף כברירת מחדל.
מידע נוסף
הפקודה הבאה משביתה את אכיפת האילוץ הזה ומעניקה את הגישה הנדרשת. לפני שמגדירים את האילוץ במדיניות הארגון, חשוב להבין את ההשלכות של האילוץ על האבטחה:
gcloud resource-manager org-policies disable-enforce \ iam.disableCrossProjectServiceAccountUsage \ --project=SERVICE_ACCOUNT_PROJECT_IDבפקודה הזו, SERVICE_ACCOUNT_PROJECT_ID הוא הפרויקט שמכיל את חשבון השירות בניהול המשתמשים.
בפרויקט שבו נמצא חשבון השירות בניהול המשתמש, מקצים את התפקיד
roles/iam.serviceAccountTokenCreatorלסוכן השירות של Cloud Build בפרויקט שבו מריצים את ה-builds:gcloud projects add-iam-policy-binding SERVICE_ACCOUNT_PROJECT_ID \ --member="serviceAccount:BUILD_SERVICE_AGENT" \ --role="roles/iam.serviceAccountTokenCreator"מחליפים את המשתנים בפקודה בערכים הבאים:
-
SERVICE_ACCOUNT_PROJECT_ID: מזהה הפרויקט שמכיל את חשבון השירות שמנוהל על ידי המשתמש. -
BUILD_SERVICE_AGENT: מזהה האימייל של סוכן השירות בפורמטservice-BUILD_PROJECT_NUMBER@gcp-sa-cloudbuild.iam.gserviceaccount.com, כאשרBUILD_PROJECT_NUMBERהוא מספר הפרויקט שבו מריצים את ה-builds. אפשר למצוא את מספר הפרויקט בדף הגדרות הפרויקט.
-
מגבלות:
הפרויקט ב- Google Cloud חייב להיות בארגון ב- Google Cloud .
צריך להתחיל את ה-builds בשורת הפקודה באמצעות
gcloud builds submitאוgcloud builds triggers create.אם קיבלתם את השגיאה
service account not foundכשניסיתם להקצות את תפקיד ה-IAM, יכול להיות שאתם צריכים ליצור את סוכן השירות באופן ידני.