שימוש בתמונות מפרויקטים אחרים

בדף הזה מוסבר איך להגדיר את הפרויקט כך ש-Deployment Manager יוכל ליצור מכונות וירטואליות של Compute Engine באמצעות תמונות של מערכות הפעלה ששייכות לפרויקט אחר.

לדוגמה, נניח שיש לכם פרויקט בשם Awesome Project שבו Deployment Manager יוצר ומנהל מכונות וירטואליות. נניח שאתם צריכים להשתמש בתמונות פרטיות ששייכות לפרויקט אחר בשם Database Images. כדי לתת גישה לתמונות האלה, הבעלים של Database Images צריך להקצות את תפקיד ה-IAM‏ roles/compute.imageUser לחשבון השירות של Google APIs של Awesome Project, ואז Awesome Project יוכל להשתמש בתמונות מהפרויקט Database Images.

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

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

מגבלות

ההגבלות הבאות חלות על השימוש בתכונה הזו:

  • צריך להקצות את התפקיד compute.imageUser ברמת הפרויקט לחשבון השירות של Google APIs בפרויקט.
  • הקצאת התפקיד compute.imageUser מעניקה הרשאות לכל התמונות בפרויקט הספציפי. אי אפשר לשתף תמונות ספציפיות.
  • צריך להעניק את התפקיד הזה למשתמשים ספציפיים, ולא לallAuthenticatedUsers או לallUsers.

מתן גישה לתמונות

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

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

    כניסה לדף IAM

  2. אם מתבקשים, בוחרים את הפרויקט מהרשימה. חשוב לבחור את הפרויקט שצריך לקבל גישה לתמונות שמאוחסנות בפרויקט אחר.
  3. מחפשים את חשבון השירות של Google APIs, שיש לו כתובת אימייל בפורמט הבא:

    [PROJECT_NUMBER]@cloudservices.gserviceaccount.com
    
  4. חשוב לרשום את כתובת האימייל שמופיעה למעלה. לאחר מכן, בעלי הפרויקט שבו נמצאות התמונות הרצויות יכולים להקצות לחשבון השירות של Google APIs את התפקיד roles/compute.imageUser.

    המסוף

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

      כניסה לדף IAM

    2. בוחרים את הפרויקט מרשימת הפרויקטים.
    3. לוחצים על הלחצן הוספה כדי להוסיף חבר חדש.
    4. בתיבה Members (חברים), מזינים את כתובת האימייל של חשבון השירות.
    5. מרחיבים את התפריט הנפתח Roles (תפקידים) ובוחרים באפשרות Compute Engine > Compute Image User (משתמש בתמונת מחשוב).
    6. לוחצים על הוספה כדי להוסיף את החשבון.

    gcloud

    בעזרת Google Cloud CLI, מוסיפים קשר למדיניות IAM של הפרויקט:

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member serviceAccount:[SERVICE_ACCOUNT_EMAIL] --role roles/compute.imageUser

    where:

    • ‫[PROJECT_ID] הוא מזהה הפרויקט שמכיל את התמונות שרוצים לשתף.
    • ‫[SERVICE_ACCOUNT_EMAIL] היא כתובת האימייל של חשבון השירות.

    לדוגמה:

    gcloud projects add-iam-policy-binding database-images \
        --member serviceAccount:123456789012@cloudservices.gserviceaccount.com  \
        --role roles/compute.imageUser

    API

    ב-API, שולחים בקשת POST לכתובת ה-URL הבאה, כאשר [PROJECT_ID] הוא מזהה הפרויקט שמכיל את התמונות שרוצים לשתף.

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

    גוף הבקשה צריך להכיל את רשימת ההתאמות שרוצים להחיל על הפרויקט הזה. התפקיד roles/compute.imageUser צריך להיות חלק מהקישור. לדוגמה:

    {
       "policy": {
           "version": "0",
           "bindings": [
           {
               "role": "roles/owner",
               "members": [
                   "user:example@gmail.com"
               ]
           },
           {
               "role": "roles/compute.imageUser",
               "members": [
                   "serviceAccount:123456789012@cloudservices.gserviceaccount.com"
               ]
           }
           ]
       }
    

    }

שימוש בתמונות מפרויקטים אחרים בהגדרות

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

image: projects/[PROJECT_ID]/global/images/[IMAGE_NAME]

לדוגמה, אם מזהה הפרויקט של התמונה הוא database-images, יכול להיות שתספקו את ה-URI הבא של התמונה בהגדרה:

resources:
- name: a-special-vm
  type: compute.v1.instances
  properties:
    machineType: zones/us-central1-a/machineTypes/f1-micro
    image: projects/database-images/global/images/example-database-image
    ...

אחרי שמוסיפים את התמונה, משלימים את יצירת ההגדרה ואז פורסים אותה.

מה השלב הבא?