במאמר הזה מוסבר איך להגדיר מכונה וירטואלית (VM) קיימת כך שתשתמש בחשבון שירות אחר. חשבון שירות הוא סוג מיוחד של חשבון, שמשמש בדרך כלל אפליקציה או עומס עבודה ממוחשב כדי לבצע קריאות מורשות ל-API.
חשבונות שירות נדרשים במקרים שבהם עומס עבודה (workload), כמו אפליקציה בהתאמה אישית, צריך גישה למשאבים או לבצע פעולות בלי מעורבות של משתמש קצה. Google Cloud מידע נוסף על מקרים שבהם כדאי להשתמש בחשבונות שירות זמין במאמר שיטות מומלצות לשימוש בחשבונות שירות.
אם יש לכם אפליקציות שצריכות לבצע קריאות לממשקי Google Cloud API, מומלץ לצרף חשבון שירות בניהול המשתמשים למכונה הווירטואלית שבה האפליקציה או עומס העבודה פועלים. לאחר מכן, מקצים לחשבון השירות תפקידי IAM, וכך מאפשרים לחשבון השירות (ולאפליקציות שפועלות במכונה) לגשת לGoogle Cloud משאבים.
לפני שמתחילים
-
אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות.
אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:
צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:
המסוף
כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud
gcloud
-
התקינו את ה-CLI של Google Cloud. אחר כך, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:
gcloud initאם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
-
- הגדרת אזור ותחום כברירת מחדל
REST
כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
התקינו את ה-CLI של Google Cloud.
אם אתם משתמשים בספק זהויות חיצוני (IdP), קודם אתם צריכים להיכנס ל-CLI של gcloud באמצעות המאגר המאוחד לניהול זהויות.
מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Google Cloud .
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות להגדרת חשבונות שירות במכונה הווירטואלית, צריך לבקש מהאדמין להקצות לכם ב-IAM את התפקיד אדמין מכונות של Compute (v1) (roles/compute.instanceAdmin.v1) במכונה הווירטואלית או בפרויקט.
כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
זהו תפקיד שמוגדר מראש וכולל את ההרשאות שנדרשות להגדרת חשבונות שירות במכונה הווירטואלית. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי להגדיר חשבונות שירות במכונה הווירטואלית, צריך את ההרשאות הבאות:
-
compute.instances.setServiceAccount -
compute.instances.stop -
compute.instances.start
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
סקירה כללית
מומלץ להגדיר חשבונות שירות למכונות הווירטואליות באופן הבא:
- יוצרים חשבון שירות חדש שמנוהל על ידי המשתמש במקום להשתמש בחשבון השירות שמוגדר כברירת מחדל של 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כדי להגדיר את היקף הגישה.
הגדרת חשבון השירות
אתם יכולים ליצור חשבון שירות שמנוהל על ידי משתמש או להשתמש בחשבון השירות שמוגדר כברירת מחדל של Compute Engine. מומלץ להשתמש בחשבון שירות שמנוהל על ידי משתמש.
מוודאים שחשבון השירות שנבחר קיבל את תפקידי ניהול הזהויות והרשאות הגישה (IAM) הנדרשים.
בניהול המשתמש
אם עדיין אין לכם חשבון שירות שמנוהל על ידי משתמש, יוצרים חשבון שירות. הוראות מפורטות זמינות במאמר בנושא הגדרת חשבון שירות.
ברירת מחדל
אם אתם מכירים את חשבון השירות שמוגדר כברירת מחדל של Compute Engine ורוצים להשתמש בפרטי הכניסה שחשבון השירות הזה מספק במקום ליצור חשבונות שירות חדשים, אתם יכולים להקצות תפקידי IAM לחשבון השירות שמוגדר כברירת מחדל.
לפני שמקצים תפקידי IAM לחשבון השירות שמוגדר כברירת מחדל, חשוב לדעת:
הקצאת תפקיד IAM לחשבון השירות שמוגדר כברירת מחדל משפיעה על כל המכונות הווירטואליות שפועלות כחשבון השירות שמוגדר כברירת מחדל. לדוגמה, אם מקצים לחשבון השירות שמוגדר כברירת מחדל את התפקיד
roles/storage.objectAdmin, לכל המכונות הווירטואליות שפועלות כחשבון השירות שמוגדר כברירת מחדל עם היקפי הגישה הנדרשים יהיו הרשאות שמוענקות על ידי התפקידroles/storage.objectAdmin. באופן דומה, אם מגבילים את הגישה על ידי השמטה של תפקידים מסוימים, זה משפיע על כל המכונות הווירטואליות שפועלות כחשבון השירות שמוגדר כברירת מחדל.בהתאם להגדרות של מדיניות הארגון, יכול להיות שחשבון השירות שמוגדר כברירת מחדל יקבל אוטומטית את התפקיד 'עריכה' בפרויקט. אנחנו ממליצים מאוד להשבית את הענקת התפקיד האוטומטית על ידי החלת האילוץ
iam.automaticIamGrantsForDefaultServiceAccountsשל מדיניות הארגון. אם יצרתם את הארגון אחרי 3 במאי 2024, האילוץ הזה נאכף כברירת מחדל.אם משביתים את הענקת התפקיד האוטומטית, צריך לקבוע אילו תפקידים להעניק לחשבונות השירות שמוגדרים כברירת מחדל, ואז להעניק את התפקידים האלה בעצמכם.
אם לחשבון השירות שמוגדר כברירת מחדל כבר יש את התפקיד Editor, מומלץ להחליף את התפקיד הזה בתפקידים עם פחות הרשאות.כדי לשנות את התפקידים בחשבון השירות בצורה בטוחה, כדאי להשתמש בסימולטור המדיניות כדי לראות את ההשפעה של השינוי, ואז להעניק ולבטל את התפקידים המתאימים.
אם אתם לא בטוחים לגבי הענקת תפקידי IAM לחשבון השירות שמוגדר כברירת מחדל, אתם יכולים ליצור חשבון שירות חדש בניהול המשתמש.
צירוף חשבון השירות ועדכון היקף הגישה
כדי לשנות את חשבון השירות ואת היקפי הגישה של מכונה וירטואלית, קודם צריך לעצור את המכונה הווירטואלית. אחרי שמבצעים את השינויים הנדרשים, אפשר להפעיל מחדש את המכונה הווירטואלית.
אם חשבון השירות שרוצים לצרף למכונה הווירטואלית נמצא בפרויקט אחר, צריך להגדיר את חשבון השירות למשאב בפרויקט אחר.
אפשר להשתמש באחת מהשיטות הבאות כדי לשנות את חשבון השירות ואת היקפי הגישה במכונה הווירטואלית.
המסוף
נכנסים לדף VM instances.
לוחצים על השם של המכונה הווירטואלית שרוצים לשנות את חשבון השירות שלה.
לוחצים על הפסקה. אם אין אפשרות עצירה, לוחצים על עוד פעולות > עצירה. מחכים שהמכונה הווירטואלית תיעצר.
לוחצים על Edit.
גוללים למטה לקטע חשבון שירות.
מהרשימה הנפתחת, בוחרים את חשבון השירות שרוצים להקצות למכונה הווירטואלית.
- אם בוחרים חשבון שירות בניהול המשתמשים, היקף הגישה של המכונה הווירטואלית מוגדר כברירת מחדל להיקף המומלץ
cloud-platform. אם אתם צריכים היקף שונה לחשבון השירות בניהול המשתמשים, אתם יכולים להשתמש ב-CLI של gcloud או ב-Compute Engine API כדי לצרף את חשבון השירות. - אם בוחרים את חשבון השירות שמוגדר כברירת מחדל של Compute Engine, אפשר לשנות את היקפי הגישה שלו במסוף Google Cloud .
- כדי לשנות את היקפי הגישה, בקטע Access scopes בוחרים באפשרות Set access for each API ומגדירים את היקפי הגישה המתאימים לצרכים שלכם.
- מומלץ אם אתם לא בטוחים מהן הרשאות הגישה שצריך להגדיר, בוחרים באפשרות Allow full access to all Cloud APIs ואז מקפידים להגביל את הגישה על ידי הגדרת תפקידי IAM בחשבון השירות.
- אם בוחרים חשבון שירות בניהול המשתמשים, היקף הגישה של המכונה הווירטואלית מוגדר כברירת מחדל להיקף המומלץ
לוחצים על Save כדי לשמור את השינויים.
לוחצים על התחלה/המשך כדי להפעיל מחדש את ה-VM.
gcloud
מפסיקים את ה-VM באמצעות הפקודה
instances stop. מחליפים אתVM_NAMEבשם של מופע המכונה הווירטואלית.gcloud compute instances stop VM_NAME
מצרפים את חשבון השירות. כדי לצרף את חשבון השירות, משתמשים בפקודה
instances set-service-accountומזינים את שם המכונה הווירטואלית, את כתובת האימייל בחשבון השירות ואת ההיקפים הרצויים. מידע נוסף על הגדרת היקפי גישה זמין במאמר בנושא שיטות מומלצות.gcloud compute instances set-service-account VM_NAME \ --service-account=SERVICE_ACCOUNT_EMAIL \ --scopes=SCOPES
מחליפים את מה שכתוב בשדות הבאים:
SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות שיצרתם. לדוגמה:my-sa-123@my-project-123.iam.gserviceaccount.com. כדי לראות את כתובת האימייל, אפשר לעיין במאמר בנושא הצגת רשימה של חשבונות שירות.כדי להסיר את חשבון השירות מהמכונה הווירטואלית, משתמשים בדגל
--no-service-account.
VM_NAME: השם של מופע ה-VM.
SCOPES: רשימה מופרדת בפסיקים של מזהי URI או כינויים של היקפי הרשאות שמופיעים בתיאור של הדגל--scopes.אם רוצים להסיר את כל ההיקפים של מכונת ה-VM, משתמשים בדגל
--no-scopesבמקום זאת.
לדוגמה, הפקודה הבאה מקצה את חשבון השירות
my-sa-123@my-project-123.iam.gserviceaccount.comלמכונה וירטואלית בשם example-instance ומגדירה את היקפי הגישה במכונה הזו כך שתהיה גישת קריאה/כתיבה ל-Compute Engine וגישת קריאה בלבד ל-Cloud Storage:gcloud compute instances set-service-account example-instance \ --service-account=my-sa-123@my-project-123.iam.gserviceaccount.com \ --scopes=compute-rw,storage-ro
מפעילים את ה-VM באמצעות הפקודה
instances start. מחליפים אתVM_NAMEבשם של מופע המכונה הווירטואלית.gcloud compute instances start VM_NAME
REST
כדי לעצור את ה-VM, שולחים בקשת
POSTבאמצעות ה-methodinstances.stop:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: הפרויקט שבו נמצאת המכונה הווירטואלית -
ZONE: האזור שבו נמצאת המכונה הווירטואלית -
VM_NAME: שם המכונה הווירטואלית שרוצים לעצור
-
מצרפים את חשבון השירות על ידי שליחת בקשת
POSTלשיטהsetServiceAccount:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "SERVICE_ACCOUNT_EMAIL", "scopes": [ "SCOPE_URI", "SCOPE_URI", ... ] }מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט של הבקשה הזו. -
ZONE: האזור שאליו שייכת המכונה הווירטואלית. -
VM_NAME: שם ה-VM. SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות שיצרתם. לדוגמה:my-sa-123@my-project-123.iam.gserviceaccount.com. כדי לראות את כתובת האימייל, אפשר לעיין במאמר בנושא הצגת רשימה של חשבונות שירות.-
SCOPE_URI: ה-URI של ההיקף הנדרש.
לדוגמה, הבקשה הבאה משתמשת באימייל של חשבון השירות
my-sa-123@my-project-123.iam.gserviceaccount.comומגדירה היקף הרשאות של Cloud Storage ו-BigQuery:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/setServiceAccount { "email": "my-sa-123@my-project-123.iam.gserviceaccount.com", "scopes": [ "https://www.googleapis.com/auth/bigquery", "https://www.googleapis.com/auth/devstorage.read_only" ] }-
מפעילים את ה-VM על ידי יצירת בקשת
POSTבאמצעות השיטהinstances.start:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: הפרויקט שבו נמצאת המכונה הווירטואלית -
ZONE: האזור שבו נמצאת המכונה הווירטואלית -
VM_NAME: שם המכונה הווירטואלית שרוצים להפעיל
-
הצגת חשבון השירות שמשמש מכונה וירטואלית
במאמר הצגת רשימה של חשבונות שירות מוסבר איך לראות את כל חשבונות השירות בפרויקט.
אם אתם צריכים לזהות את חשבון השירות שבו נעשה שימוש במכונה וירטואלית, אתם יכולים לבצע את אחד מההליכים הבאים:
console
נכנסים לדף VM instances.
לוחצים על השם של המכונה הווירטואלית שרוצים לשנות את חשבון השירות שלה.
עוברים לקטע API and identity management (ניהול API וזהויות). בקטע הזה מוצגים חשבון השירות והיקף הגישה שבהם נעשה שימוש במכונת ה-VM.
gcloud
מריצים את הפקודה gcloud compute instances describe:
gcloud compute instances describe VM_NAME \
--format json
הפלט אמור להיראות כך:
{
...
"serviceAccounts":[
{
"email":"123845678986-compute@developer.gserviceaccount.com",
"scopes":[
"https://www.googleapis.com/auth/devstorage.full_control"
]
}
]
...
}
אם המכונה הווירטואלית לא משתמשת בחשבון שירות, תקבלו תגובה ללא המאפיין serviceAccounts.
שרת מטא-נתונים
שולחים שאילתה לשרת המטא-נתונים מתוך מכונת ה-VM עצמה. נשלחה בקשה אל
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/:
user@myinst:~$ curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
-H "Metadata-Flavor: Google"
אם הפעלתם חשבון שירות אחד או יותר כשנוצר המופע, הפקודה curl תחזיר פלט דומה לזה:
123845678986-compute@developer.gserviceaccount.com/ default/
אם המופע לא משתמש בחשבון שירות, תקבלו תגובה ריקה.
שיטות מומלצות
- הגבלת ההרשאות של חשבונות שירות ובדיקה קבועה של ההרשאות בחשבונות השירות כדי לוודא שהן עדכניות.
- צריך למחוק חשבונות שירות בזהירות. לפני שמוחקים חשבון שירות, חשוב לוודא שהאפליקציות החיוניות כבר לא משתמשות בו. אם לא בטוחים אם משתמשים בחשבון שירות, מומלץ להשבית את חשבון השירות במקום למחוק אותו. אפשר להפעיל מחדש חשבונות שירות שהושבתו אם הם עדיין נדרשים.
- צמצום סיכוני האבטחה בחשבון השירות. מידע נוסף על שיטות מומלצות לעבודה עם חשבונות שירות