במאמר הזה מוסבר איך ליצור מכונה וירטואלית (VM) שמוגדרת להשתמש בחשבון שירות שמנוהל על ידי משתמש. חשבון שירות הוא סוג מיוחד של חשבון, שמשמש בדרך כלל אפליקציה או עומס עבודה כדי לבצע קריאות מורשות ל-API.
חשבונות שירות נדרשים בתרחישים שבהם עומס עבודה (workload), כמו אפליקציה בהתאמה אישית, צריך גישה למשאבי Google Cloud או לבצע פעולות בלי מעורבות של משתמש קצה. שיטות מומלצות לשימוש בחשבונות שירות
אם יש לכם אפליקציות שצריכות לשלוח קריאות לממשקי ה-API של Google Cloud , Google ממליצה לצרף חשבון שירות בניהול המשתמשים למכונה הווירטואלית שבה פועלים האפליקציה או עומס העבודה. לאחר מכן, מקצים לחשבון השירות תפקידי IAM, שמאפשרים לחשבון השירות (וכתוצאה מכך, לאפליקציות שפועלות ב-VM) לגשת למשאבים שלGoogle Cloud .
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא התהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים האלה:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API של Google Cloud , לא צריך להגדיר אימות.
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל.
-
התקינו את ה-CLI של Google Cloud.
-
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
אם משתמשים במעטפת מקומית, צריך ליצור פרטי כניסה לאימות מקומי בחשבון המשתמש:
gcloud auth application-default login
אם אתם משתמשים ב-Cloud Shell, אתם לא צריכים לעשות את זה.
אם מוחזרת שגיאת אימות ואתם משתמשים בספק זהויות חיצוני (IdP), ודאו ש נכנסתם ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
Terraform
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של Terraform שבדף הזה, מתקינים ומפעילים את ה-CLI של gcloud, ואז מגדירים את Application Default Credentials באמצעות פרטי הכניסה של המשתמש.
למידע נוסף, ראו הגדרת אימות לסביבת פיתוח מקומית.
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud.
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות ליצירת מכונות וירטואליות שמשתמשות בחשבונות שירות, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:
- אדמין מכונות של Compute (v1) (
roles/compute.instanceAdmin.v1) - יצירת חשבונות שירות (
roles/iam.serviceAccountCreator) - אדמין IAM בפרויקט (
roles/resourcemanager.projectIamAdmin)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
אלה תפקידים מוגדרים מראש שכוללים את ההרשאות שנדרשות כדי ליצור מכונות וירטואליות שמשתמשות בחשבונות שירות. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי ליצור מכונות וירטואליות שמשתמשות בחשבונות שירות, צריך את ההרשאות הבאות:
-
כדי ליצור חשבונות שירות: כל ההרשאות בתפקיד
iam.serviceAccountCreator -
כדי לתת הרשאות לחשבון השירות:
כל ההרשאות בתפקיד
resourcemanager.projectIamAdmin -
כדי ליצור מכונות וירטואליות:
-
compute.instances.createבפרויקט - כדי להשתמש באימג' בהתאמה אישית ליצירת המכונה הווירטואלית (VM):
compute.images.useReadOnlyבקובץ אימג' - כדי להשתמש ב-snapshot ליצירת המכונה הווירטואלית:
compute.snapshots.useReadOnlyבקובץ snapshot - כדי להשתמש בתבנית של הגדרות מכונה ליצירת המכונה הווירטואלית:
compute.instanceTemplates.useReadOnlyבתבנית של הגדרות המכונה - כדי להקצות רשת מדור קודם למכונה הווירטואלית:
compute.networks.useבפרויקט - כדי לציין כתובת IP סטטית למכונה הווירטואלית:
compute.addresses.useבפרויקט - כדי להקצות כתובת IP חיצונית למכונה הווירטואלית כשמשתמשים ברשת מדור קודם:
compute.networks.useExternalIpבפרויקט - כדי לציין רשת משנה למכונה הווירטואלית:
compute.subnetworks.useבפרויקט או ברשת המשנה שנבחרה - כדי להקצות כתובת IP חיצונית למכונה הווירטואלית כשמשתמשים ברשת VPC:
compute.subnetworks.useExternalIpבפרויקט או ברשת המשנה שנבחרה - כדי להגדיר מטא-נתונים של המכונה הווירטואלית:
compute.instances.setMetadataבפרויקט - כדי להגדיר תגים למכונה הווירטואלית:
compute.instances.setTagsבמכונה הווירטואלית - כדי להגדיר תוויות למכונה הווירטואלית:
compute.instances.setLabelsבמכונה הווירטואלית - כדי להגדיר חשבון שירות לשימוש של המכונה הווירטואלית:
compute.instances.setServiceAccountבמכונה הווירטואלית - כדי ליצור דיסק חדש למכונה הווירטואלית:
compute.disks.createבפרויקט - כדי לצרף דיסק קיים במצב קריאה-בלבד או במצב קריאה וכתיבה:
compute.disks.useבדיסק - כדי לצרף דיסק קיים במצב קריאה-בלבד:
compute.disks.useReadOnlyבדיסק
-
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
סקירה כללית
מומלץ להגדיר את חשבונות השירות של המכונות הווירטואליות באופן הבא:
- יוצרים חשבון שירות חדש שמנוהל על ידי המשתמש במקום להשתמש בחשבון השירות שמוגדר כברירת מחדל של Compute Engine, ומקצים לחשבון השירות הזה תפקידי IAM רק למשאבים ולפעולות שהוא צריך.
- מחברים את חשבון השירות למכונה הווירטואלית.
- מגדירים את היקף פלטפורמת הענן (
https://www.googleapis.com/auth/cloud-platform) במכונה הווירטואלית. כך חשבון השירות של ה-VM יכול לקרוא לממשקי ה-API של Google Cloud שיש לו הרשאה להשתמש בהם.- אם מציינים את חשבון השירות באמצעות מסוף Google Cloud , צריך להגדיר את היקף הגישה של חשבון השירות ל-Allow full access to all Cloud APIs.
- אם מציינים את חשבון השירות באמצעות Google Cloud CLI או Compute Engine API, אפשר להשתמש בפרמטר
scopesכדי להגדיר את היקף הגישה.
הגדרה של חשבון שירות
יוצרים חשבון שירות ומקצים את תפקידי ה-IAM הנדרשים. אפשר להקצות כמה תפקידי IAM שרוצים. אתם יכולים לשנות את תפקידי ה-IAM בחשבון השירות לפי הצורך.
Google ממליצה להגביל את ההרשאות של חשבונות שירות ולבדוק באופן קבוע את ההרשאות של חשבון השירות כדי לוודא שהן עדכניות.
כדי להגדיר את חשבון השירות, משתמשים באחת מהשיטות הבאות.
המסוף
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
-
במסוף Google Cloud , נכנסים לדף Create service account.
כניסה לדף Create service account - בוחרים את הפרויקט הרצוי.
-
כותבים שם בשדה Service account name. המסוף Google Cloud ממלא את השדה מזהה חשבון שירות בהתאם לשם הזה.
כותבים תיאור בשדה Service account description. לדוגמה:
Service account for quickstart. - לוחצים על Create and continue.
-
מקצים לחשבון השירות את התפקידים הנדרשים.
כדי להקצות תפקיד, בוחרים תפקיד מהרשימה Select a role.
כדי להקצות עוד תפקידים, לוחצים על Add another role ומוסיפים את כולם.
- לוחצים על Continue.
-
בשדה Service account users role, מזינים את המזהה של חשבון המשתמש שיצרף את חשבון השירות למשאבים אחרים, כמו מכונות של Compute Engine.
בדרך כלל מזהה המשתמש הוא כתובת האימייל של חשבון Google.
-
לוחצים על Done כדי לסיים ליצור את חשבון השירות.
roles/iam.serviceAccountCreator) ואת התפקיד "אדמין IAM בפרויקט" (roles/resourcemanager.projectIamAdmin) ב-IAM. איך נותנים תפקידים?
gcloud
-
מוודאים שיש לכם את התפקיד "יצירת חשבונות שירות" (
roles/iam.serviceAccountCreator) ואת התפקיד "אדמין של פרויקט" (roles/resourcemanager.projectIamAdmin) ב-IAM. איך מקצים תפקידים -
יוצרים את חשבון השירות:
gcloud iam service-accounts create SERVICE_ACCOUNT_NAME
מחליפים את הערך
SERVICE_ACCOUNT_NAMEבשם שרוצים לתת לחשבון השירות. -
כדי לתת גישה לפרויקט ולמשאבים, מקצים תפקיד לחשבון השירות:
gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=ROLE
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותROLE: התפקיד שאתם רוצים לתת
- כדי להקצות תפקיד נוסף לחשבון השירות, מריצים שוב את הפקודה שמו שעשיתם בשלב הקודם.
-
מקצים את התפקיד הנדרש לחשבון המשתמש שיצרף את חשבון השירות למשאבים אחרים.
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com --member="user:USER_EMAIL" --role=roles/iam.serviceAccountUser
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_NAME: השם של חשבון השירותPROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירותUSER_EMAIL: כתובת האימייל של חשבון Google
מגדירים את האימות:
Terraform
כדי ליצור חשבון שירות, אפשר להשתמש במשאב google_service_account.
חשוב להחליף את הערכים הזמניים לשמירת מקום (פלייסהולדרים) של המאפיינים account_id ו-display_name.
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
יצירת מכונה וירטואלית וצירוף חשבון השירות
אחרי שיוצרים את חשבון השירות, יוצרים מכונה וירטואלית ומצרפים אליה את חשבון השירות שיצרתם בקטע הקודם. צריך גם להגדיר את היקף הגישה של ה-VM ל-cloud-platform.
היקפי הגישה שמוגדרים במכונה וירטואלית קובעים את ההיקפים המקסימליים של טוקני הגישה מסוג OAuth2 משרת המטא-נתונים. אתם יכולים לבקש אסימונים עם פחות היקפי הרשאות מאשר ברירת המחדל. מידע נוסף זמין במאמר קבלת אסימוני גישה ספציפיים של OAuth2.
אם כבר יש לכם מכונה וירטואלית ואתם רוצים להגדיר אותה כך שתשתמש בחשבון שירות אחר, קראו את המאמר שינוי חשבון השירות המצורף.
כדי ליצור מכונה וירטואלית ולצרף את חשבון השירות, אפשר להשתמש באחת מהשיטות הבאות.
המסוף
נכנסים לדף Create an instance במסוף Google Cloud .
כדי לצרף חשבון שירות:
- בתפריט הניווט, לוחצים על אבטחה.
- ברשימה Service account, בוחרים את חשבון השירות שיצרתם.
- בשדה היקפי גישה, בוחרים באפשרות Allow full access to all Cloud APIs.
אופציונלי: מציינים אפשרויות הגדרה אחרות. למידע נוסף, ראו אפשרויות הגדרה במהלך יצירת מכונה.
כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.
gcloud
כדי ליצור מכונת VM חדשה ולהגדיר אותה לשימוש בחשבון שירות בהתאמה אישית באמצעות ה-CLI של Google Cloud, משתמשים בפקודה gcloud compute instances create ומספקים את כתובת האימייל של חשבון השירות ואת היקף הגישה cloud-platform למכונת ה-VM.
gcloud compute instances create VM_NAME \
--service-account=SERVICE_ACCOUNT_EMAIL \
--scopes=https://www.googleapis.com/auth/cloud-platform
מחליפים את מה שכתוב בשדות הבאים:
-
SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות שיצרתם. לדוגמה:my-sa-123@my-project-123.iam.gserviceaccount.com. כדי לראות את כתובת האימייל, עיינו במאמר הצגת רשימה של חשבונות שירות. -
VM_NAME: השם של המכונה הווירטואלית.
לדוגמה:
gcloud compute instances create example-vm \
--service-account 123-my-sa@my-project-123.iam.gserviceaccount.com \
--scopes=https://www.googleapis.com/auth/cloud-platform
אפשר גם לציין את ההיקף באמצעות כינוי: --scopes=cloud-platform.
רק ה-CLI של gcloud מזהה את הכינויים האלה. ה-API וספריות אחרות לא מזהים את הכינויים האלה, ולכן צריך לציין את ה-URI המלא של ההיקף.
Terraform
כדי להגדיר מכונה וירטואלית חדשה לשימוש בחשבון שירות, אתם יכולים להשתמש במשאב google_compute_instance.
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
REST
משתמשים ב-instances.insert method כדי ליצור את המכונה הווירטואלית, ומציינים את כתובת האימייל של חשבון השירות ואת היקף הגישה של המכונה הווירטואלית.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "machineType":"zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name":"VM_NAME", "disks":[ { "initializeParams":{ "sourceImage":"projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot":true } ], "networkInterfaces":[ { "network":"global/networks/NETWORK_NAME" } ], "serviceAccounts": [ { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": ["https://www.googleapis.com/auth/cloud-platform"] } ], "shieldedInstanceConfig":{ "enableSecureBoot":"ENABLE_SECURE_BOOT" } }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שבו יוצרים את המכונה הווירטואלית -
ZONE: האזור שבו יוצרים את המכונה הווירטואלית -
MACHINE_TYPE_ZONE: האזור שבו נמצא סוג המכונה שרוצים להשתמש בו בשביל המכונה הווירטואלית החדשה -
MACHINE_TYPE: סוג המכונה, מוגדר מראש או בהתאמה אישית, של המכונה הווירטואלית החדשה -
VM_NAME: השם של המכונה הווירטואלית החדשה -
IMAGE_PROJECT: הפרויקט שמכיל את קובץ האימג'
. לדוגמה, אם מציינים אתdebian-12בתור משפחת קובצי האימג', צריך לציין אתdebian-cloudבתור פרויקט קובץ האימג'. -
IMAGE: מציינים אחת מהאפשרויות הבאות:
IMAGE: גרסה ספציפית של קובץ אימג' ציבורילדוגמה,
"sourceImage": "projects/debian-cloud/global/images/debian-12-bookworm-v20241112"
IMAGE_FAMILY: משפחת קובצי אימג'כשמציינים משפחת קובצי אימג', המכונה הווירטואלית נוצרת מקובץ האימג' העדכני ביותר של מערכת ההפעלה, שלא הוצא משימוש. לדוגמה, אם מציינים את הערך
"sourceImage": "projects/debian-cloud/global/images/family/debian-12", Compute Engine יוצרת מכונה וירטואלית מהגרסה העדכנית של קובץ האימג' של מערכת ההפעלה במשפחת קובצי האימג' של Debian 12.
-
NETWORK_NAME: רשת ה-VPC שבה רוצים להשתמש בשביל ה-VM. אפשר לציין את הערךdefaultכדי להשתמש ברשת ברירת המחדל. -
SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות שיצרתם. לדוגמה:my-sa-123@my-project-123.iam.gserviceaccount.com. כדי לראות את כתובת האימייל, עיינו במאמר קבלת כתובת אימייל של חשבון שירות.
ENABLE_SECURE_BOOT: אופציונלי: אם בחרתם תמונה שתומכת בתכונות של מכונה וירטואלית מוגנת, כברירת מחדל Compute Engine מפעיל את מודול הפלטפורמה המהימנה הווירטואלית (vTPM) ואת מעקב התקינות. כברירת מחדל, Compute Engine לא מפעיל את Secure Boot.אם מציינים את הערך
trueבשדהenableSecureBoot, המערכת של Compute Engine יוצרת מכונה וירטואלית שבה מופעלות כל שלוש התכונות של מכונה וירטואלית מוגנת. אחרי ש-Compute Engine מפעיל את ה-VM, כדי לשנות את האפשרויות של המכונה הווירטואלית המוגנת צריך לעצור את ה-VM.
גישה לשירותים אחרים של Google Cloud ושימוש בהם
אחרי שמגדירים את המכונה הווירטואלית לשימוש בחשבון השירות, האפליקציות יכולות להשתמש בחשבון השירות כדי לבצע אימות. השיטה הנפוצה ביותר היא אימות באמצעות Application Default Credentials וספריית לקוח. כלים מסוימים, כמו ה-CLI של gcloud, יכולים להשתמש באופן אוטומטי בחשבון השירות כדי לגשת לממשקי ה-API של Google Cloud מתוך מכונה וירטואלית. Google Cloud מידע נוסף זמין במאמר אימות עומסי עבודה באמצעות חשבונות שירות.
אם חשבון שירות נמחק, לאפליקציות לא תהיה יותר גישה למשאבים שלGoogle Cloud דרך חשבון השירות הזה. אם מוחקים את חשבונות השירות שמוגדרים כברירת מחדל של App Engine ו-Compute Engine, למכונות הווירטואליות לא תהיה יותר גישה למשאבים בפרויקט. אם אתם לא בטוחים אם משתמשים בחשבון שירות, מומלץ להשבית את חשבון השירות לפני שתמחקו אותו. אפשר להפעיל מחדש חשבונות שירות מושבתים, אם הם עדיין נחוצים.
דוגמה: גישה למשאבי Cloud Storage מה-VM
אחרי שמגדירים את ה-VM כך שישתמש בחשבון שירות עם התפקיד storage.admin, אפשר להשתמש בכלים כמו ה-CLI של gcloud כדי לנהל קבצים שמאוחסנים ב-Cloud Storage. כדי לגשת למשאבים של Cloud Storage, מבצעים את הפעולות הבאות:
מוודאים שלחשבון השירות שמחובר למכונה הווירטואלית יש את התפקיד
roles/storage.admin.אם ה-VM משתמש בקובץ אימג' של מערכת הפעלה בהתאמה אישית, מתקינים את ה-CLI של gcloud. כברירת מחדל, ה-CLI של gcloud מותקן ברוב קובצי האימג' הציבוריים של מערכות ההפעלה ש- Google Cloudמספקת.
מתחברים למכונה הווירטואלית.
מה-VM, משתמשים ב-Google Cloud CLI כדי לנהל את המשאבים ב-Cloud Storage.
מה השלב הבא?
- איך מאמתים עומסי עבודה באמצעות חשבונות שירות
- איך משנים את חשבון השירות שמחובר למכונה וירטואלית
- איך מציגים את הרשימה של חשבונות השירות ועורכים אותם
- כדי לצמצם את סיכוני האבטחה, מומלץ לקרוא את השיטות המומלצות לשימוש בחשבונות שירות.