דרישות מוקדמות לייבוא ולייצוא של תמונות VM

במאמר הזה מוסבר על הדרישות המוקדמות לייבוא ולייצוא של תמונות ב-Compute Engine.

אתם יכולים לשתף מכונות וירטואליות (VM), קבצים של דיסקים וירטואליים ותמונות של מכונות מסביבות ענן אחרות או מהסביבה המקומית שלכם, על ידי ייבוא וייצוא של תמונות מ-Cloud Storage. ברשימת המשימות הבאה מפורטות הדרישות שצריך לעמוד בהן לפני שמייבאים ומייצאים תמונות:

  1. הגדרת גישה לקטגוריה של Cloud Storage
  2. הקצאת התפקידים הנדרשים לחשבון המשתמש
  3. מקצים את התפקידים הנדרשים לחשבון השירות ב-Cloud Build
  4. מקצים את התפקידים הנדרשים לחשבון השירות של Compute Engine
  5. הגדרת VPC Service Controls

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

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

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

    המסוף

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

    gcloud

    1. התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם. אחרי שנכנסתם לחשבון, אתחלו את ה-CLI של Google Cloud באמצעות הפקודה הבאה:

      gcloud init
  • הגדרת אזור ותחום כברירת מחדל
  • REST

    כדי להשתמש בסביבת פיתוח מקומית בדוגמאות של API בארכיטקטורת REST שבדף הזה, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.

      התקינו את ה-CLI של Google Cloud ואז היכנסו ל-CLI של gcloud באמצעות הזהות המאוחדת שלכם.

    מידע נוסף מופיע במאמר אימות לשימוש ב-REST במסמכי האימות של Cloud de Confiance .

הגדרת גישה לקטגוריה של Cloud Storage

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

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

  • אם מייצאים תמונה, הכלי לייצוא מעלה את התמונה לקטגוריה של Cloud Storage.

  • אם אתם מייבאים תמונה, אתם צריכים קודם להעלות אותה לקטגוריה של Cloud Storage. כלי הייבוא מוריד את הקובץ מקטגוריה של Cloud Storage אל Compute Engine, ואז הכלי יוצר תמונה ב-Compute Engine מקובץ הדיסק הזה.

מתן התפקידים הנדרשים ב-IAM

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

  • חשבון משתמש. החשבון שממנו מריצים את פקודות הייבוא והייצוא.
  • חשבון השירות של Cloud Build. חשבון שירות שמוגדר כברירת מחדל ב-Cloud Build, שנוצר כשמפעילים את ממשק ה-API ל-Cloud Build בכלי הייבוא או הייצוא.
  • חשבון שירות של Compute Engine. חשבון שירות של Compute Engine שמוגדר כברירת מחדל או מותאם אישית, שנדרש לתהליך העבודה של הייבוא והייצוא.

הקצאת התפקידים הנדרשים לחשבון המשתמש

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

  • תפקיד אדמין לניהול נפח האחסון (roles/storage.admin)
  • תפקיד הצופה (roles/viewer)
  • התפקיד 'אדמין IAM בפרויקט' (roles/resourcemanager.projectIamAdmin)
  • תפקיד העריכה ב-Cloud Build (roles/cloudbuild.builds.editor)

המסוף

  1. עוברים לדף IAM & Admin של הפרויקט או הארגון.

    כניסה לדף IAM & Admin

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

  3. ברשימה Select a role, בוחרים את התפקידים הבאים:

    • Cloud Storage > Storage Admin
    • Project > Viewer
    • מנהל המשאבים > Project IAM Admin
    • Cloud Build > עריכה ב-Cloud Build
  4. שומרים את השינויים.

gcloud

בשלבים הבאים, משתמשים בפקודה gcloud projects add-iam-policy-binding כדי להעניק את התפקידים הנדרשים ברמת הפרויקט.

  1. הקצאת התפקיד roles/storage.admin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/storage.admin'
    

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

  2. הקצאת התפקיד roles/viewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/viewer'
    
  3. הקצאת התפקיד roles/resourcemanager.projectIamAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/resourcemanager.projectIamAdmin'
    
  4. הקצאת התפקיד roles/cloudbuild.builds.editor:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='MEMBER' \
      --role='roles/cloudbuild.builds.editor'
    

