שינוי חשבון השירות המצורף

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

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

אם יש לכם אפליקציות שצריכות לבצע קריאות לממשקי Google Cloud API, מומלץ לצרף חשבון שירות בניהול המשתמשים למכונה הווירטואלית שבה האפליקציה או עומס העבודה פועלים. לאחר מכן, מקצים לחשבון השירות תפקידי IAM, וכך מאפשרים לחשבון השירות (ולאפליקציות שפועלות במכונה) לגשת לGoogle Cloud משאבים.

לפני שמתחילים

  • אם עדיין לא עשיתם את זה, תצטרכו להגדיר אימות. אימות הוא תהליך שבו מאמתים את הזהות שלכם כדי לקבל גישה לממשקי API ולשירותים של Google Cloud . כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine באחת מהדרכים הבאות:

    צריך לבחור את הכרטיסייה הרלוונטית לאופן שבו תכננתם להשתמש בדוגמאות בדף הזה:

    המסוף

    כשמשתמשים במסוף Google Cloud כדי לגשת לשירותים ולממשקי ה-API, לא צריך להגדיר אימות. Google Cloud

    gcloud

    1. התקינו את ה-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

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

סקירה כללית

מומלץ להגדיר חשבונות שירות למכונות הווירטואליות באופן הבא:

  1. יוצרים חשבון שירות חדש שמנוהל על ידי המשתמש במקום להשתמש בחשבון השירות שמוגדר כברירת מחדל של Compute Engine, ומקצים לחשבון השירות הזה תפקידי IAM רק למשאבים ולפעולות שהוא צריך.
  2. מצרפים את חשבון השירות למכונה הווירטואלית.
  3. מגדירים את היקף פלטפורמת הענן (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 לחשבון השירות שמוגדר כברירת מחדל, אתם יכולים ליצור חשבון שירות חדש בניהול המשתמש.

צירוף חשבון השירות ועדכון היקף הגישה

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

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

אפשר להשתמש באחת מהשיטות הבאות כדי לשנות את חשבון השירות ואת היקפי הגישה במכונה הווירטואלית.

המסוף

  1. נכנסים לדף VM instances.

    כניסה לדף VM instances

  2. לוחצים על השם של המכונה הווירטואלית שרוצים לשנות את חשבון השירות שלה.

  3. לוחצים על הפסקה. אם אין אפשרות עצירה, לוחצים על עוד פעולות > עצירה. מחכים שהמכונה הווירטואלית תיעצר.

  4. לוחצים על Edit.

  5. גוללים למטה לקטע חשבון שירות.

  6. מהרשימה הנפתחת, בוחרים את חשבון השירות שרוצים להקצות למכונה הווירטואלית.

    • אם בוחרים חשבון שירות בניהול המשתמשים, היקף הגישה של המכונה הווירטואלית מוגדר כברירת מחדל להיקף המומלץ 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 בחשבון השירות.
  7. לוחצים על Save כדי לשמור את השינויים.

  8. לוחצים על התחלה/המשך כדי להפעיל מחדש את ה-VM.

gcloud

  1. מפסיקים את ה-VM באמצעות הפקודה instances stop. מחליפים את VM_NAME בשם של מופע המכונה הווירטואלית.

    gcloud compute instances stop VM_NAME
    
  2. מצרפים את חשבון השירות. כדי לצרף את חשבון השירות, משתמשים בפקודה 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
    
  3. מפעילים את ה-VM באמצעות הפקודה instances start. מחליפים את VM_NAME בשם של מופע המכונה הווירטואלית.

    gcloud compute instances start VM_NAME
    

REST

  1. כדי לעצור את ה-VM, שולחים בקשת POST באמצעות ה-method‏ instances.stop:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    

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

    • PROJECT_ID: הפרויקט שבו נמצאת המכונה הווירטואלית
    • ZONE: האזור שבו נמצאת המכונה הווירטואלית
    • VM_NAME: שם המכונה הווירטואלית שרוצים לעצור
  2. מצרפים את חשבון השירות על ידי שליחת בקשת 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"
      ]
    }
    
  3. מפעילים את ה-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

  1. נכנסים לדף VM instances.

    כניסה לדף VM instances

  2. לוחצים על השם של המכונה הווירטואלית שרוצים לשנות את חשבון השירות שלה.

  3. עוברים לקטע 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/

אם המופע לא משתמש בחשבון שירות, תקבלו תגובה ריקה.

שיטות מומלצות

מה השלב הבא?