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

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

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

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

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

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות ליצירת מכונות וירטואליות שמשתמשות בחשבונות שירות, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:

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

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

ההרשאות הנדרשות

כדי ליצור מכונות וירטואליות שמשתמשות בחשבונות שירות, צריך את ההרשאות הבאות:

  • כדי ליצור חשבונות שירות: כל ההרשאות בתפקיד 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 בדיסק

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

סקירה כללית

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

  1. יוצרים חשבון שירות חדש שמנוהל על ידי המשתמש במקום להשתמש בחשבון השירות שמוגדר כברירת מחדל של Compute Engine, ומקצים לחשבון השירות הזה תפקידי IAM רק למשאבים ולפעולות שהוא צריך.
  2. מצרפים את חשבון השירות למכונה הווירטואלית.
  3. מגדירים את היקף פלטפורמת הענן (https://www.googleapis.com/auth/cloud-platform) במכונה הווירטואלית. כך חשבון השירות של מכונת ה-VM יכול לקרוא לממשקי ה-API שיש לו הרשאה להשתמש בהם. Cloud de Confiance by S3NS
    • אם מציינים את חשבון השירות באמצעות Cloud de Confiance המסוף, צריך להגדיר את היקף הגישה של חשבון השירות לAllow full access to all Cloud APIs.
    • אם מציינים את חשבון השירות באמצעות Google Cloud CLI או Compute Engine API, אפשר להשתמש בפרמטר scopes כדי להגדיר את היקף הגישה.

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

יוצרים חשבון שירות ומקצים לו את תפקידי ה-IAM הנדרשים. מקצים כמה תפקידי IAM שצריך. אפשר לשנות את תפקידי ה-IAM בחשבון השירות לפי הצורך.

‫Google ממליצה להגביל את ההרשאות של חשבונות שירות ולבדוק באופן קבוע את ההרשאות של חשבונות השירות כדי לוודא שהן עדכניות.

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

המסוף

    מוודאים שיש לכם את תפקיד ה-IAM 'יצירת חשבונות שירות' (roles/iam.serviceAccountCreator) ואת התפקיד 'אדמין IAM בפרויקט' (roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
  1. במסוף Cloud de Confiance , נכנסים לדף יצירת חשבון שירות.

    כניסה לדף Create service account
  2. בוחרים את הפרויקט הרצוי.
  3. כותבים שם בשדה Service account name. המסוף Cloud de Confiance ממלא את השדה מזהה חשבון שירות בהתאם לשם הזה.

    כותבים תיאור בשדה Service account description. לדוגמה: Service account for quickstart.

  4. לוחצים על Create and continue.
  5. מקצים לחשבון השירות את התפקידים הנדרשים.

    כדי להקצות תפקיד, בוחרים תפקיד מהרשימה Select a role.

    כדי להקצות עוד תפקידים, לוחצים על Add another role ומוסיפים את כולם.

  6. לוחצים על Continue.
  7. בשדה Service account users role, מזינים את המזהה של חשבון המשתמש שיצרף את חשבון השירות למשאבים אחרים, כמו מכונות של Compute Engine.

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

  8. לוחצים על Done כדי לסיים ליצור את חשבון השירות.

gcloud

    מגדירים את האימות:

    1. מוודאים שיש לכם את תפקיד ה-IAM ‏Create Service Accounts ‏(roles/iam.serviceAccountCreator) ואת תפקיד ה-IAM ‏Project Admin ‏(roles/resourcemanager.projectIamAdmin). איך מקצים תפקידים
    2. יוצרים את חשבון השירות:

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      מחליפים את הערך SERVICE_ACCOUNT_NAME בשם שרוצים לתת לחשבון השירות.

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

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com" --role=ROLE

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

      • SERVICE_ACCOUNT_NAME: השם של חשבון השירות
      • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות
      • ROLE: התפקיד שאתם רוצים לתת
    4. כדי להקצות תפקיד נוסף לחשבון השירות, מריצים שוב את הפקודה שמו שעשיתם בשלב הקודם.
    5. מקצים את התפקיד הנדרש לחשבון המשתמש שיצרף את חשבון השירות למשאבים אחרים.

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com --member="principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/SUBJECT_ID" --role=roles/iam.serviceAccountUser

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

      • SERVICE_ACCOUNT_NAME: השם של חשבון השירות.
      • PROJECT_ID: מזהה הפרויקט שבו יצרתם את חשבון השירות.
      • POOL_ID: מזהה מאגר הזהויות של כוח העבודה.
      • SUBJECT_ID: מזהה נושא. בדרך כלל זה המזהה של משתמש במאגר זהויות של כוח עבודה. לפרטים נוספים, קראו את המאמר ייצוג המשתמשים במאגרי כוח עבודה בכללי מדיניות IAM.

Terraform

כדי ליצור חשבון שירות, אפשר להשתמש במשאב google_service_account.

resource "google_service_account" "default" {
  account_id   = "service-account-id"
  display_name = "Service Account"
}

חשוב להחליף את ערכי placeholder במאפיינים account_id ו-display_name.

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

יצירת מכונה וירטואלית וצירוף חשבון השירות

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

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

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

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

המסוף

  1. נכנסים לדף Create an instance במסוף Cloud de Confiance .

    כניסה לדף Create an instance

  2. כדי לצרף חשבון שירות:

    1. בתפריט הניווט, לוחצים על אבטחה.
    2. ברשימה Service account בוחרים את חשבון השירות שיצרתם.
    3. בקטע Access scopes בוחרים באפשרות Allow full access to all Cloud APIs.
  3. אופציונלי: מציינים אפשרויות הגדרה אחרות. מידע נוסף מופיע במאמר אפשרויות הגדרה במהלך יצירת מכונה.

  4. כדי ליצור את המכונה ולהפעיל אותה, לוחצים על Create.

gcloud

כדי ליצור מכונת VM חדשה ולהגדיר אותה לשימוש בחשבון שירות מותאם אישית באמצעות Google Cloud CLI, משתמשים בפקודה 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.s3ns.iam.gserviceaccount.com. כדי לראות את כתובת האימייל, קראו את המאמר בנושא הצגת רשימה של חשבונות שירות.
  • VM_NAME: השם של מופע ה-VM.

לדוגמה:

gcloud compute instances create example-vm \
    --service-account 123-my-sa@my-project-123.s3ns.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform

אפשר גם לציין את ההיקף באמצעות הכינוי: --scopes=cloud-platform. הכינויים האלה מזוהים רק על ידי ה-CLI של gcloud. ממשק ה-API וספריות אחרות לא מזהים את הכינויים האלה, ולכן צריך לציין את מזהה ה-URI המלא של ההיקף.

Terraform

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

resource "google_compute_instance" "default" {
  name         = "my-test-vm"
  machine_type = "n1-standard-1"
  zone         = "us-central1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  // Local SSD disk
  scratch_disk {
    interface = "SCSI"
  }

  network_interface {
    network = "default"

    access_config {
      // Ephemeral public IP
    }
  }

  service_account {
    # Google recommends custom service accounts with `cloud-platform` scope with
    # specific permissions granted via IAM Roles.
    # This approach lets you avoid embedding secret keys or user credentials
    # in your instance, image, or app code
    email  = google_service_account.default.email
    scopes = ["cloud-platform"]
  }
}

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

REST

משתמשים בשיטה instances.insert כדי ליצור את מכונת ה-VM ולציין את כתובת האימייל של חשבון השירות ואת היקף הגישה למכונת ה-VM.

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: name של המכונה הווירטואלית החדשה
  • IMAGE_PROJECT: הפרויקט שמכיל את התמונה
    . לדוגמה, אם מציינים debian-10 כמשפחת התמונות, מציינים debian-cloud כפרויקט התמונות.
  • IMAGE: מציינים אחת מהאפשרויות הבאות:
    • IMAGE: גרסה ספציפית של תמונה ציבורית

      לדוגמה, "sourceImage": "projects/debian-cloud/global/images/debian-10-buster-v20200309"

    • IMAGE_FAMILY: משפחת תמונות

      הפעולה הזו יוצרת את מכונת ה-VM מתמונת מערכת ההפעלה העדכנית ביותר שלא הוצאה משימוש. לדוגמה, אם מציינים "sourceImage": "projects/debian-cloud/global/images/family/debian-10",‏ Compute Engine יוצר מכונה וירטואלית מהגרסה האחרונה של תמונת מערכת ההפעלה במשפחת התמונות Debian 10.

  • NETWORK_NAME: רשת ה-VPC שבה רוצים להשתמש עבור מכונת ה-VM. אפשר לציין default כדי להשתמש ברשת ברירת המחדל.
  • SERVICE_ACCOUNT_EMAIL: כתובת האימייל של חשבון השירות שיצרתם. לדוגמה: my-sa-123@my-project-123.s3ns.iam.gserviceaccount.com. במאמר איך מקבלים כתובת אימייל של חשבון שירות מוסבר איך לראות את כתובת האימייל.
  • ENABLE_SECURE_BOOT: אופציונלי: אם בחרתם תמונה שתומכת בתכונות של Shielded VM,‏ Compute Engine מפעיל כברירת מחדל את מודול הפלטפורמה הווירטואלית המהימנה (vTPM) ואת המעקב אחר השלמות. ב-Compute Engine, האפשרות Secure Boot לא מופעלת כברירת מחדל.

    אם מציינים true בשביל enableSecureBoot, ‏ Compute Engine יוצר מכונה וירטואלית עם כל שלושת התכונות של מכונה וירטואלית מוגנת. אחרי שמכונה וירטואלית מופעלת ב-Compute Engine, כדי לשנות את האפשרויות של מכונה וירטואלית מוגנת, צריך להפסיק את הפעילות של המכונה הווירטואלית.

גישה לשירותים אחרים Cloud de Confiance by S3NS ושימוש בהם

אחרי שמגדירים את המכונה הווירטואלית לשימוש בחשבון השירות, אפשר להשתמש בחשבון השירות כדי לבצע אימות באפליקציות. השיטה הנפוצה ביותר היא אימות באמצעות Application Default Credentials וספריית לקוח. חלק מהכלים, כמו ה-CLI של gcloud, יכולים להשתמש באופן אוטומטי בחשבון השירות כדי לגשת לממשקי API ממכונה וירטואלית. Cloud de Confiance by S3NS Cloud de Confiance by S3NS מידע נוסף זמין במאמר אימות עומסי עבודה באמצעות חשבונות שירות.

אם חשבון שירות נמחק, לאפליקציות לא תהיה יותר גישה למשאבים דרך חשבון השירות הזה.Cloud de Confiance by S3NS אם מוחקים את חשבונות השירות שמוגדרים כברירת מחדל ב-App Engine וב-Compute Engine, למכונות הווירטואליות לא תהיה יותר גישה למשאבים בפרויקט. אם לא בטוחים אם משתמשים בחשבון שירות, Google ממליצה להשבית את חשבון השירות לפני שמחליטים למחוק אותו. אפשר להפעיל מחדש חשבונות שירות מושבתים אם הם עדיין נחוצים.

דוגמה: גישה למשאבים של Cloud Storage ממכונת ה-VM

אחרי שמגדירים את המכונה הווירטואלית לשימוש בחשבון שירות עם תפקיד storage.admin, אפשר להשתמש בכלים כמו ה-CLI של gcloud כדי לנהל קבצים ששמרתם ב-Cloud Storage. כדי לגשת למשאבים של Cloud Storage, צריך לבצע את הפעולות הבאות:

  1. מוודאים שלחשבון השירות שמחובר למכונה הווירטואלית מוקצה התפקיד roles/storage.admin.

  2. אם ה-VM שלכם משתמש בקובץ אימג' מותאם אישית של מערכת הפעלה, צריך להתקין את ה-CLI של gcloud. כברירת מחדל, ה-CLI של gcloud מותקן ברוב תמונות מערכות ההפעלה הציבוריות שמסופקות על ידי Cloud de Confiance by S3NS.

  3. מתחברים ל-VM.

  4. מתוך מכונת ה-VM, משתמשים ב-Google Cloud CLI כדי לנהל את המשאבים ב-Cloud Storage.

מה השלב הבא?