REST

  1. קוראים את המדיניות הקיימת באמצעות ה-method ‏getIamPolicy של המשאב. לפרויקטים, צריך להשתמש ב-projects.getIamPolicy method.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    מחליפים את PROJECT_ID במזהה הפרויקט, לדוגמה, my-project-1.

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

    לדוגמה, כדי להקצות את התפקיד הנדרש לחשבון user:export-user@gmail.com, מוסיפים את הקישור הבא למדיניות:

    {
       {
         "role":"roles/storage.admin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/viewer",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/resourcemanager.projectIamAdmin",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
       {
         "roles":"roles/cloudbuild.builds.editor",
         "member":[
           "user:export-user@gmail.com"
         ]
       }
    }
    
  3. כדי לכתוב את המדיניות המעודכנת, משתמשים בשיטה setIamPolicy.

    לדוגמה, כדי להגדיר מדיניות ברמת הפרויקט, משתמשים ב-method ‏project.setIamPolicy. בגוף הבקשה, מציינים את מדיניות ה-IAM המעודכנת מהשלב הקודם.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

הקצאת התפקידים הנדרשים לחשבון השירות ב-Cloud Build

כשמשתמשים במסוף Cloud de Confiance או ב-ה-CLI של gcloud כדי לייבא או לייצא תמונות בפעם הראשונה, הכלי מנסה להפעיל את Cloud Build API ולהעניק את התפקידים הנדרשים לחשבון השירות של Cloud Build.

חשבון השירות שמשמש את Cloud Build תלוי בשאלה אם השתמשתם ב-Cloud Build בפרויקט לפני מאי 2024. אם כן, חשבון השירות מדור קודם של Cloud Build ישמש לבנייה עתידית. אחרת, נעשה שימוש בחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.

  • התפקיד 'יצירת אסימונים בחשבון שירות' (roles/iam.serviceAccountTokenCreator)
  • התפקיד 'משתמש בחשבון שירות' (roles/iam.serviceAccountUser)
  • תפקיד אדמין של Compute (roles/compute.admin)

    כדי להימנע מהקצאת התפקיד 'אדמין Compute', אפשר ליצור תפקיד בהתאמה אישית עם הרשאות ה-IAM הבאות של Compute Engine ולהקצות אותו לחשבון השירות של Cloud Build:

  • תפקיד משתמש ברשת Compute (roles/compute.networkUser)

    התפקיד הזה נדרש רק כשמייבאים או מייצאים תמונות שמשתמשות ב-VPC משותף.

    בפרויקט ה-VPC המשותף, מעניקים את התפקיד Compute Network User לחשבון השירות של Cloud Build שנמצא בפרויקט שממנו מייבאים או אליו מייצאים תמונות.

עם זאת, אתם יכולים להקצות את התפקידים האלה באופן ידני כדי לוודא שההרשאות הנדרשות בתוקף:

המסוף

  1. אחרי שמפעילים את Cloud Build API, עוברים לדף IAM & Admin של הפרויקט או הארגון.

    כניסה לדף IAM & Admin

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

  3. אם התפקידים הנדרשים לא מופיעים, צריך לפעול לפי השלבים הבאים:

    1. לוחצים על הוספת תפקיד נוסף.
    2. ברשימה Select a role, בוחרים את התפקידים הנדרשים שרוצים להוסיף:

    3. לוחצים על שמירה כדי לשמור את השינויים.

  4. אופציונלי: אם מייבאים או מייצאים תמונות שמשתמשות ב-VPC משותף, בוחרים את התפקיד Compute Network User (משתמש ברשת Compute) בפרויקט ה-VPC המשותף:

    1. בכלי לבחירת פרויקטים בחלק העליון של המסוף, בוחרים את פרויקט המארח של ה-VPC המשותף.
    2. בדף IAM & Admin, לוחצים על Grant access.
    3. בשדה New principals, מזינים את כתובת האימייל של חשבון השירות ב-Cloud Build:
       PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com'
       
      מחליפים את הערך PROJECT_NUMBER במספר הייחודי של הפרויקט שאליו מייבאים או ממנו מייצאים תמונות.
    4. ברשימה Select a role בוחרים בתפקיד Compute Engine > Compute Network User.
    5. לוחצים על שמירה כדי לשמור את השינויים.

gcloud

בשלבים הבאים, משתמשים בפקודה gcloud projects add-iam-policy-binding כדי להעניק את התפקידים הנדרשים ברמת הפרויקט.

  1. מקצים את התפקיד roles/compute.admin לחשבון השירות של Cloud Build. כדי להימנע מהקצאת התפקיד roles/compute.admin, אפשר ליצור תפקיד בהתאמה אישית עם ההרשאות הנדרשות, ואז להקצות את התפקיד הזה לחשבון השירות של Cloud Build. אפשר לעיין במאמר ההרשאות הנדרשות לתפקיד בהתאמה אישית שמופיע קודם לכן במסמך הזה.

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com' \
       --role='roles/compute.admin'
    

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

  2. הקצאת התפקיד roles/iam.serviceAccountUser:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com' \
       --role='roles/iam.serviceAccountUser'
    
  3. הקצאת התפקיד roles/iam.serviceAccountTokenCreator:

    gcloud projects add-iam-policy-binding PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com' \
       --role='roles/iam.serviceAccountTokenCreator'
    
  4. אופציונלי: אם אתם מייצאים או מייבאים תמונות שמשתמשות ב-VPC משותף, צריך להעניק את התפקיד roles/compute.networkUser:

    gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
       --member='serviceAccount:PROJECT_NUMBER@cloudbuild.s3ns-system.iam.gserviceaccount.com' \
       --role='roles/compute.networkUser'
    

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

    • HOST_PROJECT_ID: מזהה הפרויקט המארח שבו נמצא ה-VPC המשותף
    • PROJECT_NUMBER: המספר הייחודי של הפרויקט שממנו מייבאים או אליו מייצאים תמונות

REST

  1. קוראים את המדיניות הקיימת באמצעות ה-method ‏getIamPolicy של המשאב. לפרויקטים, צריך להשתמש ב-projects.getIamPolicy method.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    מחליפים את PROJECT_ID במזהה הפרויקט, לדוגמה, my-project-1.

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

    לדוגמה, כדי להקצות את התפקידים הנדרשים ל-serviceAccount:12345@cloudbuild.s3ns-system.iam.gserviceaccount.com, מוסיפים את הקישור הבא למדיניות:

    {
       {
         "role":"roles/compute.admin",
         "member":[
           "serviceAccount:12345@cloudbuild.s3ns-system.iam.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/iam.serviceAccountUser",
         "member":[
           "serviceAccount:12345@cloudbuild.s3ns-system.iam.gserviceaccount.com"
         ]
       }
      {
         "roles":"roles/iam.serviceAccountTokenCreator",
         "member":[
           "serviceAccount:12345@cloudbuild.s3ns-system.iam.gserviceaccount.com"
         ]
       }
    }
    

    כדי להימנע מהקצאת התפקיד roles/compute.admin, אפשר ליצור תפקיד בהתאמה אישית עם ההרשאות הנדרשות, ואז להקצות את התפקיד הזה לחשבון השירות של Cloud Build. אפשר לעיין במאמר ההרשאות הנדרשות לתפקיד בהתאמה אישית שמופיע קודם לכן במסמך הזה.

  3. אופציונלי: אם מייצאים או מייבאים תמונות שמשתמשות ב-VPC משותף, צריך להעניק את התפקיד roles/compute.networkUser בפרויקט של ה-VPC המשותף.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/HOST_PROJECT_ID:getIamPolicy
    

    מחליפים את HOST_PROJECT_ID במזהה של פרויקט ה-VPC המשותף.

    מוסיפים את הקישור הבא ב-IAM לחשבון השירות של Cloud Build:

    {
       {
         "roles":"roles/compute.networkUser",
         "member":[
           "serviceAccount:12345@cloudbuild.s3ns-system.iam.gserviceaccount.com"
         ]
       }
    }
    
  4. כדי לכתוב את המדיניות המעודכנת, משתמשים בשיטה setIamPolicy.

    לדוגמה, כדי להגדיר מדיניות ברמת הפרויקט, משתמשים בשיטה project.setIamPolicy. בגוף הבקשה, מציינים את מדיניות ה-IAM המעודכנת מהשלב הקודם.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

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

מקצים את התפקידים הנדרשים לחשבון השירות של Compute Engine

כשמשתמשים במסוף Cloud de Confiance או ב-CLI של gcloud כדי לייבא או לייצא תמונות בפעם הראשונה, הכלי מנסה להעניק את התפקידים הנדרשים לחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.

בהתאם להגדרות של מדיניות הארגון, יכול להיות שחשבון השירות שמוגדר כברירת מחדל יקבל אוטומטית את התפקיד 'עריכה' בפרויקט. אנחנו ממליצים מאוד להשבית את הענקת התפקיד האוטומטית על ידי החלת האילוץ iam.automaticIamGrantsForDefaultServiceAccounts של מדיניות הארגון. אם יצרתם את הארגון אחרי 3 במאי 2024, האילוץ הזה נאכף כברירת מחדל.

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

אם לחשבון השירות שמוגדר כברירת מחדל כבר יש את התפקיד Editor, מומלץ להחליף את התפקיד הזה בתפקידים עם פחות הרשאות.

לחשבון השירות של Compute Engine צריכים להיות התפקידים הבאים:

  • התפקיד 'אדמין של Compute Storage' (roles/compute.storageAdmin): נדרש גם לייצוא וגם לייבוא של תמונות מכונות וירטואליות
  • התפקיד 'צפייה באובייקטים באחסון' (roles/storage.objectViewer): נדרש לייבוא תמונות של מכונות וירטואליות
  • התפקיד 'אדמין של אובייקטים באחסון' (roles/storage.objectAdmin): נדרש לייצוא של תמונות מכונות וירטואליות
  • התפקיד 'אדמין לניהול נפח האחסון' (roles/storage.admin): נדרש לייצוא תמונות של מכונות וירטואליות

המסוף

  1. עוברים לדף IAM & Admin של הפרויקט או הארגון.

    כניסה לדף IAM & Admin

  2. מחפשים את חשבון השירות של Compute Engine ולוחצים על עריכה.

  3. ברשימה Select a role, בוחרים את התפקידים הבאים:

    • Compute Engine > Compute Storage Admin
    • Cloud Storage > צפייה באובייקטים באחסון
    • Cloud Storage > אדמין של אובייקטים באחסון
  4. שומרים את השינויים.

gcloud

בשלבים הבאים, משתמשים בפקודה gcloud projects add-iam-policy-binding כדי להעניק את התפקידים הנדרשים ברמת הפרויקט.

  1. הקצאת התפקיד roles/compute.storageAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com' \
      --role='roles/compute.storageAdmin'
    
  2. אם מייבאים תמונה, צריך להעניק את התפקיד roles/storage.objectViewer:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com' \
      --role='roles/storage.objectViewer'
    
  3. אם מייצאים תמונה, צריך להעניק את התפקיד roles/storage.objectAdmin:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com' \
      --role='roles/storage.objectAdmin'
    

REST

  1. קוראים את המדיניות הקיימת באמצעות ה-method ‏getIamPolicy של המשאב. לפרויקטים, צריך להשתמש ב-projects.getIamPolicy method.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy
    

    מחליפים את PROJECT_ID במזהה הפרויקט, לדוגמה, my-project-1.

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

    לדוגמה, כדי להקצות את התפקידים הנדרשים ל-serviceAccount:12345-compute@developer.s3ns-system.iam.gserviceaccount.com לצורך ייבוא תמונה, מוסיפים את הקישור הבא למדיניות:

    {
       {
         "role":"roles/compute.storageAdmin",
         "member":[
           "serviceAccount:12345-compute@developer.s3ns-system.iam.gserviceaccount.com"
         ]
       }
       {
         "roles":"roles/storage.objectViewer",
         "member":[
           "serviceAccount:12345-compute@developer.s3ns-system.iam.gserviceaccount.com"
         ]
       }
    }
    
  3. כדי לכתוב את המדיניות המעודכנת, משתמשים בשיטה setIamPolicy.

    לדוגמה, כדי להגדיר מדיניות ברמת הפרויקט, משתמשים ב-method ‏project.setIamPolicy. בגוף הבקשה, מציינים את מדיניות ה-IAM המעודכנת מהשלב הקודם.

    POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
    

אם אתם לא רוצים להשתמש בחשבון השירות שמשמש כברירת המחדל של Compute Engine, אתם יכולים לציין חשבון שירות בניהול המשתמשים באמצעות הדגל --compute-service-account בפקודות gcloud import ו-export. למידע נוסף על שימוש בחשבון שירות מותאם אישית של Compute Engine, אפשר לעיין במקורות המידע הבאים:

הגדרת VPC Service Controls

אם אתם משתמשים ב-VPC Service Controls כדי להגן על הפרויקטים, אתם צריכים להוסיף כלל לתעבורת נתונים יוצאת (egress) לפרויקט compute-image-import (מספר 71462206840). כדי לפעול לפי העיקרון של הרשאות מינימליות, מומלץ לאפשר רק לשירות artifactregistry.googleapis.com להשתמש בשיטות הבאות:

  • artifactregistry.repositories.downloadArtifacts
  • artifactregistry.tags.get
  • artifactregistry.tags.list
  • artifactregistry.versions.get

מידע נוסף זמין במאמר מגבלות של VPC Service Controls.

המאמרים הבאים